Release Commons-VFS 2.1 based on RC2

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/vfs/tags/commons-vfs2-project-2.1@1744488 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 7ca2c70..112f13e 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -7,6 +7,22 @@
 
 New features and bug fix release.
 
+Please note that the Clirr report shows several errors.
+These may affect source compatibility.
+However they should not affect binary compatibility, as explained below.
+
+FileContent, FileName, FileObject, FileSystemManager, RandomAccessContent:
+The above interfaces have been updated to add new methods.
+This does not affect binary compatibility; for details please see:
+https://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.5.3-100
+The above changes may affect source compatibility.
+ Changes to method parameters and return types in TarFileObject and TarFileSystem
+The original parameter/return types were the following:
+org.apache.commons.vfs2.provider.tar.TarEntry
+org.apache.commons.vfs2.provider.tar.TarInputStream
+The above were package protected, so any methods using them did not form part of the public API.
+Therefore source and binary compatibility is not affected.
+
 Changes in this version include:
 
 New features:
@@ -120,6 +136,8 @@
 o VFS-364:  Check the href in the response for just a path in addition to a full uri.
 
 Changes:
+o VFS-607:  Update Apache Commons Compress from 1.10 to 1.11.
+o VFS-608:  Update Apache Commons Net from 3.4 to 3.5.
 o VFS-530:  [hdfs] Use stable Apache Hadoop 2.6 dependencies. Thanks to Dave Marion.
 o VFS-601:  Update Apache Commons Net from 3.3 to 3.4.
 o VFS-602:  Update Apache Commons IO from 2.4 to 2.5.
diff --git a/core/pom.xml b/core/pom.xml
index a1c1cf5..d42e497 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -141,6 +141,16 @@
       <artifactId>hadoop-common</artifactId>
       <type>test-jar</type>
       <scope>test</scope>
+      <exclusions>
+        <exclusion>
+         <!-- VFS-606 - tools.jar not available in Java 9
+              This exclusion can be removed after upgrading Hadoop
+              to 2.7.1 or later  
+          -->
+          <groupId>jdk.tools</groupId>
+          <artifactId>jdk.tools</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.hadoop</groupId>
diff --git a/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileObject.java b/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileObject.java
index 2c90495..8071414 100644
--- a/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileObject.java
+++ b/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileObject.java
@@ -33,7 +33,9 @@
 public class Bzip2FileObject extends CompressedFileFileObject<Bzip2FileSystem>
 {
     /**
-     * Deprecated since 2.1. Use {@link #Bzip2FileObject(AbstractFileName, FileObject, Bzip2FileSystem)} instead.
+     * Deprecated since 2.1. 
+     * 
+     * @deprecated Use {@link #Bzip2FileObject(AbstractFileName, FileObject, Bzip2FileSystem)} instead.
      */
     @Deprecated
     protected Bzip2FileObject(final AbstractFileName name, final FileObject container, final CompressedFileFileSystem fs)
diff --git a/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileObject.java b/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileObject.java
index 5390be6..b1cb4ae 100644
--- a/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileObject.java
+++ b/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileObject.java
@@ -32,7 +32,9 @@
 public class GzipFileObject extends CompressedFileFileObject<GzipFileSystem>
 {
     /**
-     * Deprecated since 2.1. Use {@link #GzipFileObject(AbstractFileName, FileObject, GzipFileSystem)} instead.
+     * Deprecated since 2.1. 
+     * 
+     * @deprecated Use {@link #GzipFileObject(AbstractFileName, FileObject, GzipFileSystem)} instead.
      */
     @Deprecated
     protected GzipFileObject(final AbstractFileName name, final FileObject container, final CompressedFileFileSystem fs) {
diff --git a/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileObject.java b/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileObject.java
index 7d8d0f6..83a4e3c 100644
--- a/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileObject.java
+++ b/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileObject.java
@@ -51,8 +51,10 @@
 
     /**
      * Sets the details for this file object.
+     * 
+     * Consider this method package private. TODO Might be made package private in the next major version. 
      */
-    void setTarEntry(final TarArchiveEntry entry)
+    protected void setTarEntry(final TarArchiveEntry entry)
     {
         if (this.entry != null)
         {
diff --git a/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java b/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java
index df288b3..8408443 100644
--- a/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java
+++ b/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java
@@ -41,6 +41,18 @@
 public class WebdavFileProvider
     extends HttpFileProvider
 {
+    
+    /**
+     * The authenticator types used by the WebDAV provider.
+     * 
+     * @deprecated Might be removed in the next major version.
+     */
+    @Deprecated
+    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = new UserAuthenticationData.Type[]
+        {
+            UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD
+        };
+   
     /** The capabilities of the WebDAV provider */
     protected static final Collection<Capability> capabilities =
             Collections.unmodifiableCollection(Arrays.asList(new Capability[]
diff --git a/core/src/test/java/org/apache/commons/vfs2/provider/http/test/GetContentInfoFunctionalTest.java b/core/src/test/java/org/apache/commons/vfs2/provider/http/test/GetContentInfoFunctionalTest.java
index 7e86952..38f5372 100644
--- a/core/src/test/java/org/apache/commons/vfs2/provider/http/test/GetContentInfoFunctionalTest.java
+++ b/core/src/test/java/org/apache/commons/vfs2/provider/http/test/GetContentInfoFunctionalTest.java
@@ -39,10 +39,10 @@
      *             thrown when the getContentInfo API fails.
      */
     @Test
-    public void testGoogle() throws FileSystemException
+    public void testGetContentInfo() throws FileSystemException
     {
         final FileSystemManager fsManager = VFS.getManager();
-        final FileObject fo = fsManager.resolveFile("http://www.google.com/images/logos/ps_logo2.png");
+        final FileObject fo = fsManager.resolveFile("http://www.apache.org/licenses/LICENSE-2.0.txt");
         final FileContent content = fo.getContent();
         Assert.assertNotNull(content);
         // Used to NPE before fix:
diff --git a/core/src/test/java/org/apache/commons/vfs2/provider/https/test/GetContentInfoFunctionalTest.java b/core/src/test/java/org/apache/commons/vfs2/provider/https/test/GetContentInfoFunctionalTest.java
index 5ef3fe8..6d28e1b 100644
--- a/core/src/test/java/org/apache/commons/vfs2/provider/https/test/GetContentInfoFunctionalTest.java
+++ b/core/src/test/java/org/apache/commons/vfs2/provider/https/test/GetContentInfoFunctionalTest.java
@@ -46,7 +46,7 @@
      *             thrown when the System environment contains an invalid URL for an HTTPS proxy.
      */
     @Test
-    public void testGoogle() throws FileSystemException, MalformedURLException
+    public void testGetContentInfo() throws FileSystemException, MalformedURLException
     {
         String httpsProxyHost = null;
         int httpsProxyPort = -1;
@@ -69,7 +69,7 @@
         }
 
         final FileSystemManager fsManager = VFS.getManager();
-        final FileObject fo = fsManager.resolveFile("https://www.google.com/images/logos/ps_logo2.png", opts);
+        final FileObject fo = fsManager.resolveFile("http://www.apache.org/licenses/LICENSE-2.0.txt", opts);
         final FileContent content = fo.getContent();
         Assert.assertNotNull(content);
         // Used to NPE before fix:
diff --git a/pom.xml b/pom.xml
index d764705..ceac4ad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -164,6 +164,11 @@
     <version.checkstyle>2.13</version.checkstyle>
     <!-- make sure bundle plugin has dependency informations for 'optional' -->
     <commons.osgi.excludeDependencies />
+    <!-- Newer versions of clirr throw an NPE buildling the site -->
+    <commons.clirr.version>2.6</commons.clirr.version>
+    <!-- Avoid warnings about being unable to find jars during site buildling -->
+    <dependency.locations.enabled>false</dependency.locations.enabled>
+    <hadoop.version>2.6.0</hadoop.version>
   </properties>
 
   <build>
@@ -365,7 +370,7 @@
       <dependency>
         <groupId>commons-net</groupId>
         <artifactId>commons-net</artifactId>
-        <version>3.4</version>
+        <version>3.5</version>
       </dependency>
       <dependency>
         <groupId>org.apache.commons</groupId>
@@ -380,7 +385,7 @@
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-compress</artifactId>
-        <version>1.10</version>
+        <version>1.11</version>
       </dependency>
       <dependency>
         <groupId>org.apache.jackrabbit</groupId>
@@ -410,7 +415,7 @@
       <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-common</artifactId>
-        <version>2.6.0</version>
+        <version>${hadoop.version}</version>
         <exclusions>
           <exclusion>
             <groupId>*</groupId>
@@ -421,7 +426,7 @@
       <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-hdfs</artifactId>
-        <version>2.6.0</version>
+        <version>${hadoop.version}</version>
         <exclusions>
           <exclusion>
             <groupId>*</groupId>
@@ -501,7 +506,7 @@
       <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-common</artifactId>
-        <version>2.6.0</version>
+        <version>${hadoop.version}</version>
         <type>test-jar</type>
         <exclusions>
           <exclusion>
@@ -514,7 +519,7 @@
       <dependency>
         <groupId>org.apache.hadoop</groupId>
         <artifactId>hadoop-hdfs</artifactId>
-        <version>2.6.0</version>
+        <version>${hadoop.version}</version>
         <type>test-jar</type>
       </dependency>
       <dependency>
diff --git a/sandbox/pom.xml b/sandbox/pom.xml
index c988f7e..93d7e5e 100644
--- a/sandbox/pom.xml
+++ b/sandbox/pom.xml
@@ -24,13 +24,13 @@
   <name>Apache Commons VFS Sandbox</name>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-vfs2-sandbox</artifactId>
-  <version>2.1-SNAPSHOT</version>
+  <version>2.1</version>
   <description>Apache Commons VFS is a Virtual File System library - Sandbox.</description>
 
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-vfs2-project</artifactId>
-    <version>2.1-SNAPSHOT</version>
+    <version>2.1</version>
     <relativePath>../</relativePath>
   </parent>
 
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0700dc1..fbbd8f7 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -15,6 +15,29 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
+<!--
+This file is also used by the maven-changes-plugin to generate the release notes.
+Useful ways of finding items to add to this file are:
+
+1.  Add items when you fix a bug or add a feature (this makes the
+release process easy :-).
+
+2.  Do a JIRA search for tickets closed since the previous release.
+
+3.  Use the report generated by the maven-changelog-plugin to see all
+SVN commits. Set the project.properties' maven.changelog.range
+property to the number of days since the last release.
+
+To generate the release notes from this file:
+
+mvn -N changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]
+
+then tweak the formatting if necessary
+and commit
+
+The <action> type attribute can be add,update,fix,remove.
+-->
+
 <document xmlns="http://maven.apache.org/changes/1.0.0">
   <properties>
     <title>Apache Commons VFS Changes</title>
@@ -22,10 +45,51 @@
   </properties>
 
   <body>
-    <release version="2.1" date="TBD" description="New features and bug fix release.">
+    <release version="2.1" date="TBD" description="New features and bug fix release.
+
+
+
+Please note that the Clirr report shows several errors.
+
+These may affect source compatibility.
+
+However they should not affect binary compatibility, as explained below.
+
+
+
+FileContent, FileName, FileObject, FileSystemManager, RandomAccessContent:
+
+The above interfaces have been updated to add new methods.
+
+This does not affect binary compatibility; for details please see:
+
+https://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.5.3-100
+
+The above changes may affect source compatibility.
+
+
+Changes to method parameters and return types in TarFileObject and TarFileSystem
+
+The original parameter/return types were the following:
+
+org.apache.commons.vfs2.provider.tar.TarEntry
+
+org.apache.commons.vfs2.provider.tar.TarInputStream
+
+The above were package protected, so any methods using them did not form part of the public API.
+
+Therefore source and binary compatibility is not affected.">
 <!--       <action issue="VFS-443" dev="ggregory" type="update" due-to="nickallen"> -->
 <!--        [Local] Need an easy way to convert from a FileObject to a File. -->
 <!--       </action> -->
+<!-- START Might need to be moved to the next version -->
+     <action issue="VFS-607" dev="ggregory" type="update">
+        Update Apache Commons Compress from 1.10 to 1.11.
+     </action>
+     <action issue="VFS-608" dev="ggregory" type="update">
+        Update Apache Commons Net from 3.4 to 3.5.
+     </action>
+<!-- END Might need to be moved to the next version -->
      <action issue="VFS-424" dev="ecki" type="fix">
         Fix StandardFileSystemManager class loading so it works in a OSGi environment.
      </action>
diff --git a/src/site/xdoc/index.xml b/src/site/xdoc/index.xml
index b77ccd6..c30df46 100644
--- a/src/site/xdoc/index.xml
+++ b/src/site/xdoc/index.xml
@@ -81,8 +81,8 @@
             to replace 2.0 with 2.1 without the need for changes to API consumers. VFS 2.1 has introduced some now 
             methods for provider interfaces (like <code>FileObject</code>). If you implement a VFS provider and use the
             corresponding <code>Abstract*</code> or <code>Default*</code> classes, there should be no need to modify
-            the code or recompile the provider.
-            See the <a href="https://archive.apache.org/dist/commons/vfs/RELEASE_NOTES.txt">Release Notes</a> and the
+            the code or recompile the provider. The TarFileProvider is one known exception to compatibility with 2.0.
+            See the <a href="https://dist.apache.org/repos/dist/dev/commons/vfs/RELEASE-NOTES.txt">Release Notes</a> and the
             <a href="commons-vfs2/clirr-report.html">Clirr Report</a> for details. VFS 2.1 adds a new read-only provider
             for the Apache Hadoop (HDFS) File system.
           </p><p>
diff --git a/trunk/.gitignore b/trunk/.gitignore
deleted file mode 100644
index 838eb26..0000000
--- a/trunk/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-target/

-.project

-.classpath

-.settings/

-.svn/

diff --git a/trunk/CONTRIBUTING.md b/trunk/CONTRIBUTING.md
deleted file mode 100644
index bfafdd8..0000000
--- a/trunk/CONTRIBUTING.md
+++ /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.
--->
-<!---
- +======================================================================+
- |****                                                              ****|
- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
- |****                    DO NOT EDIT DIRECTLY                      ****|
- |****                                                              ****|
- +======================================================================+
- | TEMPLATE FILE: contributing-md-template.md                           |
- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
- +======================================================================+
- |                                                                      |
- | 1) Re-generate using: mvn commons:contributing-md                    |
- |                                                                      |
- | 2) Set the following properties in the component's pom:              |
- |    - commons.jira.id  (required, alphabetic, upper case)             |
- |                                                                      |
- | 3) Example Properties                                                |
- |                                                                      |
- |  <properties>                                                        |
- |    <commons.jira.id>MATH</commons.jira.id>                           |
- |  </properties>                                                       |
- |                                                                      |
- +======================================================================+
---->
-Contributing to Apache Commons VFS
-======================
-
-You have found a bug or you have an idea for a cool new feature? Contributing code is a great way to give something back to
-the open source community. Before you dig right into the code there are a few guidelines that we need contributors to
-follow so that we can have a chance of keeping on top of things.
-
-Getting Started
----------------
-
-+ Make sure you have a [JIRA account](https://issues.apache.org/jira/).
-+ Make sure you have a [GitHub account](https://github.com/signup/free).
-+ If you're planning to implement a new feature it makes sense to discuss you're changes on the [dev list](http://commons.apache.org/proper/commons-vfs/mail-lists.html) first. This way you can make sure you're not wasting your time on something that isn't considered to be in Apache Commons VFS's scope.
-+ Submit a ticket for your issue, assuming one does not already exist.
-  + Clearly describe the issue including steps to reproduce when it is a bug.
-  + Make sure you fill in the earliest version that you know has the issue.
-+ Fork the repository on GitHub.
-
-Making Changes
---------------
-
-+ Create a topic branch from where you want to base your work (this is usually the master/trunk branch).
-+ Make commits of logical units.
-+ Respect the original code style:
-  + Only use spaces for indentation.
-  + Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.
-  + Check for unnecessary whitespace with git diff --check before committing.
-+ Make sure your commit messages are in the proper format. Your commit message should contain the key of the JIRA issue.
-+ Make sure you have added the necessary tests for your changes.
-+ Run all the tests with `mvn clean verify` to assure nothing else was accidentally broken.
-
-Making Trivial Changes
-----------------------
-
-For changes of a trivial nature to comments and documentation, it is not always necessary to create a new ticket in JIRA.
-In this case, it is appropriate to start the first line of a commit with '(doc)' instead of a ticket number.
-
-Submitting Changes
-------------------
-
-+ Sign the [Contributor License Agreement][cla] if you haven't already.
-+ Push your changes to a topic branch in your fork of the repository.
-+ Submit a pull request to the repository in the apache organization.
-+ Update your JIRA ticket and include a link to the pull request in the ticket.
-
-Additional Resources
---------------------
-
-+ [Contributing patches](http://commons.apache.org/patches.html)
-+ [Apache Commons VFS JIRA project page](https://issues.apache.org/jira/browse/VFS)
-+ [Contributor License Agreement][cla]
-+ [General GitHub documentation](http://help.github.com/)
-+ [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
-+ [Apache Commons Twitter Account](https://twitter.com/ApacheCommons)
-+ #apachecommons IRC channel on freenode.org
-
-[cla]:http://www.apache.org/licenses/#clas
diff --git a/trunk/LICENSE.txt b/trunk/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/trunk/LICENSE.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/trunk/NOTICE.txt b/trunk/NOTICE.txt
deleted file mode 100644
index b49f10e..0000000
--- a/trunk/NOTICE.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Apache Commons VFS
-Copyright 2002-2016 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/README.md b/trunk/README.md
deleted file mode 100644
index f74d6d5..0000000
--- a/trunk/README.md
+++ /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.

--->

-<!---

- +======================================================================+

- |****                                                              ****|

- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|

- |****                    DO NOT EDIT DIRECTLY                      ****|

- |****                                                              ****|

- +======================================================================+

- | TEMPLATE FILE: readme-md-template.md                                 |

- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |

- +======================================================================+

- |                                                                      |

- | 1) Re-generate using: mvn commons:readme-md                          |

- |                                                                      |

- | 2) Set the following properties in the component's pom:              |

- |    - commons.componentid (required, alphabetic, lower case)          |

- |    - commons.release.version (required)                              |

- |                                                                      |

- | 3) Example Properties                                                |

- |                                                                      |

- |  <properties>                                                        |

- |    <commons.componentid>math</commons.componentid>                   |

- |    <commons.release.version>1.2</commons.release.version>            |

- |  </properties>                                                       |

- |                                                                      |

- +======================================================================+

---->

-Apache Commons VFS

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

-

-Apache Commons VFS is a Virtual File System library.

-

-Documentation

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

-

-More information can be found on the [homepage](http://commons.apache.org/proper/commons-vfs).

-The [JavaDoc](http://commons.apache.org/proper/commons-vfs/apidocs/index.html) can be browsed.

-Questions related to the usage of Apache Commons VFS should be posted to the [user mailing list][ml].

-

-Where can I get the latest release?

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

-You can download source and binaries from our [download page](http://commons.apache.org/proper/commons-vfs/download.html).

-

-Alternatively you can pull it from the central Maven repositories:

-

-```xml

-<dependency>

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

-  <artifactId>commons-vfs2</artifactId>

-  <version>2.0</version>

-</dependency>

-```

-

-Contributing

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

-

-We accept PRs via github. The [developer mailing list][ml] is the main channel of communication for contributors.

-There are some guidelines which will make applying PRs easier for us:

-+ No tabs! Please use spaces for indentation.

-+ Respect the code style.

-+ Create minimal diffs - disable on save actions like reformat source code or organize imports. If you feel the source code should be reformatted create a separate PR for this change.

-+ Provide JUnit tests for your changes and make sure your changes don't break any existing tests by running ```mvn clean test```.

-

-If you plan to contribute on a regular basis, please consider filing a [contributor license agreement](http://www.apache.org/licenses/#clas).

-You can learn more about contributing via GitHub in our [contribution guidelines](https://github.com/apache/commons-vfs/blob/trunk/CONTRIBUTING.md).

-

-License

--------

-Code is under the [Apache Licence v2](http://www.apache.org/licenses/LICENSE-2.0.txt).

-

-Donations

----------

-You like Apache Commons VFS? Then [donate back to the ASF](http://www.apache.org/foundation/contributing.html) to support the development.

-

-Additional Resources

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

-

-+ [Apache Commons Homepage](http://commons.apache.org/)

-+ [Apache Bugtracker (JIRA)](https://issues.apache.org/jira/)

-+ [Apache Commons Twitter Account](https://twitter.com/ApacheCommons)

-+ #apachecommons IRC channel on freenode.org

-

-[ml]:http://commons.apache.org/proper/commons-vfs/mail-lists.html

diff --git a/trunk/README.txt b/trunk/README.txt
deleted file mode 100644
index e3440cc..0000000
--- a/trunk/README.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-To build Commons VFS run
-
-mvn clean install
-
-To build the distribution binaries run
-
-mvn -P apache-release clean install
-
-
diff --git a/trunk/RELEASE-NOTES.txt b/trunk/RELEASE-NOTES.txt
deleted file mode 100644
index 7ca2c70..0000000
--- a/trunk/RELEASE-NOTES.txt
+++ /dev/null
@@ -1,198 +0,0 @@
-              Apache Commons VFS 2.1
-                  RELEASE NOTES
-
-The Apache Commons VFS team is pleased to announce the release of Apache Commons VFS 2.1
-
-Apache Commons VFS is a Virtual File System library.
-
-New features and bug fix release.
-
-Changes in this version include:
-
-New features:
-o VFS-198:  [http] Make user agent configurable. Thanks to Andrew Franklin, Simon Legner.
-o VFS-555:  [hdfs] Add the ability to specify an HDFS configuration file with HdfsFileSystemConfigBuilder.
-o           [example] make VFS Shell print version and implement new 'info' command.
-o VFS-532:  [FTP] Allow configuring remoteVerificationEnabled on FTPClient instances. Thanks to Gareth Daniel Smith.
-o VFS-468:  [FTPS] Add option for KeyManager (and TrustManager) to support FTPS servers that ask for the client certificate for authentication.
-o VFS-412:  [FTPS] Add support for command to set the DataChannelProtectionLevel. Thanks to Jose Juan Montiel.
-o VFS-442:  [HDFS] Add an HDFS FileSystem Provider. Thanks to Dave Marion.
-o VFS-447:  [FTP/FTPS] Update Apache Commons Net to 3.2 from 3.1.
-o VFS-445:  Add FileSystemManager.resolveFile(URI) and resolveFile(URL).
-o VFS-440:  [SFTP] Stream (e.g. netcat) proxy for Sftp file system (aka ProxyCommand). Thanks to bpiwowar.
-o VFS-432:  [HTTP][WebDAV] Allow HTTP follow redirect.
-o VFS-431:  FileSystemOption does not implement toString().
-o VFS-405:  Get/set the file permissions. Thanks to dwaszak.
-o VFS-426:  HTTP URL query string not part of cache key. Thanks to daniel.bergholm.
-o VFS-425:  Add API FileObject.isExecutable().
-o VFS-421:  [SFTP] Configure a custom Identity Repository. Thanks to bpiwowar.
-o VFS-417:  [RAM][Local] Add and implement new API: RandomAccessContent.setLength(long).
-o VFS-400:  Add a FileSelector based on regular expressions.
-o VFS-254:  Let FileObject and FileContent extend java.io.Closeable. Thanks to mzawirski.
-o VFS-252:  [SMB] SmbFileObject does not support setLastModifiedTime while jcifs supports it.
-o VFS-313:  [FTP] Configuration does not include option for setting socket timeout. Thanks to bdavis@saintandreas.org.
-o VFS-414:  [FTP] Add config API to set the file type.
-o VFS-182:  [FTP] Usage of FTP with heterogeneous FTP server (possibility of using Ascii file type).
-o VFS-381:  Iterate over a FileObject using the Java "foreach" statement, to provide all descendents of a FileObject.
-o VFS-373:  Add FileContent write APIs.
-o VFS-372:  Add constructors FileDepthSelector() and FileDepthSelector(int).
-o VFS-371:  Add FileObject API deleteAll().
-o VFS-370:  Add a FileExtensionSelector class.
-o VFS-367:  Add APIs FileObject isFile(), FileObject isFolder(), and FileName isFile().
-
-Fixed Bugs:
-o VFS-424:  Fix StandardFileSystemManager class loading so it works in a OSGi environment.
-o VFS-490:  [vfsclassloader] Do not open folders with .jar extension. Adds tests.
-o VFS-582:  [tests] revert rename of getTestDirectoryFile to make test classes more compatible for external providers.
-o VFS-480:  Make startup of SoftRefsFileCache cleaner thread work and less racy to avoid leaks.
-o VFS-549:  Use File.seperator instead of getProperty("file.separator").
-o VFS-567:  [ftp] Ignore exceptions while QUIT/disconnect. Thanks to Antonio Petrelli.
-o VFS-572:  [sftp] better documentation for knownhosts file option. Thanks to Sandra Parsick.
-o VFS-574:  Ensure FileOpertionProviders are closed. Adds some testcases.
-            The error code for missing operations exceptions corrected: vfs.operation/operation-not-supported.error
-o VFS-279:  [local] Avoid ClassCastException when replicating local files while OnCall caching is active. Thanks to Didier Earith, Simon Legner.
-o VFS-297:  [sftp] VSF fails to reuse FileSystem instances if FileSystemOptions contain
-            an array as value. Reported for SFTP using identities. Thanks to Kirill Safonov, Jimmy Praet.
-o VFS-202:  [http] Allow URLs responding with 405 to HEAD requests. Thanks to Sergey Vladimirov, Simon Legner.
-o VFS-490:  [hdfs] Make OSGi package imports for hdfs resolution=optional.
-            Removed all scopes from dependency management.
-o VFS-560:  [http] avoid initial HEAD request to root of HttpFileSystem as it might be wrong context.
-o VFS-236:  [smb] Allow SMB to be used with no authentication. Thanks to Matt Casters.
-o VFS-564:  Make some loggers static. Thanks to Dmitry Konstantinov.
-o VFS-557:  [webdav][test] Create WebDav test directory in target/test. Avoid creating core/jackrabbit/tmp.
-            Logfiles of Jackrabbit are preserved when -DWebdavProviderTestCase.Debug=true is specified.
-o VFS-558:  Make moveTo() and getParent() work with CacheStrategy.ON_CALL.
-            In case of FTP Provider it would lead otherwise to an UnsupportedOperationException.
-o           [sandbox] RACRandomAccessFile is now in org.apache.commons.vfs2.util package (so sandbox has only one overlapping package).
-o VFS-552:  [sandbox] include vfs-providers.xml in JAR for dynamic registration of mime and smb providers.
-o VFS-551:  Javadoc: make it clear that DefaultCryptor is only an obfuscation function. Thanks to David Camilo Espitia Manrique.
-o VFS-309:  DefaultFileContent will remove thread data whenever possible to avoid leaks.
-o VFS-487:  DefaultFileMonitor detects recreated files. Thanks to Dave Marion.
-o VFS-523:  [HDFS] Make HdfsFileObject.equal use system hashcode/equals instead of
-            wrongly comparing file path only. Thanks to Roger Whitcomb.
-o VFS-544:  [Virtual] Allow virtual file systems and virtual file system provider
-            to be closed, to avoid memory leak.
-o VFS-142:  Use ThreadLocal.remove() to clean out FileContentThreadData objects. Thanks to Ryan Boettcher.
-o VFS-545:  Make DefaultFilesCache remove reference to filesystem when it is cleared (closed).
-o VFS-521:  [Ram][Tests] Make RAM provider test pass on Java 8
-            (JDK-8042377, self-suppression not permitted, MonitorOutputStream#close()).
-o VFS-338:  [Local][Tests] Avoid IndexOutOfBoundsException when validating local file URIs. Thanks to Daniel R..
-o VFS-489:  [tests] ProviderWriteTests#testListener does not fail cleanly. Thanks to Bernd Eckenfels.
-o VFS-486:  DefaultFileMonitor sleeps for twice the specified delay when checkPerRun > 0. Thanks to Sam Haldane.
-o VFS-482:  Wrong assertion messages in RAM provider test case.
-o VFS-460:  Dependency to commons-compress set as optional.
-o VFS-464:  StaticUserAuthenticator should return only requested authentication data.
-o VFS-461:  [FTP/FTPS] ConfigBuilder does not consider system properties for the value of SoTimeout and Encoding.
-o VFS-458:  [FTPS] Provider missed functionality and bug fixes already available for the FTP provider.
-o VFS-452:  [HTTP] HttpFileObject read/write attributes should reflect underlying FileSystem capabilities. Thanks to Jean-Marc Borer.
-o VFS-285:  AbstractFileObject.getChildren() may corrupt its internal state if a filename
-            can not be resolved. Thanks to Kirill Safonov.
-o VFS-450:  [HDFS] HDFSFileSystem.resolveFile() does not honor CacheStrategy.ON_RESOLVE. Thanks to Dave Marion.
-o VFS-448:  commons-vfs 2.0 JAR has flawed OSGi MANIFEST.MF.
-o VFS-439:  StaticUserAuthenticator usage example wrong. Thanks to pensecit.
-o VFS-437:  [FTP] StackOverFlowError getting the type of a directory with a symbolic link to a parent directory with the same name. Thanks to denniszhu, danttran, jpowang.
-o VFS-435:  FileSystemConfigBuilder does not use prefix for some system property lookups. Thanks to george scott.
-o VFS-434:  FileSystemException should reuse IOException's chained exception.
-o VFS-433:  [WebDAV] Message "vfs.provider.webdav/propfind.error" is not defined.
-o VFS-430:  The SoftRefFilesCache class logs clear text password. Thanks to antonin.stefanutti.
-o VFS-429:  Remove extra FileSystem ivar in AbstractFileObject subclasses with generics.
-o VFS-427:  [HTTP] NPE on HttpFileObject.getContent().getContentInfo(). Thanks to awelynant.
-o VFS-406:  [RAM] resize throws ArrayOOBE when shrinking in size. Thanks to mp1.
-o VFS-353:  [FTP] Client should call logout before disconnecting. Thanks to bergander.
-o VFS-408:  CompressedFileFileObject Exception thrown when container file has no extension. Thanks to anilm2@yahoo.com.
-o VFS-258:  [SFTP][RAM] Unsafe casting to AbstractFileObject subclasses in doRename(). Thanks to mzawirski.
-o VFS-413:  [FTP] No support for FTP servers with non Latin-1 control encoding. Thanks to polivenok.
-o VFS-200:  [SFTP] Failure when files are very large.
-o VFS-296:  [FTP] FTP socket timeout setting doesn't work if connect hangs. Thanks to andreasp.
-o VFS-410:  [SFTP] SftpFileObject getInputStream(long) reads the whole file into memory. Thanks to mstockhammer.
-o VFS-407:  [RAM] Reading a RAM FileSystem file fails because it never returns EOF -1. Thanks to mp1.
-o VFS-382:  SFTP getChildren() does not fail when called on a file.
-o VFS-380:  FTP connect.error message used instead of SFTP connect.error message.
-o VFS-378:  Tar error message are missing from resource file.
-o VFS-374:  Incorrect lazy initialization of static field org.apache.commons.vfs2.util.Messages.resources in org.apache.commons.vfs2.util.Messages.findMessage(String)Add FileContent write APIs.
-o VFS-355:  The read method of RamFileRandomAccessContent's input stream does not return -1 at eof. Thanks to Miroslav Pokorny.
-o VFS-356:  Throw an IOException if an attempt is made to seek to a position before the start of the file.
-o VFS-359:  Don't delete a RamFileObject if it is open. Thanks to Miroslav Pokorny.
-o VFS-352:  ZipFileSystem now uses an internal Map as a cache for all the files in the zip archive.
-o VFS-351:  Chain the SftpException in the FileSystemException. Thanks to John Backstrand.
-o VFS-325:  Allow # character in file names. Thanks to Larry Reeve.
-o VFS-335:  Use atomic variables in MonitorInputStream.
-o VFS-364:  Check the href in the response for just a path in addition to a full uri.
-
-Changes:
-o VFS-530:  [hdfs] Use stable Apache Hadoop 2.6 dependencies. Thanks to Dave Marion.
-o VFS-601:  Update Apache Commons Net from 3.3 to 3.4.
-o VFS-602:  Update Apache Commons IO from 2.4 to 2.5.
-o VFS-579:  Update Jsch from 0.1.51 to 0.1.53.
-o VFS-542:  Update Jsch from 0.1.50 to 0.1.51.
-o VFS-578:  Update Apache Commons Compress from 1.9 to 1.10.
-o VFS-541:  Update Apache Commons Compress from 1.6 to 1.9.
-o VFS-540:  Update Apache Commons Logging from 1.1.3 to 1.2.
-o VFS-539:  Update Apache Commons Lang from 3.1 to 3.3.2.
-o VFS-526:  [HDFS][Tests] Support HDFS testing on Windows (but keep profile "no-hdfs" enabled on Windows VFS-529).
-o VFS-453:  [HTTP][WEBDAV] Add file system options for connect and socket timeout. Thanks to Jiri Syrovy.
-o VFS-167:  [FTP] Allow Proxy support to file system options. Thanks to Jimmy Praet.
-o VFS-520:  Make JavaDoc compatible with Java 8 tool.
-o VFS-518:  Documentation of FileSystemOptions should be more helpful. Thanks to Roland Illig.
-o VFS-500:  VFSClassLoader.findResources missing. Thanks to Bernd Eckenfels.
-o VFS-514:  [tests] PermissionsTests leaves unclean test directory. Thanks to Bernd Eckenfels.
-o VFS-501:  Hide passwords from log/console output. Thanks to Yves Schumann.
-o VFS-496:  Resource translation issues. Thanks to Bernd Eckenfels.
-o VFS-494:  [SFTP] No support for SFTP servers with non Latin-1 file name encoding. Thanks to Allen Xudong Cheng.
-o VFS-368:  [SFTP] Documentation implies that "userDirIsRoot" defaults to true. Thanks to Brendan Long.
-o VFS-265:  [FTP] Set user dir as root dir by default. Thanks to Scott Bjerstedt.
-o VFS-484:  [SFTP] Update Jsch to 0.1.50 from 0.1.49.
-o VFS-507:  Update to Apache Commons Collection 4.1 from 3.2.1 and use generics.
-o VFS-476:  Update Apache Commons Logging to 1.1.3 from 1.1.2.
-o VFS-475:  Update Apache Commons Net to 3.3 from 3.2.
-o VFS-506:  [Tar][Bzip2] Update Apache Commons Compress to 1.6 from 1.5.
-o VFS-471:  Update to Apache Commons Compress 1.5.
-o VFS-283:  [SFTP] SFTP provider did not support passphrase-protected keys nor the exchange of a public key with
-            a requesting SFTP server. To support such triples (private key/passphrase/public key) instead of private
-            keys only, a new structure EntityInfo has been created. SftpFileSystemConfigBuilder has now the new
-            getter and setter methods getIdentityInfo and setIdentity info which replace the now deprecated methods
-            getIdentities and setIdentities.
-o VFS-463:  FileSytemConfigBuilder supports system properties for the value of enum-based configuration entries.
-o VFS-462:  [FTPS] Deprecate FtpsFileSystemConfigBuilder.setFtpsType and FtpsFileSystemConfigBuilder.getFtpsType
-            in favor of FtpsFileSystemConfigBuilder.setFtpsMode and FtpsFileSystemConfigBuilder.getFtpsMode which
-            use new enum FtpsMode instead.
-o VFS-459:  [FTP/FTPS] Sent commands and the received answer is logged at debug level.
-o VFS-457:  Update test dependencies: sshd-core version 0.7.0 to 0.8.0; mina-core 2.0.4 to 2.0.7; junit 4.11 to 4.12; slf4j-* 1.5.5 to 1.5.11
-o VFS-456:  Use org.bouncycastel:bcprov-jdk16 instead of org.bouncycastle:bcprof-jdk15on since Java 1.6 is required.
-o VFS-415:  Update VFS requirement to Java 1.6.
-o VFS-418:  Update to Apache Commons Compress 1.4.1.
-o VFS-321:  AbstractFileObject sometimes uses getFileSystem() and sometimes references "fs" field directly. Thanks to sebb.
-o VFS-327:  UriParser.canonicalizePath possible NPE for filenameParser. Thanks to sebb.
-o VFS-416:  [SFTP] Update Jsch to version 0.1.49 from 0.1.47.
-o VFS-395:  [POM] Remove maven-scm-* dependencies.
-o VFS-411:  [SFTP] Update Jsch to version 0.1.47 from 0.1.46.
-o VFS-409:  Update Apache Commons Compress to 1.4 from 1.3.
-o VFS-404:  [FTP][FTPS] Update Apache Commons Net to 3.1 from 3.0.1.
-o VFS-402:  [WebDAV] Update Apache Jackrabbit 1.5.2 to 1.6.5.
-o VFS-401:  Update JSch to 0.1.46 from 0.1.45 for the SFTP provider.
-o VFS-392:  Build tests WebDAV file system with an embedded WebDAV server (Apache Jackrabbit).
-o VFS-391:  Build tests URL HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
-o VFS-390:  Use variable argument list in org.apache.commons.vfs2.util.Messages instead of Object[].
-o VFS-389:  Use variable argument lists in FileSystemException instead of Object[]s.
-o VFS-388:  Build tests SFTP file system with an embedded SFTP server (Apache MINA).
-o VFS-387:  Build tests FTP file system with an embedded FTP server (Apache MINA).
-o VFS-386:  Build tests HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
-o VFS-385:  Add HTTP status code to HTTP file provider exception messages when available.
-o VFS-384:  Update Apache Commons Net to 3.0.1 from 2.2 for FTP and SFTP providers.
-o VFS-383:  Update JSch to 0.1.45 from 0.1.42 for the SFTP provider.
-o VFS-379:  Replace custom BZIP2 code with Apache Commons Compress 1.3.
-o VFS-377:  Replace custom TAR code with Apache Commons Compress 1.3.
-o VFS-375:  Upgrade to Apache Commons Compress 1.3 from 1.2.
-o VFS-366:  Can't sort a List of FileObject's, FileObject to implement Comparable<FileObject>.
-o VFS-341:  Enable logging of JSch using the Commons Logging Log object in SftpClientFactory. Thanks to Rajika Kumarasiri.
-o VFS-361:  Upgrade commons collections version to 3.2.1.
-
-Removed:
-o VFS-469:  Remove unused dependency to javax.jcr:jcr.
-
-Historical list of changes: http://commons.apache.org/proper/commons-vfs/changes-report.html
-
-For complete information on Apache Commons VFS, including instructions on how to submit bug reports,
-patches, or suggestions for improvement, see the Apache Apache Commons VFS website:
-
-http://commons.apache.org/proper/commons-vfs/
diff --git a/trunk/checkstyle-suppressions.xml b/trunk/checkstyle-suppressions.xml
deleted file mode 100644
index b44b9d8..0000000
--- a/trunk/checkstyle-suppressions.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE suppressions PUBLIC
-    "-//Puppy Crawl//DTD Suppressions 1.0//EN"
-    "http://www.puppycrawl.com/dtds/suppressions_1_0.dtd">
-
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- Exceptions for Checkstyle -->
-
-<suppressions>
-
-    <!-- Disable the warnings for the generated classes -->
-    <suppress checks=".*" files="ParseException.java"/>
-    <suppress checks=".*" files="PropertyListParser.java"/>
-    <suppress checks=".*" files="PropertyListParserConstants.java"/>
-    <suppress checks=".*" files="PropertyListParserTokenManager.java"/>
-    <suppress checks=".*" files="SimpleCharStream.java"/>
-    <suppress checks=".*" files="Token.java"/>
-    <suppress checks=".*" files="TokenMgrError.java"/>
-    
-    <suppress checks="MissingSwitchDefault" files="PropertiesConfiguration.java"/>
-
-</suppressions>
diff --git a/trunk/checkstyle.properties b/trunk/checkstyle.properties
deleted file mode 100644
index 27906bf..0000000
--- a/trunk/checkstyle.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-#   Licensed to the Apache Software Foundation (ASF) under one or more
-#   contributor license agreements.  See the NOTICE file distributed with
-#   this work for additional information regarding copyright ownership.
-#   The ASF licenses this file to You under the Apache License, Version 2.0
-#   (the "License"); you may not use this file except in compliance with
-#   the License.  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-checkstyle.maxlinelen = 120
-checkstyle.lcurly.type = nl
-checkstyle.lcurly.method = nl
-checkstyle.lcurly.other = nl
-checkstyle.rcurly = alone
-checkstyle.paren.pad = ignore
-checkstyle.ignore.whitespace.cast = true
-checkstyle.javadoc.scope = package
-checkstyle.require.packagehtml = true
diff --git a/trunk/checkstyle.xml b/trunk/checkstyle.xml
deleted file mode 100644
index 966243b..0000000
--- a/trunk/checkstyle.xml
+++ /dev/null
@@ -1,213 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_1.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.
--->
-
-<!-- Checkstyle configuration that checks the commons-configuration coding conventions -->
-
-<module name="Checker">
-    <property name="localeLanguage" value="en"/>
-
-    <!-- Checks that a package.html file exists for each package.     -->
-    <!-- See http://checkstyle.sourceforge.net/config_javadoc.html -->
-    <module name="JavadocPackage">
-      <property name="allowLegacy" value="true"/>
-    </module>
-
-    <!-- Checks whether files end with a new line.                        -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#NewlineAtEndOfFile -->
-    <module name="NewlineAtEndOfFile"/>
-
-    <!-- Checks that property files contain the same keys.         -->
-    <!-- See http://checkstyle.sf.net/config_misc.html#Translation -->
-    <module name="Translation"/>
-
-    <!-- Checks for Tab characters -->
-    <!-- See http://checkstyle.sourceforge.net/config_whitespace.html#FileTabCharacter -->
-    <module name="FileTabCharacter">
-        <property name="fileExtensions" value="java"/>
-    </module>
-
-    <!-- Checks for white space at the end of the line -->
-    <!-- See http://checkstyle.sourceforge.net/config_regexp.html -->
-    <module name="RegexpSingleline">
-      <property name="format" value="\s+$"/>
-      <property name="message" value="Line has trailing spaces."/>
-      <property name="fileExtensions" value="java"/>
-    </module>
-
-    <!-- @author tags are deprecated -->
-    <module name="RegexpSingleline">
-      <property name="format" value="^\s+\*\s+@author\s"/>
-      <property name="message" value="Deprecated @author tag"/>
-      <property name="fileExtensions" value="java"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <!-- Don't use SVN $Date$ variable - it's localized and causes source archives to differ from the SVN tag -->
-    <module name="RegexpSingleline">
-      <property name="format" value="\$Date.+\$"/>
-      <property name="message" value="Don't use SVN $Date$ variable"/>
-      <property name="fileExtensions" value="java"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <!-- Exceptions -->
-    <!--<module name="SuppressionFilter">
-        <property name="file" value="conf/checkstyle-suppressions.xml"/>
-    </module> -->
-
-    <module name="TreeWalker">
-
-        <property name="cacheFile" value="${checkstyle.cache.file}"/>
-
-        <!-- Checks for Javadoc comments.                     -->
-        <!-- See http://checkstyle.sf.net/config_javadoc.html -->
-        <module name="JavadocMethod">
-            <property name="scope" value="public"/>
-            <property name="allowUndeclaredRTE" value="true"/>
-              <property name="allowMissingJavadoc" value="true"/>
-        </module>
-        <!-- http://checkstyle.sourceforge.net/config_javadoc.html#JavadocType -->
-        <module name="JavadocType">
-            <!-- It is unfortunate to have to do this but checkstyle doesn't allow custom tags -->
-            <property name="allowUnknownTags" value="true"/>
-        </module>
-        <module name="JavadocVariable">
-            <property name="scope" value="protected"/>
-        </module>
-        <module name="JavadocStyle">
-            <property name="scope" value="public"/>
-        </module>
-
-        <!-- Checks for Naming Conventions.                  -->
-        <!-- See http://checkstyle.sf.net/config_naming.html -->
-        <module name="ConstantName">
-          <property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$|^capabilities$|^log$"/>
-        </module>
-        <module name="LocalFinalVariableName"/>
-        <module name="LocalVariableName"/>
-        <module name="MemberName"/>
-        <module name="MethodName"/>
-        <module name="PackageName"/>
-        <module name="ParameterName"/>
-        <module name="StaticVariableName"/>
-        <module name="TypeName"/>
-
-        <!-- Following interprets the header file as regular expressions. -->
-        <!-- <module name="RegexpHeader"/>                                -->
-
-        <!-- Checks for imports                              -->
-        <!-- See http://checkstyle.sf.net/config_import.html -->
-        <module name="AvoidStarImport"/>
-        <module name="IllegalImport"/> <!-- defaults to sun.* packages -->
-        <module name="RedundantImport"/>
-        <module name="UnusedImports"/>
-
-        <!-- Checks for Size Violations.                    -->
-        <!-- See http://checkstyle.sf.net/config_sizes.html -->
-        <!--<module name="FileLength"/>-->
-        <module name="LineLength">
-            <property name="max" value="120"/>
-        </module>
-        <module name="MethodLength"/>
-        <module name="ParameterNumber">
-            <property name="max" value="10"/>
-        </module>
-
-        <!-- Checks for whitespace                               -->
-        <!-- See http://checkstyle.sf.net/config_whitespace.html -->
-        <module name="EmptyForIteratorPad"/>
-        <module name="NoWhitespaceAfter"/>
-        <module name="NoWhitespaceBefore"/>
-        <module name="OperatorWrap">
-           <property name="tokens" value="ASSIGN"/>
-           <property name="option" value="eol"/>
-        </module>
-        <module name="ParenPad"/>
-        <module name="WhitespaceAfter"/>
-        <module name="WhitespaceAround"/>
-        <module name="GenericWhitespace"/>
-
-        <!-- Modifier Checks                                    -->
-        <!-- See http://checkstyle.sf.net/config_modifiers.html -->
-        <module name="ModifierOrder"/>
-        <module name="RedundantModifier"/>
-
-        <!-- Checks for blocks. You know, those {}'s         -->
-        <!-- See http://checkstyle.sf.net/config_blocks.html -->
-        <module name="AvoidNestedBlocks"/>
-        <!-- Require empty catch blocks to have at least a comment -->
-        <module name="EmptyBlock">
-          <property name="option" value="text"/>
-          <property name="tokens" value="LITERAL_CATCH"/>
-        </module>
-        <module name="LeftCurly">
-            <property name="option" value="nl"/>
-        </module>
-        <module name="NeedBraces"/>
-        <module name="RightCurly">
-            <property name="option" value="alone"/>
-        </module>
-
-        <!-- Checks for common coding problems               -->
-        <!-- See http://checkstyle.sf.net/config_coding.html -->
-        <module name="CovariantEquals"/>
-        <module name="EqualsHashCode"/>
-        <module name="IllegalInstantiation"/>
-        <!-- <module name="InnerAssignment"/> -->
-        <module name="MagicNumber">
-            <property name="ignoreNumbers" value="-1,0,1,2,3"/>
-        </module>
-        <module name="RedundantThrows">
-            <property name="allowUnchecked" value="true"/>
-        </module>
-        <module name="SimplifyBooleanExpression"/>
-        <module name="SimplifyBooleanReturn"/>
-        <module name="StringLiteralEquality"/>
-        <module name="SuperClone"/>
-        <module name="SuperFinalize"/>
-        <module name="DeclarationOrder"/>
-        <!-- <module name="ExplicitInitialization"/> -->
-        <module name="DefaultComesLast"/>
-        <module name="FallThrough"/>
-        <module name="MultipleVariableDeclarations"/>
-        <!-- <module name="UnnecessaryParentheses"/> -->
-
-        <!-- Checks for class design                         -->
-        <!-- See http://checkstyle.sf.net/config_design.html -->
-        <module name="FinalClass"/>
-        <module name="HideUtilityClassConstructor"/>
-        <module name="InterfaceIsType"/>
-        <module name="VisibilityModifier">
-            <property name="protectedAllowed" value="true"/>
-        </module>
-
-        <!-- Miscellaneous other checks.                   -->
-        <!-- See http://checkstyle.sf.net/config_misc.html -->
-        <module name="ArrayTypeStyle"/>
-        <module name="TodoComment">
-            <property name="severity" value="info"/>
-        </module>
-        <module name="UpperEll"/>
-
-    </module>
-
-</module>
diff --git a/trunk/core/pom.xml b/trunk/core/pom.xml
deleted file mode 100644
index a1c1cf5..0000000
--- a/trunk/core/pom.xml
+++ /dev/null
@@ -1,359 +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>
-
-  <name>Apache Commons VFS Core</name>
-  <groupId>org.apache.commons</groupId>
-  <artifactId>commons-vfs2</artifactId>
-  <version>2.1</version>
-  <description>Apache Commons VFS is a Virtual File System library.</description>
-  <url>http://commons.apache.org/proper/commons-vfs/</url>
-
-  <parent>
-    <groupId>org.apache.commons</groupId>
-    <artifactId>commons-vfs2-project</artifactId>
-    <version>2.1</version>
-    <relativePath>../</relativePath>
-  </parent>
-
-  <dependencies>
-    <dependency>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>ant</groupId>
-      <artifactId>ant</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>commons-net</groupId>
-      <artifactId>commons-net</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-compress</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-collections4</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-common</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-hdfs</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>commons-httpclient</groupId>
-      <artifactId>commons-httpclient</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jackrabbit</groupId>
-      <artifactId>jackrabbit-webdav</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>com.jcraft</groupId>
-      <artifactId>jsch</artifactId>
-      <optional>true</optional>
-    </dependency>
-
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <!-- Test FTP with Apache FTP Server (MINA) -->
-    <dependency>
-      <groupId>org.apache.ftpserver</groupId>
-      <artifactId>ftpserver-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <!-- Test SFTP with Apache SHHd Server (MINA) -->
-    <dependency>
-      <groupId>org.apache.sshd</groupId>
-      <artifactId>sshd-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.bouncycastle</groupId>
-      <artifactId>bcprov-jdk16</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <!-- Test HTTP with Apache HttpComponent Core -->
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpcore-nio</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <!-- Test WebDAV with Apache Jackrabbit-->
-    <dependency>
-      <groupId>org.apache.jackrabbit</groupId>
-      <artifactId>jackrabbit-standalone</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <!-- Test HDFS with Apache Hadoop -->
-    <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-common</artifactId>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-hdfs</artifactId>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.ws.rs</groupId>
-      <artifactId>jsr311-api</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <properties>
-    <vfs.parent.dir>${basedir}/..</vfs.parent.dir>
-  </properties>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>src/main/java</directory>
-        <excludes>
-          <exclude>**/*.html</exclude>
-          <exclude>**/*.java</exclude>
-        </excludes>
-      </resource>
-      <!-- include NOTICE/LICENSE in generated jar -->
-      <resource>
-        <directory>${vfs.parent.dir}</directory>
-        <targetPath>META-INF</targetPath>
-        <includes>
-          <include>NOTICE.txt</include>
-          <include>LICENSE.txt</include>
-        </includes>
-      </resource>
-    </resources>
-
-
-    <testResources>
-      <testResource>
-        <directory>src/test/resources</directory>
-      </testResource>
-      <!-- include NOTICE/LICENSE in generated test jar -->
-      <testResource>
-        <directory>${vfs.parent.dir}</directory>
-        <targetPath>META-INF</targetPath>
-        <includes>
-          <include>NOTICE.txt</include>
-          <include>LICENSE.txt</include>
-        </includes>
-      </testResource>
-    </testResources>
-
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>process-test-classes</phase>
-            <configuration>
-              <target>
-                <move todir="${project.build.testOutputDirectory}/test-data/code" failonerror="false">
-                  <fileset dir="${project.build.testOutputDirectory}/code" />
-                </move>
-              </target>
-            </configuration>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <trimStackTrace>false</trimStackTrace>
-          <systemPropertyVariables>
-            <test.basedir>target/test-classes/test-data</test.basedir>
-            <test.basedir.res>test-data</test.basedir.res>
-            <derby.stream.error.file>target/derby.log</derby.stream.error.file>
-          </systemPropertyVariables>
-          <excludes>
-            <!-- Main class -->
-            <exclude>**/RunTest.java</exclude>
-            <!-- inner classes -->
-            <exclude>**/*$*</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <id>webdav</id>
-      <activation>
-        <activeByDefault>false</activeByDefault>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <configuration>
-              <systemPropertyVariables>
-                <test.webdav.uri>${test.webdav.uri}</test.webdav.uri>
-              </systemPropertyVariables>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-    <profile>
-      <id>ftp</id>
-      <activation>
-        <activeByDefault>false</activeByDefault>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <configuration>
-              <systemPropertyVariables>
-                <test.ftp.uri>${test.ftp.uri}</test.ftp.uri>
-              </systemPropertyVariables>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-    <profile>
-      <id>sftp</id>
-      <activation>
-        <activeByDefault>false</activeByDefault>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <configuration>
-              <systemPropertyVariables>
-                <test.sftp.uri>${test.sftp.uri}</test.sftp.uri>
-              </systemPropertyVariables>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-    <profile>
-      <id>http</id>
-      <activation>
-        <activeByDefault>false</activeByDefault>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <configuration>
-              <systemPropertyVariables>
-                <test.http.uri>${test.http.uri}</test.http.uri>
-              </systemPropertyVariables>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-    <!-- On Windows we disable hdfs tests by default. -->
-    <profile>
-        <id>no-test-hdfs</id>
-        <activation>
-            <activeByDefault>false</activeByDefault>
-            <os>
-                <family>Windows</family>
-            </os>
-        </activation>
-        <build>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <configuration>
-                        <excludes>
-                            <exclude>**/HdfsFileProviderTest.java</exclude>
-                            <exclude>**/HdfsFileProviderTestCase.java</exclude>
-                        </excludes>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </build>
-    </profile>
-  </profiles>
-
-</project>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/AllFileSelector.java b/trunk/core/src/main/java/org/apache/commons/vfs2/AllFileSelector.java
deleted file mode 100644
index 9255618..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/AllFileSelector.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.commons.vfs2;
-
-/**
- * A {@link FileSelector} that selects everything.
- */
-public class AllFileSelector
-    implements FileSelector
-{
-    /**
-     * Determines if a file or folder should be selected.
-     * @param fileInfo The file selection information.
-     * @return true if the file should be selected, false otherwise.
-     */
-    @Override
-    public boolean includeFile(final FileSelectInfo fileInfo)
-    {
-        return true;
-    }
-
-    /**
-     * Determines whether a folder should be traversed.
-     * @param fileInfo The file selection information.
-     * @return true if descendants should be traversed, false otherwise.
-     */
-    @Override
-    public boolean traverseDescendents(final FileSelectInfo fileInfo)
-    {
-        return true;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/CacheStrategy.java b/trunk/core/src/main/java/org/apache/commons/vfs2/CacheStrategy.java
deleted file mode 100644
index c2785e5..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/CacheStrategy.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.commons.vfs2;
-
-/**
- * An enumerated type to deal with the various cache strategies.
- */
-public enum CacheStrategy
-{
-    /**
-     * Deal with cached data manually. Call {@link FileObject#refresh()} to refresh the object data.
-     */
-    MANUAL("manual"),
-
-    /**
-     * Refresh the data every time you request a file from {@link FileSystemManager#resolveFile}.
-     */
-    ON_RESOLVE("onresolve"),
-
-    /**
-     * Refresh the data every time you call a method on the fileObject.
-     * You'll use this only if you really need the latest info as this setting is a major performance
-     * loss.
-     */
-    ON_CALL("oncall");
-
-    /**
-     * Cache strategy name
-     */
-    private final String realName;
-
-    private CacheStrategy(final String name)
-    {
-        this.realName = name;
-    }
-
-    /**
-     * Returns the name of the scope.
-     * @return the name of the scope.
-     */
-    @Override
-    public String toString()
-    {
-        return realName;
-    }
-
-    /**
-     * Returns the name of the scope.
-     * @return the name of the scope.
-     */
-    public String getName()
-    {
-        return realName;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/Capability.java b/trunk/core/src/main/java/org/apache/commons/vfs2/Capability.java
deleted file mode 100644
index 8fe8474..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/Capability.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.commons.vfs2;
-
-/**
- * An enumerated type representing the capabilities of files and file systems.
- */
-public enum Capability
-{
-    /**
-     * File content can be read.
-     */
-    READ_CONTENT,
-
-    /**
-     * File content can be written.
-     */
-    WRITE_CONTENT,
-
-    /**
-     * File content can be read in random mode.
-     */
-    RANDOM_ACCESS_READ,
-
-    /**
-     * File content length can be set in random mode.
-     */
-    RANDOM_ACCESS_SET_LENGTH,
-
-    /**
-     * File content can be written in random mode.
-     */
-    RANDOM_ACCESS_WRITE,
-
-    /**
-     * File content can be appended.
-     */
-    APPEND_CONTENT,
-
-    /**
-     * File attributes are supported.
-     */
-    ATTRIBUTES,
-
-    /**
-     * File last-modified time is supported.
-     */
-    LAST_MODIFIED,
-
-    /**
-     * File get last-modified time is supported.
-     */
-    GET_LAST_MODIFIED,
-
-    /**
-     * File set last-modified time is supported.
-     */
-    SET_LAST_MODIFIED_FILE,
-
-    /**
-     * folder set last-modified time is supported.
-     */
-    SET_LAST_MODIFIED_FOLDER,
-
-    /**
-     * File content signing is supported.
-     */
-    SIGNING,
-
-    /**
-     * Files can be created.
-     */
-    CREATE,
-
-    /**
-     * Files can be deleted.
-     */
-    DELETE,
-
-    /**
-     * Files can be renamed.
-     */
-    RENAME,
-
-    /**
-     * The file type can be determined.
-     */
-    GET_TYPE,
-
-    /**
-     * Children of files can be listed.
-     */
-    LIST_CHILDREN,
-
-    /**
-     * URI are supported.  Files without this capability use URI that do not
-     * globally and uniquely identify the file.
-     */
-    URI,
-
-    /**
-     * File system attributes are supported.
-     */
-    FS_ATTRIBUTES,
-
-    /**
-     * Junctions are supported.
-     */
-    JUNCTIONS,
-
-    /**
-     * The set of attributes defined by the Jar manifest specification are
-     * supported.  The attributes aren't necessarily stored in a manifest file.
-     */
-    MANIFEST_ATTRIBUTES,
-
-    /**
-     * The provider itself do not provide a filesystem. It simply resolves a full name
-     * and dispatches the request back to the filesystemmanager.<br>
-     * A provider with this capability cant tell much about the capabilities about the
-     * finally used filesystem in advance.
-     */
-    DISPATCHER,
-
-    /**
-     * A compressed filesystem is a filesystem which use compression.
-     */
-    COMPRESS,
-
-    /**
-     * A virtual filesystem can be an archive like tar or zip.
-     */
-    VIRTUAL,
-
-    /**
-     * Provides directories which allows you to read its content through
-     * {@link org.apache.commons.vfs2.FileContent#getInputStream()}.
-     * @since 2.0
-     */
-    DIRECTORY_READ_CONTENT;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileChangeEvent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileChangeEvent.java
deleted file mode 100644
index 74a72ab..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileChangeEvent.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.commons.vfs2;
-
-/**
- * An event fired when a file is changed.
- */
-public class FileChangeEvent
-{
-    /**
-     * The file object
-     */
-    private final FileObject file;
-
-    public FileChangeEvent(final FileObject file)
-    {
-        this.file = file;
-    }
-
-    /**
-     * Returns the file that changed.
-     * @return The FileObject that was changed.
-     */
-    public FileObject getFile()
-    {
-        return file;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileContent.java
deleted file mode 100644
index 95ea8fc..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileContent.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.commons.vfs2;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.cert.Certificate;
-import java.util.Map;
-
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * Represents the data content of a file.
- * <p>
- * To read from a file, use the {@code InputStream} returned by {@link #getInputStream()}.
- * </p>
- * <p>
- * To write to a file, use the {@code OutputStream} returned by {@link #getOutputStream()} method. This will create
- * the file, and the parent folder, if necessary.
- * </p>
- * <p>
- * A file may have multiple InputStreams open at the same time.
- * </p>
- *
- * @see FileObject#getContent
- */
-public interface FileContent extends Closeable
-{
-    /**
-     * Returns the file which this is the content of.
-     * @return The FileObject this is the content of.
-     */
-    FileObject getFile();
-
-    /**
-     * Determines the size of the file, in bytes.
-     *
-     * @return The size of the file, in bytes.
-     * @throws FileSystemException If the file does not exist, or is being written to, or on error
-     *                             determining the size.
-     */
-    long getSize() throws FileSystemException;
-
-    /**
-     * Determines the last-modified timestamp of the file.
-     *
-     * @return The last-modified timestamp.
-     * @throws FileSystemException If the file does not exist, or is being written to, or on error
-     *                             determining the last-modified timestamp.
-     */
-    long getLastModifiedTime() throws FileSystemException;
-
-    /**
-     * Sets the last-modified timestamp of the file.  Creates the file if
-     * it does not exist.
-     *
-     * @param modTime The time to set the last-modified timestamp to.
-     * @throws FileSystemException If the file is read-only, or is being written to, or on error
-     *                             setting the last-modified timestamp.
-     */
-    void setLastModifiedTime(long modTime) throws FileSystemException;
-
-    /**
-     * Checks if an attribute of the file's content exists.
-     *
-     * @param attrName The name of the attribute.
-     * @return true if the attribute exists, false otherwise.
-     * @throws FileSystemException If the file does not exist, or does not support
-     *                             attributes.
-     */
-    boolean hasAttribute(String attrName)
-        throws FileSystemException;
-
-    /**
-     * Returns a read-only map of this file's attributes.
-     * @return The attribute Map.
-     * @throws FileSystemException If the file does not exist, or does not support attributes.
-     */
-    Map<String, Object> getAttributes() throws FileSystemException;
-
-    /**
-     * Lists the attributes of the file's content.
-     *
-     * @return The names of the attributes.  Never returns null;
-     * @throws FileSystemException If the file does not exist, or does not support attributes.
-     */
-    String[] getAttributeNames() throws FileSystemException;
-
-    /**
-     * Gets the value of an attribute of the file's content.
-     *
-     * @param attrName The name of the attribute.  Attribute names are case insensitive.
-     * @return The value of the attribute, or null if the attribute value is
-     *         unknown.
-     * @throws FileSystemException If the file does not exist, or does not support attributes.
-     */
-    Object getAttribute(String attrName) throws FileSystemException;
-
-    /**
-     * Sets the value of an attribute of the file's content.  Creates the
-     * file if it does not exist.
-     *
-     * @param attrName The name of the attribute.
-     * @param value    The value of the attribute.
-     * @throws FileSystemException If the file does not exist, or is read-only, or does not support
-     *                             attributes, or on error setting the attribute.
-     */
-    void setAttribute(String attrName, Object value)
-        throws FileSystemException;
-
-    /**
-     * Removes the value of an attribute of the file's content.
-     *
-     * @param attrName The name of the attribute.
-     * @throws FileSystemException If the file does not exist, or is read-only, or does not support
-     *                             attributes, or on error removing the attribute.
-     */
-    void removeAttribute(String attrName)
-        throws FileSystemException;
-
-    /**
-     * Retrieves the certificates if any used to sign this file or folder.
-     *
-     * @return The certificates, or an empty array if there are no certificates or
-     *         the file does not support signing.
-     * @throws FileSystemException If the file does not exist, or is being written.
-     */
-    Certificate[] getCertificates() throws FileSystemException;
-
-    /**
-     * Returns an input stream for reading the file's content.
-     * <p>
-     * There may only be a single input or output stream open for the
-     * file at any time.
-     *
-     * @return An input stream to read the file's content from.  The input
-     *         stream is buffered, so there is no need to wrap it in a
-     *         {@code BufferedInputStream}.
-     * @throws FileSystemException If the file does not exist, or is being read, or is being written,
-     *                             or on error opening the stream.
-     */
-    InputStream getInputStream() throws FileSystemException;
-
-    /**
-     * Returns an output stream for writing the file's content.
-     * <p>
-     * If the file does not exist, this method creates it, and the parent
-     * folder, if necessary.  If the file does exist, it is replaced with
-     * whatever is written to the output stream.
-     * <p>
-     * There may only be a single input or output stream open for the
-     * file at any time.
-     *
-     * @return An output stream to write the file's content to.  The stream is
-     *         buffered, so there is no need to wrap it in a
-     *         {@code BufferedOutputStream}.
-     * @throws FileSystemException If the file is read-only, or is being read, or is being written,
-     *                             or on error opening the stream.
-     */
-    OutputStream getOutputStream() throws FileSystemException;
-
-    /**
-     * Returns an stream for reading/writing the file's content.
-     * <p>
-     * If the file does not exist, and you use one of the write* methods,
-     * this method creates it, and the parent folder, if necessary.
-     * If the file does exist, parts of the file are replaced with whatever is written
-     * at a given position.
-     * <p>
-     * There may only be a single input or output stream open for the
-     * file at any time.
-     *
-     * @param mode The mode to use to access the file.
-     * @return the stream for reading and writing the file's content.
-     * @throws FileSystemException If the file is read-only, or is being read, or is being written,
-     *                             or on error opening the stream.
-     */
-    RandomAccessContent getRandomAccessContent(final RandomAccessMode mode) throws FileSystemException;
-
-    /**
-     * Returns an output stream for writing the file's content.
-     * <p>
-     * If the file does not exist, this method creates it, and the parent
-     * folder, if necessary.  If the file does exist, it is replaced with
-     * whatever is written to the output stream.
-     * <p>
-     * There may only be a single input or output stream open for the
-     * file at any time.
-     *
-     * @param bAppend true if you would like to append to the file.
-     *        This may not be supported by all implementations.
-     * @return An output stream to write the file's content to.  The stream is
-     *         buffered, so there is no need to wrap it in a
-     *         {@code BufferedOutputStream}.
-     * @throws FileSystemException If the file is read-only, or is being read, or is being written,
-     *                             or bAppend is true and the implementation does not support it,
-     *                             or on error opening the stream.
-     */
-    OutputStream getOutputStream(boolean bAppend) throws FileSystemException;
-
-    /**
-     * Closes all resources used by the content, including any open stream.
-     * Commits pending changes to the file.
-     * <p>
-     * This method is a hint to the implementation that it can release
-     * resources.  This object can continue to be used after calling this
-     * method.
-     *
-     * @throws FileSystemException if an error occurs closing the file.
-     */
-    @Override
-    void close() throws FileSystemException;
-
-    /**
-     * get the content info. e.g. type, encoding, ...
-     * @return the FileContentInfo
-     * @throws FileSystemException if an error occurs.
-     */
-    FileContentInfo getContentInfo() throws FileSystemException;
-
-    /**
-     * check if this file has open streams.
-     * @return true if the file is open, false otherwise.
-     */
-    boolean isOpen();
-
-    /**
-     * Writes this content to another FileContent.
-     *
-     * @param output
-     *            The target OutputStream.
-     * @throws IOException
-     *             if an error occurs writing the content.
-     * @return the total number of bytes written
-     * @since 2.1
-     */
-    long write(FileContent output) throws IOException;
-
-    /**
-     * Writes this content to another FileObject.
-     *
-     * @param file
-     *            The target FileObject.
-     * @throws IOException
-     *             if an error occurs writing the content.
-     * @return the total number of bytes written
-     * @since 2.1
-     */
-    long write(FileObject file) throws IOException;
-
-    /**
-     * Writes this content to an OutputStream.
-     *
-     * @param output
-     *            The target OutputStream.
-     * @return the total number of bytes written
-     * @throws IOException
-     *             if an error occurs writing the content.
-     * @since 2.1
-     */
-    long write(OutputStream output) throws IOException;
-
-    /**
-     * Writes this content to an OutputStream.
-     *
-     * @param output
-     *            The target OutputStream.
-     * @param bufferSize
-     *            The buffer size to write data chunks.
-     * @return the total number of bytes written
-     * @throws IOException
-     *             if an error occurs writing the file.
-     * @since 2.1
-     */
-    long write(OutputStream output, int bufferSize) throws IOException;
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileContentInfo.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileContentInfo.java
deleted file mode 100644
index 052018d..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileContentInfo.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.commons.vfs2;
-
-/**
- * Informs on the content of a file with content type and encoding.
- */
-public interface FileContentInfo
-{
-    /**
-     * Gets the content encoding.
-     *
-     * @return The file content encoding.
-     */
-    String getContentEncoding();
-
-    /**
-     * Gets the content type.
-     *
-     * @return The file content type.
-     */
-    String getContentType();
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileContentInfoFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileContentInfoFactory.java
deleted file mode 100644
index 689f203..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileContentInfoFactory.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.commons.vfs2;
-
-/**
- * Creates {@link FileContentInfo} instances to determine the content-info for given file contents.
- */
-public interface FileContentInfoFactory
-{
-    /**
-     * Creates a FileContentInfo for a the given FileContent.
-     *
-     * @param fileContent
-     *            Use this FileContent to create a matching FileContentInfo
-     * @return a FileContentInfo for the given FileContent.
-     * @throws FileSystemException
-     *             when a problem occurs creating the FileContentInfo.
-     */
-    FileContentInfo create(FileContent fileContent) throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileDepthSelector.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileDepthSelector.java
deleted file mode 100644
index 364f00d..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileDepthSelector.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.commons.vfs2;
-
-/**
- * A {@link FileSelector} that selects all files in a particular depth range.
- */
-public class FileDepthSelector implements FileSelector
-{
-    /**
-     * The minimum depth
-     */
-    private final int minDepth;
-
-    /**
-     * The maximum depth
-     */
-    private final int maxDepth;
-
-    /**
-     * Creates a selector with the given minimum and maximum depths.
-     *
-     * @param minDepth
-     *            minimum depth
-     * @param maxDepth
-     *            maximum depth
-     */
-    public FileDepthSelector(final int minDepth, final int maxDepth)
-    {
-        this.minDepth = minDepth;
-        this.maxDepth = maxDepth;
-    }
-
-    /**
-     * Creates a selector with the same minimum and maximum depths.
-     *
-     * @param minMaxDepth
-     *            minimum and maximum depth
-     * @since 2.1
-     */
-    public FileDepthSelector(final int minMaxDepth)
-    {
-        this(minMaxDepth, minMaxDepth);
-    }
-
-    /**
-     * Creates a selector with the same minimum and maximum depths of 0.
-     *
-     * @since 2.1
-     */
-    public FileDepthSelector()
-    {
-        this(0, 0);
-    }
-
-    /**
-     * Determines if a file or folder should be selected.
-     *
-     * @param fileInfo
-     *            The file selection information
-     * @return true if the file or folder should be included, false otherwise.
-     */
-    @Override
-    public boolean includeFile(final FileSelectInfo fileInfo)
-    {
-        final int depth = fileInfo.getDepth();
-        return minDepth <= depth && depth <= maxDepth;
-    }
-
-    /**
-     * Determines whether a folder should be traversed.
-     *
-     * @param fileInfo
-     *            The file selection information
-     * @return true if the file or folder should be traversed, false otherwise.
-     */
-    @Override
-    public boolean traverseDescendents(final FileSelectInfo fileInfo)
-    {
-        return fileInfo.getDepth() < maxDepth;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileExtensionSelector.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileExtensionSelector.java
deleted file mode 100644
index e0a0e72..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileExtensionSelector.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.commons.vfs2;

-

-import java.util.Arrays;

-import java.util.Collection;

-import java.util.HashSet;

-import java.util.Set;

-

-/**

- * A {@link FileSelector} that selects based on file extensions.

- * <p>

- * The extension comparison is case insensitive.

- * </p>

- * <p>

- * The selector makes a copy of a given Collection or array. Changing the object passed in the constructors will not

- * affect the selector.

- * </p>

- *

- * @since 2.1

- */

-public class FileExtensionSelector implements FileSelector

-{

-

-    /**

-     * The extensions to select.

-     */

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

-

-    /**

-     * Creates a new selector for the given extensions.

-     *

-     * @param extensions

-     *            The extensions to be included by this selector.

-     */

-    public FileExtensionSelector(final Collection<String> extensions)

-    {

-        if (extensions != null)

-        {

-            this.extensions.addAll(extensions);

-        }

-    }

-

-    /**

-     * Creates a new selector for the given extensions.

-     *

-     * @param extensions

-     *            The extensions to be included by this selector.

-     */

-    public FileExtensionSelector(final String... extensions)

-    {

-        if (extensions != null)

-        {

-            this.extensions.addAll(Arrays.asList(extensions));

-        }

-    }

-

-    /**

-     * Determines if a file or folder should be selected.

-     *

-     * @param fileInfo

-     *            The file selection information.

-     * @return true if the file should be selected, false otherwise.

-     */

-    @Override

-    public boolean includeFile(final FileSelectInfo fileInfo)

-    {

-        if (this.extensions == null)

-        {

-            return false;

-        }

-        for (final String extension : this.extensions)

-        {

-            if (fileInfo.getFile().getName().getExtension().equalsIgnoreCase(extension))

-            {

-                return true;

-            }

-        }

-        return false;

-    }

-

-    /**

-     * Determines whether a folder should be traversed.

-     *

-     * @param fileInfo

-     *            The file selection information.

-     * @return true if descendants should be traversed, fase otherwise.

-     */

-    @Override

-    public boolean traverseDescendents(final FileSelectInfo fileInfo)

-    {

-        return true;

-    }

-}

diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileFilter.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileFilter.java
deleted file mode 100644
index 828619f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileFilter.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.commons.vfs2;
-
-/**
- * This interface is used to select files when traversing the direct children of the base.
- */
-public interface FileFilter
-{
-    /**
-     * Determines if a file or folder should be selected.
-     *
-     * @param fileInfo the file or folder to select.
-     * @return true if the file should be selected.
-     */
-    boolean accept(final FileSelectInfo fileInfo);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileFilterSelector.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileFilterSelector.java
deleted file mode 100644
index 3b65dde..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileFilterSelector.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.commons.vfs2;
-
-import org.apache.commons.vfs2.util.Messages;
-
-/**
- * A {@link org.apache.commons.vfs2.FileSelector} that selects all children of the given fileObject.
- * <p>
- * This is to mimic the {@link java.io.FileFilter} interface.
- */
-public class FileFilterSelector extends FileDepthSelector
-{
-    /**
-     * The FileFilter.
-     */
-    private final FileFilter fileFilter;
-
-    public FileFilterSelector()
-    {
-        this(null);
-    }
-
-    public FileFilterSelector(final FileFilter fileFilter)
-    {
-        super(1, 1);
-        this.fileFilter = fileFilter;
-    }
-
-    /**
-     * Determines if a file or folder should be selected.
-     * @param fileInfo The file selection information.
-     * @return true if the file or folder should be included, false otherwise.
-     */
-    @Override
-    public boolean includeFile(final FileSelectInfo fileInfo)
-    {
-        if (!super.includeFile(fileInfo))
-        {
-            return false;
-        }
-
-        return accept(fileInfo);
-    }
-
-    /**
-     * Determines whether the file should be selected.
-     * @param fileInfo The file selection information.
-     * @return true if the file should be selected, false otherwise.
-     */
-    public boolean accept(final FileSelectInfo fileInfo)
-    {
-        if (fileFilter != null)
-        {
-            return fileFilter.accept(fileInfo);
-        }
-
-        throw new IllegalArgumentException(Messages.getString("vfs.selectors/filefilter.missing.error"));
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileListener.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileListener.java
deleted file mode 100644
index 06c016e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileListener.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.commons.vfs2;
-
-/**
- * Listens for changes to a file.
- */
-public interface FileListener
-{
-    /**
-     * Called when a file is created.
-     *
-     * @param event The FileChangeEvent.
-     * @throws Exception if an error occurs.
-     */
-    void fileCreated(FileChangeEvent event) throws Exception;
-
-    /**
-     * Called when a file is deleted.
-     *
-     * @param event The FileChangeEvent.
-     * @throws Exception if an error occurs.
-     */
-    void fileDeleted(FileChangeEvent event) throws Exception;
-
-    /**
-     * Called when a file is changed.
-     * <p>
-     * This will only happen if you monitor the file using {@link FileMonitor}.
-     *
-     * @param event The FileChangeEvent.
-     * @throws Exception if an error occurs.
-     */
-    void fileChanged(FileChangeEvent event) throws Exception;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileMonitor.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileMonitor.java
deleted file mode 100644
index 716ef27..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileMonitor.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.commons.vfs2;
-
-/**
- * FileMonitor interface.
- */
-public interface FileMonitor
-{
-    /**
-     * Adds a file to be monitored.
-     * @param file The FileObject to monitor.
-     */
-    void addFile(final FileObject file);
-
-    /**
-     * Removes a file from being monitored.
-     * @param file The FileObject to stop monitoring.
-     */
-    void removeFile(final FileObject file);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileName.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileName.java
deleted file mode 100644
index 6dce63f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileName.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2;
-
-/**
- * Represents a file name.  File names are immutable, and work correctly as
- * keys in hash tables.
- *
- * @see FileObject
- */
-public interface FileName extends Comparable<FileName>
-{
-    /**
-     * The separator character used in file paths.
-     */
-    char SEPARATOR_CHAR = '/';
-
-    /**
-     * The separator used in file paths.
-     */
-    String SEPARATOR = "/";
-
-    /**
-     * The absolute path of the root of a file system.
-     */
-    String ROOT_PATH = "/";
-
-    /**
-     * Returns the base name of this file.  The base name is the last element
-     * of the file name.  For example the base name of
-     * {@code /somefolder/somefile} is {@code somefile}.
-     * <p>
-     * The root file of a file system has an empty base name.
-     * </p>
-     *
-     * @return The base name.  Never returns null.
-     */
-    String getBaseName();
-
-    /**
-     * Returns the absolute path of this file, within its file system.  This
-     * path is normalized, so that {@code .} and {@code ..} elements
-     * have been removed.  Also, the path only contains {@code /} as its
-     * separator character.  The path always starts with {@code /}
-     * <p>
-     * The root of a file system has {@code /} as its absolute path.
-     * </p>
-     *
-     * @return The path.  Never returns null.
-     */
-    String getPath();
-
-    /**
-     * Returns the absolute path of this file, within its file system.  This
-     * path is normalized, so that {@code .} and {@code ..} elements
-     * have been removed.  Also, the path only contains {@code /} as its
-     * separator character.  The path always starts with {@code /}
-     * <p>
-     * The root of a file system has {@code /} as its absolute path.
-     * </p>
-     * <p>
-     * In contrast to {@link #getPath()} the path is decoded i.e. all %nn stuff
-     * replaced by its character.
-     * </p>
-     *
-     * @return The path.  Never returns null.
-     * @throws FileSystemException if the path is not correctly encoded
-     */
-    String getPathDecoded() throws FileSystemException;
-
-    /**
-     * Returns the extension of this file name.
-     *
-     * @return The extension.  Returns an empty string if the name has no
-     *         extension.
-     */
-    String getExtension();
-
-    /**
-     * Returns the depth of this file name, within its file system.  The depth
-     * of the root of a file system is 0.  The depth of any other file is
-     * 1 + the depth of its parent.
-     *
-     * @return The depth of this file name.
-     */
-    int getDepth();
-
-    /**
-     * Returns the URI scheme of this file.
-     *
-     * @return The URI scheme of this file.
-     */
-    String getScheme();
-
-    /**
-     * Returns the absolute URI of this file.
-     *
-     * @return the absolute URI of this file.
-     */
-    String getURI();
-
-    /**
-     * Returns the root URI of the file system this file belongs to.
-     *
-     * @return the root URI.
-     */
-    String getRootURI();
-
-    /**
-     * Finds the root of the file system.
-     *
-     * @return the file system root.
-     */
-    FileName getRoot();
-
-    /**
-     * Returns the file name of the parent of this file.  The root of a
-     * file system has no parent.
-     *
-     * @return A {@link FileName} object representing the parent name.  Returns
-     *         null for the root of a file system.
-     */
-    FileName getParent();
-
-    /**
-     * Resolves a name, relative to this file name.  Equivalent to calling
-     * {@code resolveName( path, NameScope.FILE_SYSTEM )}.
-     *
-     * @param name The name to resolve.
-     * @return A {@link FileName} object representing the resolved file name.
-     * @throws FileSystemException If the name is invalid.
-     */
-    // FileName resolveName(String name) throws FileSystemException;
-
-    /**
-     * Resolves a name, relative to this file name.  Refer to {@link NameScope}
-     * for a description of how names are resolved.
-     *
-     * @param name  The name to resolve.
-     * @param scope The scope to use when resolving the name.
-     * @return A {@link FileName} object representing the resolved file name.
-     * @throws FileSystemException If the name is invalid.
-     */
-    // FileName resolveName(String name, NameScope scope)
-    //     throws FileSystemException;
-
-    /**
-     * Converts a file name to a relative name, relative to this file name.
-     *
-     * @param name The name to convert to a relative path.
-     * @return The relative name.
-     * @throws FileSystemException On error.
-     */
-    String getRelativeName(FileName name) throws FileSystemException;
-
-    /**
-     * Determines if another file name is an ancestor of this file name.
-     *
-     * @param ancestor The FileName to check.
-     * @return true if another file name is an ancestor of this file name.
-     */
-    boolean isAncestor(FileName ancestor);
-
-    /**
-     * Determines if another file name is a descendent of this file name.
-     *
-     * @param descendent the FileName to check.
-     * @return true if the other FileName is a descendent of this file name.
-     */
-    boolean isDescendent(FileName descendent);
-
-    /**
-     * Determines if another file name is a descendent of this file name.
-     *
-     * @param descendent the FileName to check.
-     * @param nameScope the NameScope of the FileName.
-     * @return true if the other FileName is a descendent of this file name.
-     */
-    boolean isDescendent(FileName descendent, NameScope nameScope);
-
-    /**
-     * Checks if this file name is a name for a regular file.
-     *
-     * @return true if this file name is a name for a regular file.
-     * @throws FileSystemException if an error occurs.
-     * @see #getType()
-     * @see FileType#FILE
-     * @since 2.1
-     */
-    boolean isFile() throws FileSystemException;
-
-    /**
-     * Returns the requested or current type of this name.
-     * <p>
-     * The "requested" type is the one determined during resolving the name.
-     * In this case the name is a {@link FileType#FOLDER} if it ends with an "/" else
-     * it will be a {@link FileType#FILE}.
-     * <p>
-     * Once attached it will be changed to reflect the real type of this resource.
-     *
-     * @return {@link FileType#FOLDER} or {@link FileType#FILE}
-     */
-    FileType getType();
-
-    /**
-     * Returns a "friendly path", this is a path without a password.
-     * <p>
-     * This path can not be used to resolve the path again.
-     *
-     * @return the friendly URI as a String.
-     */
-    String getFriendlyURI();
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileNotFolderException.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileNotFolderException.java
deleted file mode 100644
index 48b8066..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileNotFolderException.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.commons.vfs2;
-
-/**
- * Delivers a file-not-folder exception which happens when trying to issue {@link FileObject#getChildren()} on a file.
- * @since 2.0
- */
-public class FileNotFolderException extends FileSystemException
-{
-    /**
-     * serialVersionUID format is YYYYMMDD for the date of the last binary change.
-     */
-    private static final long serialVersionUID = 20101208L;
-
-    public FileNotFolderException(final Object info0)
-    {
-        super("vfs.provider/list-children-not-folder.error", info0);
-    }
-
-    public FileNotFolderException(final Object info0, final Throwable throwable)
-    {
-        super("vfs.provider/list-children-not-folder.error", info0, throwable);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileNotFoundException.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileNotFoundException.java
deleted file mode 100644
index 04e5333..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileNotFoundException.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.commons.vfs2;
-
-/**
- * delivers a file-not-found exception.
- * @since 2.0
- */
-public class FileNotFoundException extends FileSystemException
-{
-    /**
-     * serialVersionUID format is YYYYMMDD for the date of the last binary change.
-     */
-    private static final long serialVersionUID = 20101208L;
-
-    public FileNotFoundException(final Object info0)
-    {
-        super("vfs.provider/read-not-file.error", info0);
-    }
-
-    public FileNotFoundException(final Object info0, final Throwable throwable)
-    {
-        super("vfs.provider/read-not-file.error", info0, throwable);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileObject.java
deleted file mode 100644
index 9c5124f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileObject.java
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2;
-
-import java.io.Closeable;
-import java.net.URL;
-import java.util.List;
-
-import org.apache.commons.vfs2.operations.FileOperations;
-
-/**
- * Represents a file, and is used to access the content and
- * structure of the file.
- * <p>
- * Files are arranged in a hierarchy.  Each hierarchy forms a
- * <i>file system</i>.  A file system represents things like a local OS
- * file system, a windows share, an HTTP server, or the contents of a Zip file.
- * <p>
- * There are two types of files: <i>Folders</i>, which contain other files,
- * and <i>normal files</i>, which contain data, or <i>content</i>.  A folder may
- * not have any content, and a normal file cannot contain other files.
- *
- * <h2>File Naming</h2>
- *
- * TODO - write this.
- *
- * <h2>Reading and Writing a File</h2>
- *
- * Reading and writing a file, and all other operations on the file's
- * <i>content</i>, is done using the {@link FileContent} object returned
- * by {@link #getContent}.
-
- * <h2>Creating and Deleting a File</h2>
- *
- * A file is created using either {@link #createFolder}, {@link #createFile},
- * or by writing to the file using one of the {@link FileContent} methods.
- * <p>
- * A file is deleted using {@link #delete}.  Recursive deletion can be
- * done using {@link #delete(FileSelector)}.
- *
- * <h2>Finding Files</h2>
- *
- * Other files in the <i>same</i> file system as this file can be found
- * using:
- * <ul>
- * <li>{@link #findFiles} to find a set of matching descendants in in the same file system.</li>
- * <li>{@link #getChildren} and {@link #getChild} to find the children of this file.</li>
- * <li>{@link #getParent} to find the folder containing this file.</li>
- * <li>{@link #getFileSystem} to find another file in the same file system.</li>
- * <li>{@link #resolveFile} to find another file relative to this file.</li>
- * </ul>
- * To find files in another file system, use a {@link FileSystemManager}.
- *
- * <h2>Iterating Files</h2>
- *
- * You can iterate over a FileObject using the Java "foreach" statement, which provides all descendants of a File
- * Object.
- *
- * <h2>Sorting Files</h2>
- *
- * Files may be sorted using {@link java.util.Arrays#sort(Object[]) Arrays.sort()}
- * and {@link java.util.Collections#sort(List) Collections.sort()}.
- *
- * @see FileSystemManager
- * @see FileContent
- * @see FileName
- */
-public interface FileObject extends Comparable<FileObject>, Iterable<FileObject>, Closeable
-{
-    /**
-     * Queries the file if it is possible to rename it to newfile.
-     *
-     * @param newfile the new file(-name)
-     * @return true it this is the case
-     */
-    boolean canRenameTo(FileObject newfile);
-
-    /**
-     * Closes this file, and its content.  This method is a hint to the
-     * implementation that it can release any resources associated with
-     * the file.
-     * <p>
-     * The file object can continue to be used after this method is called.
-     * </p>
-     *
-     * @throws FileSystemException On error closing the file.
-     * @see FileContent#close
-     */
-    @Override
-    void close() throws FileSystemException;
-
-    /**
-     * Copies another file, and all its descendants, to this file.
-     * <p>
-     * If this file does not exist, it is created.  Its parent folder is also
-     * created, if necessary.  If this file does exist, it is deleted first.
-     * </p>
-     * <p>
-     * This method is not transactional.  If it fails and throws an
-     * exception, this file will potentially only be partially copied.
-     * </p>
-     *
-     * @param srcFile  The source file to copy.
-     * @param selector The selector to use to select which files to copy.
-     * @throws FileSystemException If this file is read-only, or if the source file does not exist,
-     *                             or on error copying the file.
-     */
-    void copyFrom(FileObject srcFile, FileSelector selector)
-        throws FileSystemException;
-
-    /**
-     * Creates this file, if it does not exist.  Also creates any ancestor
-     * folders which do not exist.  This method does nothing if the file
-     * already exists and is a file.
-     *
-     * @throws FileSystemException If the file already exists with the wrong type, or the parent
-     *                             folder is read-only, or on error creating this file or one of
-     *                             its ancestors.
-     */
-    void createFile() throws FileSystemException;
-
-    /**
-     * Creates this folder, if it does not exist.  Also creates any ancestor
-     * folders which do not exist.  This method does nothing if the folder
-     * already exists.
-     *
-     * @throws FileSystemException If the folder already exists with the wrong type, or the parent
-     *                             folder is read-only, or on error creating this folder or one of
-     *                             its ancestors.
-     */
-    void createFolder() throws FileSystemException;
-
-    /**
-     * Deletes this file.  Does nothing if this file does not exist of if it is a
-     * folder that has children.  Does not delete any descendants of this file,
-     * use {@link #delete(FileSelector)} or {@link #deleteAll()} for that.
-     *
-     * @return true if this object has been deleted
-     * @throws FileSystemException If this file is a non-empty folder, or if this file is read-only,
-     *                             or on error deleteing this file.
-     */
-    boolean delete() throws FileSystemException;
-
-    /**
-     * Deletes all descendants of this file that match a selector.  Does
-     * nothing if this file does not exist.
-     *
-     * <p>This method is not transactional.  If it fails and throws an
-     * exception, this file will potentially only be partially deleted.
-     * </p>
-     *
-     * @param selector The selector to use to select which files to delete.
-     * @return the number of deleted objects
-     * @throws FileSystemException If this file or one of its descendants is read-only, or on error
-     *                             deleting this file or one of its descendants.
-     */
-    int delete(FileSelector selector) throws FileSystemException;
-
-    /**
-     * Deletes this file and all children.
-     *
-     * @return the number of deleted files.
-     * @throws FileSystemException if an error occurs.
-     * @see #delete(FileSelector)
-     * @see Selectors#SELECT_ALL
-     */
-    int deleteAll() throws FileSystemException;
-
-    /**
-     * Determines if this file exists.
-     *
-     * @return {@code true} if this file exists, {@code false} if not.
-     * @throws FileSystemException On error determining if this file exists.
-     */
-    boolean exists() throws FileSystemException;
-
-    /**
-     * Finds the set of matching descendants of this file, in depthwise order.
-     *
-     * @param selector The selector to use to select matching files.
-     * @return The matching files.  The files are returned in depthwise order
-     *         (that is, a child appears in the list before its parent).
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject[] findFiles(FileSelector selector) throws FileSystemException;
-
-    /**
-      * Finds the set of matching descendants of this file.
-      *
-      * @param selector  the selector used to determine if the file should be selected
-      * @param depthwise controls the ordering in the list. e.g. deepest first
-      * @param selected  container for selected files. list needs not to be empty.
-      * @throws FileSystemException if an error occurs.
-      */
-    void findFiles(FileSelector selector, boolean depthwise, List<FileObject> selected) throws FileSystemException;
-
-    /**
-     * Returns a child of this file.  Note that this method returns {@code null}
-     * when the child does not exist.  This differs from
-     * {@link #resolveFile(String, NameScope)} which never returns null.
-     *
-     * @param name The name of the child.
-     * @return The child, or null if there is no such child.
-     * @throws FileSystemException If this file does not exist, or is not a folder, or on error
-     *                             determining this file's children.
-     */
-    FileObject getChild(String name) throws FileSystemException;
-
-    /**
-     * Lists the children of this file.
-     *
-     * @return An array containing the children of this file.  The array is
-     *         unordered.  If the file does not have any children, a zero-length
-     *         array is returned.  This method never returns null.
-     * @throws FileSystemException If this file does not exist, or is not a folder, or on error
-     *                             listing this file's children.
-     */
-    FileObject[] getChildren() throws FileSystemException;
-
-    /**
-     * Returns this file's content.  The {@link FileContent} returned by this
-     * method can be used to read and write the content of the file.
-     *
-     * <p>This method can be called if the file does not exist, and
-     * the returned {@link FileContent} can be used to create the file
-     * by writing its content.
-     * </p>
-     *
-     * @return This file's content.
-     * @throws FileSystemException On error getting this file's content.
-     */
-    FileContent getContent() throws FileSystemException;
-
-    /**
-     * @return FileOperations interface that provides access to the operations API.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileOperations getFileOperations() throws FileSystemException;
-
-    /**
-     * Returns the file system that contains this file.
-     *
-     * @return The file system.
-     */
-    FileSystem getFileSystem();
-
-    /**
-     * Returns the name of this file.
-     *
-     * @return the FileName.
-     */
-    FileName getName();
-
-    /**
-     * Returns the folder that contains this file.
-     *
-     * @return The folder that contains this file.  Returns null if this file is
-     *         the root of a file system.
-     * @throws FileSystemException On error finding the file's parent.
-     */
-    FileObject getParent() throws FileSystemException;
-
-    /**
-     * Returns the receiver as a URI String for public display, like, without a
-     * password.
-     *
-     * @return A URI String without a password, never {@code null}.
-     */
-    String getPublicURIString();
-
-    /**
-     * Returns this file's type.
-     *
-     * @return One of the {@link FileType} constants.  Never returns null.
-     * @throws FileSystemException On error determining the file's type.
-     */
-    FileType getType() throws FileSystemException;
-
-    /**
-     * Returns a URL representing this file.
-     *
-     * @return the URL for the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    URL getURL() throws FileSystemException;
-
-    /**
-     * Checks if the fileObject is attached.
-     *
-     * @return true if the FileObject is attached.
-     */
-    boolean isAttached();
-
-    /**
-     * Checks if someone reads/write to this file.
-     *
-     * @return true if the file content is open.
-     */
-    boolean isContentOpen();
-
-    /**
-     * Determines if this file is executable.
-     *
-     * @return {@code true} if this file is executable, {@code false} if not.
-     * @throws FileSystemException On error determining if this file exists.
-     */
-    boolean isExecutable() throws FileSystemException;
-
-    /**
-     * Checks if this file is a regular file.
-     *
-     * @return true if this file is a regular file.
-     * @throws FileSystemException if an error occurs.
-     * @see #getType()
-     * @see FileType#FILE
-     * @since 2.1
-     */
-    boolean isFile() throws FileSystemException;
-
-    /**
-     * Checks if this file is a folder.
-     *
-     * @return true if this file is a folder.
-     * @throws FileSystemException if an error occurs.
-     * @see #getType()
-     * @see FileType#FOLDER
-     * @since 2.1
-     */
-    boolean isFolder() throws FileSystemException;
-
-    /**
-     * Determines if this file is hidden.
-     *
-     * @return {@code true} if this file is hidden, {@code false} if not.
-     * @throws FileSystemException On error determining if this file exists.
-     */
-    boolean isHidden() throws FileSystemException;
-
-    /**
-     * Determines if this file can be read.
-     *
-     * @return {@code true} if this file is readable, {@code false} if not.
-     * @throws FileSystemException On error determining if this file exists.
-     */
-    boolean isReadable() throws FileSystemException;
-
-    /**
-     * Determines if this file can be written to.
-     *
-     * @return {@code true} if this file is writeable, {@code false} if not.
-     * @throws FileSystemException On error determining if this file exists.
-     */
-    boolean isWriteable() throws FileSystemException;
-
-    /**
-     * Move this file.
-     *
-     * <p>
-     * If the destFile exists, it is deleted first.
-     * </p>
-     *
-     * @param destFile the New filename.
-     * @throws FileSystemException If this file is read-only, or if the source file does not exist,
-     *                             or on error copying the file.
-     */
-    void moveTo(FileObject destFile)
-        throws FileSystemException;
-
-    /**
-     * This will prepare the fileObject to get resynchronized with the underlying file system if required.
-     *
-     * @throws FileSystemException if an error occurs.
-     */
-    void refresh() throws FileSystemException;
-
-    /**
-     * Finds a file, relative to this file.  Equivalent to calling
-     * {@code resolveFile( path, NameScope.FILE_SYSTEM )}.
-     *
-     * @param path The path of the file to locate.  Can either be a relative
-     *             path or an absolute path.
-     * @return The file.
-     * @throws FileSystemException On error parsing the path, or on error finding the file.
-     */
-    FileObject resolveFile(String path) throws FileSystemException;
-
-    /**
-     * Finds a file relative to this file.
-     *
-     * Refer to {@link NameScope} for a description of how names are resolved in the different scopes.
-     *
-     * @param name The name to resolve.
-     * @param scope the NameScope for the file.
-     * @return The file.
-     * @throws FileSystemException On error parsing the path, or on error finding the file.
-     */
-    FileObject resolveFile(String name, NameScope scope)
-        throws FileSystemException;
-
-    /**
-     * Sets the owner's (or everybody's) write permission.
-     *
-     * @param executable
-     *            True to allow read access, false to disallow.
-     * @param ownerOnly
-     *            If {@code true}, the permission applies only to the owner; otherwise, it applies to everybody.
-     * @return true if the operation succeeded.
-     * @throws FileSystemException
-     *             On error determining if this file exists.
-     * @since 2.1
-     */
-    boolean setExecutable(boolean executable, boolean ownerOnly) throws FileSystemException;
-
-
-    /**
-     * Sets the owner's (or everybody's) read permission.
-     *
-     * @param readable
-     *            True to allow read access, false to disallow
-     * @param ownerOnly
-     *            If {@code true}, the permission applies only to the owner; otherwise, it applies to everybody.
-     * @return true if the operation succeeded
-     * @throws FileSystemException
-     *             On error determining if this file exists.
-     * @since 2.1
-     */
-    boolean setReadable(boolean readable, boolean ownerOnly) throws FileSystemException;
-
-    /**
-     * Sets the owner's (or everybody's) write permission.
-     *
-     * @param writable
-     *            True to allow read access, false to disallow
-     * @param ownerOnly
-     *            If {@code true}, the permission applies only to the owner; otherwise, it applies to everybody.
-     * @return true if the operation succeeded
-     * @throws FileSystemException
-     *             On error determining if this file exists.
-     * @since 2.1
-     */
-    boolean setWritable(boolean writable, boolean ownerOnly) throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSelectInfo.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileSelectInfo.java
deleted file mode 100644
index dcb6f9c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSelectInfo.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.commons.vfs2;
-
-/**
- * Information about a file, that is used to select files during the
- * traversal of a hierarchy.
- * <p>
- * TODO - Rename this interface, as it is used by both FileSelector and FileVisitor.
- */
-public interface FileSelectInfo
-{
-    /**
-     * Returns the base folder of the traversal.
-     * @return FileObject representing the base folder.
-     */
-    FileObject getBaseFolder();
-
-    /**
-     * Returns the file (or folder) to be considered.
-     * @return The FileObject.
-     */
-    FileObject getFile();
-
-    /**
-     * Returns the depth of the file relative to the base folder.
-     * @return The depth of the file relative to the base folder.
-     */
-    int getDepth();
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSelector.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileSelector.java
deleted file mode 100644
index e6bdffc..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSelector.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.commons.vfs2;
-
-/**
- * This interface is used to select files when traversing a file hierarchy.
- *
- * @see Selectors
- */
-public interface FileSelector
-{
-    /**
-     * Determines if a file or folder should be selected.  This method is
-     * called in depthwise order (that is, it is called for the children
-     * of a folder before it is called for the folder itself).
-     *
-     * @param fileInfo the file or folder to select.
-     * @return true if the file should be selected.
-     * @throws Exception if an error occurs.
-     */
-    boolean includeFile(FileSelectInfo fileInfo)
-        throws Exception;
-
-    /**
-     * Determines whether a folder should be traversed.  If this method returns
-     * true, {@link #includeFile} is called for each of the children of
-     * the folder, and each of the child folders is recursively traversed.
-     * <p>
-     * This method is called on a folder before {@link #includeFile}
-     * is called.
-     *
-     * @param fileInfo the file or folder to select.
-     * @return true if the folder should be traversed.
-     * @throws Exception if an error occurs.
-     */
-    boolean traverseDescendents(FileSelectInfo fileInfo)
-        throws Exception;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystem.java
deleted file mode 100644
index 72069dd..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystem.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.commons.vfs2;
-
-import java.io.File;
-
-/**
- * A file system, made up of a hierarchy of files.
- */
-public interface FileSystem
-{
-    /**
-     * Returns the root file of this file system.
-     * @return The root FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject getRoot() throws FileSystemException;
-
-    /**
-     * Returns the name of the root file of this file system. The root name always
-     * contains a path String of "/".
-     * @return the root FileName.
-     */
-    FileName getRootName();
-
-    /**
-     * The root URI passed as a file system option or obtained from the rootName.
-     * @return The root URI.
-     */
-    String getRootURI();
-
-    /**
-     * Determines if this file system has a particular capability.
-     * <p>
-     * TODO - Move this to another interface, so that set of capabilities can be queried.
-     *
-     * @param capability The capability to check for.
-     * @return true if this filesystem has the requested capability.
-     *         Note that not all files in the file system may have the
-     *         capability.
-     */
-    boolean hasCapability(Capability capability);
-
-    /**
-     * Returns the parent layer if this is a layered file system.
-     *
-     * @return The parent layer, or null if this is not a layered file system.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject getParentLayer() throws FileSystemException;
-
-    /**
-     * Gets the value of an attribute of the file system.
-     * <p>
-     * TODO - change to {@code Map getAttributes()} instead?<br>
-     * TODO - define the standard attribute names, and define which attrs
-     * are guaranteed to be present.
-     *
-     * @param attrName The name of the attribute.
-     * @return The value of the attribute.
-     * @throws org.apache.commons.vfs2.FileSystemException
-     *          If the file does not exist, or is being written, or if the
-     *          attribute is unknown.
-     * @see org.apache.commons.vfs2.FileContent#getAttribute
-     */
-    Object getAttribute(String attrName) throws FileSystemException;
-
-    /**
-     * Sets the value of an attribute of the file's content.  Creates the
-     * file if it does not exist.
-     *
-     * @param attrName The name of the attribute.
-     * @param value    The value of the attribute.
-     * @throws FileSystemException If the file is read-only, or is being read, or if the attribute
-     *                             is not supported, or on error setting the attribute.
-     * @see FileContent#setAttribute
-     */
-    void setAttribute(String attrName, Object value)
-        throws FileSystemException;
-
-    /**
-     * Finds a file in this file system.
-     *
-     * @param name The name of the file.
-     * @return The file.  Never returns null.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject resolveFile(FileName name) throws FileSystemException;
-
-    /**
-     * Finds a file in this file system.
-     *
-     * @param name The name of the file.  This must be an absolute path.
-     * @return The file.  Never returns null.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject resolveFile(String name) throws FileSystemException;
-
-    /**
-     * Adds a listener on a file in this file system.
-     *
-     * @param file     The file to attach the listener to.
-     * @param listener The listener to add.
-     */
-    void addListener(FileObject file, FileListener listener);
-
-    /**
-     * Removes a listener from a file in this file system.
-     *
-     * @param file     The file to remove the listener from.
-     * @param listener The listener to remove.
-     */
-    void removeListener(FileObject file, FileListener listener);
-
-    /**
-     * Adds a junction to this file system.  A junction is a link that attaches
-     * the supplied file to a point in this file system, making it look like
-     * part of the file system.
-     *
-     * @param junctionPoint The point in this file system to add the junction.
-     * @param targetFile    The file to link to.
-     * @throws FileSystemException If this file system does not support junctions, or the junction
-     *                             point or target file is invalid (the file system may not support
-     *                             nested junctions, for example).
-     */
-    void addJunction(String junctionPoint, FileObject targetFile)
-        throws FileSystemException;
-
-    /**
-     * Removes a junction from this file system.
-     *
-     * @param junctionPoint The junction to remove.
-     * @throws FileSystemException On error removing the junction.
-     */
-    void removeJunction(String junctionPoint) throws FileSystemException;
-
-    /**
-     * Creates a temporary local copy of a file and its descendants.  If
-     * this file is already a local file, a copy is not made.
-     * <p>
-     * Note that the local copy may include additonal files, that were
-     * not selected by the given selector.
-     * <p>
-     * TODO - Add options to indicate whether the caller is happy to deal with
-     * extra files being present locally (eg if the file has been
-     * replicated previously), or whether the caller expects only
-     * the selected files to be present.
-     *
-     * @param file     The file to replicate.
-     * @param selector The selector to use to select the files to replicate.
-     * @return The local copy of this file.
-     * @throws FileSystemException If this file does not exist, or on error replicating the file.
-     */
-    File replicateFile(FileObject file, FileSelector selector)
-        throws FileSystemException;
-
-    /**
-     * Returns the FileSystemOptions used to instantiate this filesystem.
-     * @return The FileSystemOptions.
-     */
-    FileSystemOptions getFileSystemOptions();
-
-    /**
-     * Returns a reference to the FileSytemManager.
-     * @return The FileSystemManager.
-     */
-    FileSystemManager getFileSystemManager();
-
-    /**
-     * Returns the accuracy of the last modification time.
-     * <p>
-     * The local file provider is not very smart in figuring this out, for remote
-     * access to file systems the providers typically don't know the value of the underlying
-     * real file system.
-     *
-     * @return the accuracy of the last modification time in milliseconds. A
-     *         value of 0 means perfectly accurate, anything {@literal > 0} might be off
-     *         by this value. For example, sftp has an accuracy of 1000 ms.
-     */
-    double getLastModTimeAccuracy();
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemConfigBuilder.java
deleted file mode 100644
index 05966af..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemConfigBuilder.java
+++ /dev/null
@@ -1,740 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2;
-
-/**
- * Abstract class which has the right to fill FileSystemOptions.
- */
-public abstract class FileSystemConfigBuilder
-{
-    /** Default prefix to use when resolving system properties */
-    private static final String PREFIX = "vfs.";
-
-    /** The root uri of the file system */
-    private static final String ROOTURI = "rootURI";
-
-    /** The prefix to use when resolving system properties */
-    private final String prefix;
-
-    /**
-     * Construct builder with default prefix.
-     *
-     * @since 1.0
-     */
-    protected FileSystemConfigBuilder()
-    {
-        this.prefix = PREFIX;
-    }
-
-    /**
-     * Construct builder with specified component name.
-     *
-     * @param component component name to be used in prefix
-     *
-     * @since 2.0
-     */
-    protected FileSystemConfigBuilder(final String component)
-    {
-        this.prefix = PREFIX + component;
-    }
-
-    /**
-     * The root URI of the file system.
-     *
-     * @param opts the file system options to modify
-     * @param rootURI The creator name to be associated with the file.
-     *
-     * @since 2.0
-     */
-    public void setRootURI(final FileSystemOptions opts, final String rootURI)
-    {
-        setParam(opts, ROOTURI, rootURI);
-    }
-
-    /**
-     * Return the root URI of the file system.
-     *
-     * @param opts file system options to work with
-     * @return The root URI
-     *
-     * @since 2.0
-     */
-    public String getRootURI(final FileSystemOptions opts)
-    {
-        return getString(opts, ROOTURI);
-    }
-
-    /**
-     * Set named parameter.
-     *
-     * @param opts the file system options to modify
-     * @param name set option with this name
-     * @param value boolean value to set
-     *
-     * @since 2.1
-     */
-    protected void setParam(final FileSystemOptions opts, final String name, final boolean value)
-    {
-        setParam(opts, name, Boolean.valueOf(value));
-    }
-
-    /**
-     * Set named parameter.
-     *
-     * @param opts the file system options to modify
-     * @param name set option with this name
-     * @param value object value to set
-     *
-     * @since 1.0
-     */
-    protected void setParam(final FileSystemOptions opts, final String name, final Object value)
-    {
-        opts.setOption(getConfigClass(), name, value);
-    }
-
-    /**
-     * Get named parameter.
-     *
-     * @param opts file system options to work with
-     * @param name get option with this name
-     * @return the named option or null
-     *
-     * @since 1.0
-     */
-    protected Object getParam(final FileSystemOptions opts, final String name)
-    {
-        if (opts == null)
-        {
-            return null;
-        }
-
-        return opts.getOption(getConfigClass(), name);
-    }
-
-    /**
-     * Check if option exists.
-     *
-     * @param opts file system options to work with
-     * @param name the name to look up in {@code opts}
-     * @return true if opts have the named parameter
-     *
-     * @since 1.0
-     */
-    protected boolean hasParam(final FileSystemOptions opts, final String name)
-    {
-        return opts != null && opts.hasOption(getConfigClass(), name);
-    }
-
-    /**
-     * Is named setting specified.
-     *
-     * @param opts file system options to work with
-     * @param name the option to check in {@code opts} or system properties
-     * @return true if option exists
-     *
-     * @since 2.0
-     */
-    protected boolean hasObject(final FileSystemOptions opts, final String name)
-    {
-        return hasParam(opts, name) || System.getProperties().containsKey(toPropertyKey(name));
-    }
-
-    /**
-     * Get named option as boolean.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getBoolean(FileSystemOptions, String, Boolean)
-     *
-     * @since 2.0
-     */
-    protected Boolean getBoolean(final FileSystemOptions opts, final String name)
-    {
-        return getBoolean(opts, name, null);
-    }
-
-    /**
-     * Get named option as boolean.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getBoolean(FileSystemOptions, String, Boolean)
-     *
-     * @since 2.0
-     */
-    protected boolean getBoolean(final FileSystemOptions opts, final String name, final boolean defaultValue)
-    {
-        return getBoolean(opts, name, Boolean.valueOf(defaultValue)).booleanValue();
-    }
-
-    /**
-     * Get named option as boolean.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getBoolean(FileSystemOptions, String, Boolean)
-     *
-     * @since 2.0
-     */
-    protected Boolean getBoolean(final FileSystemOptions opts, final String name, final Boolean defaultValue)
-    {
-        Boolean value = (Boolean) getParam(opts, name);
-        if (value == null)
-        {
-            final String str = getProperty(name);
-            if (str == null)
-            {
-                return defaultValue;
-            }
-            value = Boolean.valueOf(str);
-        }
-        return value;
-    }
-
-    /**
-     * Get named option as byte.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getByte(FileSystemOptions, String, Byte)
-     *
-     * @since 2.0
-     */
-    protected Byte getByte(final FileSystemOptions opts, final String name)
-    {
-        return getByte(opts, name, null);
-    }
-
-    /**
-     * Get named option as byte.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getByte(FileSystemOptions, String, Byte)
-     *
-     * @since 2.0
-     */
-    protected byte getByte(final FileSystemOptions opts, final String name, final byte defaultValue)
-    {
-        return getByte(opts, name, Byte.valueOf(defaultValue)).byteValue();
-    }
-
-    /**
-     * Get named option as byte.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     *
-     * @since 2.0
-     */
-    protected Byte getByte(final FileSystemOptions opts, final String name, final Byte defaultValue)
-    {
-        Byte value = (Byte) getParam(opts, name);
-        if (value == null)
-        {
-            final String str = getProperty(name);
-            if (str == null)
-            {
-                return defaultValue;
-            }
-            value = Byte.valueOf(str);
-        }
-        return value;
-    }
-
-    /**
-     * Get named option as character.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getCharacter(FileSystemOptions, String, Character)
-     *
-     * @since 2.0
-     */
-    protected Character getCharacter(final FileSystemOptions opts, final String name)
-    {
-        return getCharacter(opts, name, null);
-    }
-
-    /**
-     * Get named option as character.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getCharacter(FileSystemOptions, String, Character)
-     *
-     * @since 2.0
-     */
-    protected char getCharacter(final FileSystemOptions opts, final String name, final char defaultValue)
-    {
-        return getCharacter(opts, name, new Character(defaultValue)).charValue();
-    }
-
-    /**
-     * Get named option as character.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     *
-     * @since 2.0
-     */
-    protected Character getCharacter(final FileSystemOptions opts, final String name, final Character defaultValue)
-    {
-        Character value = (Character) getParam(opts, name);
-        if (value == null)
-        {
-            final String str = getProperty(name);
-            if (str == null || str.length() <= 0)
-            {
-                return defaultValue;
-            }
-            value = new Character(str.charAt(0));
-        }
-        return value;
-    }
-
-    /**
-     * Get named option as double.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getDouble(FileSystemOptions, String, Double)
-     *
-     * @since 2.0
-     */
-    protected Double getDouble(final FileSystemOptions opts, final String name)
-    {
-        return getDouble(opts, name, null);
-    }
-
-    /**
-     * Get named option as double.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getDouble(FileSystemOptions, String, Double)
-     *
-     * @since 2.0
-     */
-    protected double getDouble(final FileSystemOptions opts, final String name, final double defaultValue)
-    {
-        return getDouble(opts, name, new Double(defaultValue)).doubleValue();
-    }
-
-    /**
-     * Get named option as double.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     *
-     * @since 2.0
-     */
-    protected Double getDouble(final FileSystemOptions opts, final String name, final Double defaultValue)
-    {
-        Double value = (Double) getParam(opts, name);
-        if (value == null)
-        {
-            final String str = getProperty(name);
-            if (str == null || str.length() <= 0)
-            {
-                return defaultValue;
-            }
-            value = Double.valueOf(str);
-        }
-        return value;
-    }
-
-    /**
-     * Get named option as enumeration.
-     *
-     * @param <E> enumeration type
-     * @param enumClass class of enumeration type
-     * @param opts file system options to work with
-     * @param name the option name     *
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getEnum(Class, FileSystemOptions, String, Enum)
-     * @throws IllegalArgumentException if option value is not a known enumeration.
-     *
-     * @since 2.1
-     */
-    protected <E extends Enum<E>> E getEnum(final Class<E> enumClass, final FileSystemOptions opts, final String name)
-    {
-        return this.<E>getEnum(enumClass, opts, name, null);
-    }
-
-    /**
-     * Get named option as enumeration.
-     *
-     * @param <E> enumeration type
-     * @param enumClass class of enumeration type
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getEnum(Class, FileSystemOptions, String, Enum)
-     * @throws IllegalArgumentException if option value is not a known enumeration.
-     *
-     * @since 2.1
-     */
-    protected <E extends Enum<E>> E getEnum(final Class<E> enumClass, final FileSystemOptions opts,
-                                            final String name, final E defaultValue)
-    {
-        @SuppressWarnings("unchecked")
-        E value = (E) getParam(opts, name);
-        if (value == null)
-        {
-            final String str = getProperty(name);
-            if (str == null)
-            {
-                return defaultValue;
-            }
-            value = Enum.valueOf(enumClass, str);
-        }
-        return value;
-    }
-
-    /**
-     * Get named option as float.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getFloat(FileSystemOptions, String, Float)
-     * @throws NumberFormatException if option value is not a valid float.
-     *
-     * @since 2.0
-     */
-    protected Float getFloat(final FileSystemOptions opts, final String name)
-    {
-        return getFloat(opts, name, null);
-    }
-
-    /**
-     * Get named option as float.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getFloat(FileSystemOptions, String, Float)
-     * @throws NumberFormatException if option value is not a valid float.
-     *
-     * @since 2.0
-     */
-    protected float getFloat(final FileSystemOptions opts, final String name, final float defaultValue)
-    {
-        return getFloat(opts, name, new Float(defaultValue)).floatValue();
-    }
-
-    /**
-     * Get named option as float.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @throws NumberFormatException if option value is not a valid float.
-     *
-     * @since 2.0
-     */
-    protected Float getFloat(final FileSystemOptions opts, final String name, final Float defaultValue)
-    {
-        Float value = (Float) getParam(opts, name);
-        if (value == null)
-        {
-            final String str = getProperty(name);
-            if (str == null || str.length() <= 0)
-            {
-                return defaultValue;
-            }
-            value = Float.valueOf(str);
-        }
-        return value;
-    }
-
-    /**
-     * Get named option as integer.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getInteger(FileSystemOptions, String, Integer)
-     * @throws NumberFormatException if option value is not a valid integer.
-     *
-     * @since 2.0
-     */
-    protected Integer getInteger(final FileSystemOptions opts, final String name)
-    {
-        return getInteger(opts, name, null);
-    }
-
-    /**
-     * Get named option as integer.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getInteger(FileSystemOptions, String, Integer)
-     * @throws NumberFormatException if option value is not a valid integer.
-     *
-     * @since 2.0
-     */
-    protected int getInteger(final FileSystemOptions opts, final String name, final int defaultValue)
-    {
-        return getInteger(opts, name, Integer.valueOf(defaultValue)).intValue();
-    }
-
-    /**
-     * Get named option as integer.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @throws NumberFormatException if option value is not a valid integer.
-     *
-     * @since 2.0
-     */
-    protected Integer getInteger(final FileSystemOptions opts, final String name, final Integer defaultValue)
-    {
-        Integer value = (Integer) getParam(opts, name);
-        if (value == null)
-        {
-            final String str = getProperty(name);
-            if (str == null)
-            {
-                return defaultValue;
-            }
-            value = Integer.valueOf(str);
-        }
-        return value;
-    }
-
-    /**
-     * Get named option as long.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getLong(FileSystemOptions, String, Long)
-     * @throws NumberFormatException if option value is not a valid long.
-     *
-     * @since 2.0
-     */
-    protected Long getLong(final FileSystemOptions opts, final String name)
-    {
-        return getLong(opts, name, null);
-    }
-
-    /**
-     * Get named option as long.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getLong(FileSystemOptions, String, Long)
-     * @throws NumberFormatException if option value is not a valid long.
-     *
-     * @since 2.0
-     */
-    protected long getLong(final FileSystemOptions opts, final String name, final long defaultValue)
-    {
-        return getLong(opts, name, Long.valueOf(defaultValue)).longValue();
-    }
-
-    /**
-     * Get named option as long.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @throws NumberFormatException if option value is not a valid long.
-     *
-     * @since 2.0
-     */
-    protected Long getLong(final FileSystemOptions opts, final String name, final Long defaultValue)
-    {
-        Long value = (Long) getParam(opts, name);
-        if (value == null)
-        {
-            final String str = getProperty(name);
-            if (str == null)
-            {
-                return defaultValue;
-            }
-            value = Long.valueOf(str);
-        }
-        return value;
-    }
-
-    /**
-     * Get named option as short.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getShort(FileSystemOptions, String, Short)
-     * @throws NumberFormatException if option value is not a valid short.
-     *
-     * @since 2.0
-     */
-    protected Short getShort(final FileSystemOptions opts, final String name)
-    {
-        return getShort(opts, name, null);
-    }
-
-    /**
-     * Get named option as short.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @see #getShort(FileSystemOptions, String, Short)
-     * @throws NumberFormatException if option value is not a valid short
-     *
-     * @since 2.0
-     */
-   protected short getShort(final FileSystemOptions opts, final String name, final short defaultValue)
-    {
-        return getShort(opts, name, Short.valueOf(defaultValue)).shortValue();
-    }
-
-    /**
-     * Get named option as short.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     * @throws NumberFormatException if option value is not a valid short
-     *
-     * @since 2.0
-     */
-    protected Short getShort(final FileSystemOptions opts, final String name, final Short defaultValue)
-    {
-        Short value = (Short) getParam(opts, name);
-        if (value == null)
-        {
-            final String str = getProperty(name);
-            if (str == null)
-            {
-                return defaultValue;
-            }
-            value = Short.valueOf(str);
-        }
-        return value;
-    }
-
-    /**
-     * Get named option as String.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @return the option in {@code opts} or system properties, otherwise null
-     * @see #getString(FileSystemOptions, String, String)
-     *
-     * @since 2.0
-     */
-    protected String getString(final FileSystemOptions opts, final String name)
-    {
-        return getString(opts, name, null);
-    }
-
-    /**
-     * Get named option as String.
-     *
-     * @param opts file system options to work with
-     * @param name the option name
-     * @param defaultValue value to return if option is not present
-     * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
-     *
-     * @since 2.0
-     */
-    protected String getString(final FileSystemOptions opts, final String name, final String defaultValue)
-    {
-        String value = (String) getParam(opts, name);
-        if (value == null)
-        {
-            value = getProperty(name);
-            if (value == null)
-            {
-                return defaultValue;
-            }
-        }
-        return value;
-    }
-
-    /**
-     * Get the target of this configuration.
-     *
-     * @return the specific file system class
-     *
-     * @since 1.0
-     */
-    protected abstract Class<? extends FileSystem> getConfigClass();
-
-    /**
-     * Converts the given name into a System property key.
-     *
-     * @param name a name to combine with the builder prefix
-     * @return name of system property
-     *
-     * @since 2.1
-     */
-    private String toPropertyKey(final String name)
-    {
-        return this.prefix + name;
-    }
-
-    /**
-     * Get the system property for the given name.
-     *
-     * @param name The name to lookup combined with the prefix.
-     * @return a system property or null
-     *
-     * @since 2.1
-     */
-    private String getProperty(final String name)
-    {
-        return System.getProperty(toPropertyKey(name));
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemException.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemException.java
deleted file mode 100644
index b1ee6f1..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemException.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2;
-
-import java.io.IOException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.commons.vfs2.util.Messages;
-
-/**
- * Thrown for file system errors.
- */
-public class FileSystemException
-    extends IOException
-{
-    /**
-     * serialVersionUID format is YYYYMMDD for the date of the last binary change.
-     */
-    private static final long serialVersionUID = 20101208L;
-
-    /** URL pattern */
-    private static final Pattern URL_PATTERN = Pattern.compile("[a-z]+://.*");
-
-    /** Password pattern */
-    private static final Pattern PASSWORD_PATTERN = Pattern.compile(":(?:[^/]+)@");
-
-    /**
-     * Array of complementary info (context).
-     */
-    private final String[] info;
-
-    /**
-     * Constructs exception with the specified detail message.
-     *
-     * @param code the error code of the message.
-     */
-    public FileSystemException(final String code)
-    {
-        this(code, null, (Object[]) null);
-    }
-
-    /**
-     * Constructs exception with the specified detail message.
-     *
-     * @param code  the error code of the message.
-     * @param info0 one context information.
-     */
-    public FileSystemException(final String code, final Object info0)
-    {
-        this(code, null, new Object[]{info0});
-    }
-
-    /**
-     * Constructs exception with the specified detail message.
-     *
-     * @param code      the error code of the message.
-     * @param info0     one context information.
-     * @param throwable the cause.
-     */
-    public FileSystemException(final String code,
-                               final Object info0,
-                               final Throwable throwable)
-    {
-        this(code, throwable, new Object[]{info0});
-    }
-
-    /**
-     * Constructs exception with the specified detail message.
-     *
-     * @param code the error code of the message.
-     * @param info array of complementary info (context).
-     */
-    public FileSystemException(final String code, final Object... info)
-    {
-        this(code, null, info);
-    }
-
-    /**
-     * Constructs exception with the specified detail message.
-     *
-     * @param code the error code of the message.
-     * @param throwable the original cause
-     */
-    public FileSystemException(final String code, final Throwable throwable)
-    {
-        this(code, throwable, (Object[]) null);
-    }
-
-    /**
-     * Constructs exception with the specified detail message.
-     *
-     * @param code      the error code of the message.
-     * @param info      array of complementary info (context).
-     * @param throwable the cause.
-     * @deprecated Use instead {@link #FileSystemException(String, Throwable, Object[])}. Will be removed in 3.0.
-     */
-    @Deprecated
-    public FileSystemException(final String code,
-                               final Object[] info,
-                               final Throwable throwable)
-    {
-        this(code, throwable, info);
-    }
-
-    /**
-     * Constructs exception with the specified detail message.
-     *
-     * @param code      the error code of the message.
-     * @param info      array of complementary info (context).
-     * @param throwable the cause.
-     */
-    public FileSystemException(final String code,
-                               final Throwable throwable,
-                               final Object... info)
-    {
-        super(code, throwable);
-
-        if (info == null)
-        {
-            this.info = new String[0];
-        }
-        else
-        {
-            this.info = new String[info.length];
-            for (int i = 0; i < info.length; i++)
-            {
-                String value = String.valueOf(info[i]);
-                // mask passwords (VFS-169)
-                final Matcher urlMatcher = URL_PATTERN.matcher(value);
-                if (urlMatcher.find())
-                {
-                    final Matcher pwdMatcher = PASSWORD_PATTERN.matcher(value);
-                    value = pwdMatcher.replaceFirst(":***@");
-                }
-                this.info[i] = value;
-            }
-        }
-    }
-
-    /**
-     * Constructs wrapper exception.
-     *
-     * @param throwable the root cause to wrap.
-     */
-    public FileSystemException(final Throwable throwable)
-    {
-        this(throwable.getMessage(), throwable, (Object[]) null);
-    }
-
-    /**
-     * Retrieves message from bundle.
-     * @return The exception message.
-     */
-    @Override
-    public String getMessage()
-    {
-        return Messages.getString(super.getMessage(), (Object[]) getInfo());
-    }
-
-    /**
-     * Retrieves error code of the exception.
-     * Could be used as key for internationalization.
-     *
-     * @return the code.
-     */
-    public String getCode()
-    {
-        return super.getMessage();
-    }
-
-    /**
-     * Retrieves array of complementary info (context).
-     * Could be used as parameter for internationalization.
-     *
-     * @return the context info.
-     */
-    public String[] getInfo()
-    {
-        return info;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemManager.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemManager.java
deleted file mode 100644
index fa15b70..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemManager.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.commons.vfs2;
-
-import java.io.File;
-import java.lang.reflect.Constructor;
-import java.net.URI;
-import java.net.URL;
-import java.net.URLStreamHandlerFactory;
-import java.util.Collection;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.vfs2.operations.FileOperationProvider;
-
-/**
- * A FileSystemManager manages a set of file systems.  This interface is
- * used to locate a {@link FileObject} by name from one of those file systems.
- * <p>
- * To locate a {@link FileObject}, use one of the {@code resolveFile()}
- * methods.
- *
- * <h2><a name="naming">File Naming</a></h2>
- *
- * A file system manager can recognise several types of file names:
- * <ul>
- * <li>Absolute URI.  These must start with a scheme, such as
- * {@code file:} or {@code ftp:}, followed by a scheme dependent
- * file name.  Some examples: {@code file:/c:/somefile} or
- * {@code ftp://somewhere.org/somefile}.</li>
- * <li>Absolute local file name.  For example,
- * {@code /home/someuser/a-file} or {@code c:\dir\somefile.html}.
- * Elements in the name can be separated using any of the following
- * characters: {@code /}, {@code \}, or the native file separator
- * character. For example, the following file names are the same:
- * {@code c:\somedir\somefile.xml} and {@code c:/somedir/somefile.xml}.</li>
- * <li>Relative path.  For example: {@code ../somefile} or
- * {@code somedir/file.txt}. The file system manager resolves relative
- * paths against its <i>base file</i>.  Elements in the relative path can be
- * separated using {@code /}, {@code \}, or file system specific
- * separator characters. Relative paths may also contain {@code ..} and
- * {@code .} elements. See {@link FileObject#resolveFile} for more
- * details.</li>
- * </ul>
- */
-public interface FileSystemManager
-{
-    /**
-     * Returns the base file used to resolve relative paths.
-     *
-     * @return The base FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject getBaseFile() throws FileSystemException;
-
-    /**
-     * Locates a file by name.  Equivalent to calling
-     * {@code resolveFile(getBaseFile(), name)}.
-     *
-     * @param name The name of the file.
-     * @return The file.  Never returns null.
-     * @throws FileSystemException On error parsing the file name.
-     */
-    FileObject resolveFile(String name) throws FileSystemException;
-
-    /**
-     * Locates a file by name.  Equivalent to calling
-     * {@code resolveFile(getBaseFile(), name)}.
-     *
-     * @param name              The name of the file.
-     * @param fileSystemOptions The FileSystemOptions used for FileSystem creation.
-     *                          All files that are later resolved relative to the
-     *                          returned {@code FileObject} share the options.
-     * @return The file.  Never returns null.
-     * @throws FileSystemException On error parsing the file name.
-     */
-    FileObject resolveFile(String name, FileSystemOptions fileSystemOptions)
-        throws FileSystemException;
-
-    /**
-     * Locates a file by name.  The name is resolved as described
-     * <a href="#naming">above</a>.  That is, the name can be either
-     * an absolute URI, an absolute file name, or a relative path to
-     * be resolved against {@code baseFile}.
-     * <p>
-     * Note that the file does not have to exist when this method is called.
-     *
-     * @param baseFile The base file to use to resolve relative paths.
-     *                 May be null if the name is an absolute file name.
-     * @param name     The name of the file.
-     * @return The file.  Never returns null.
-     * @throws FileSystemException On error parsing the file name.
-     */
-    FileObject resolveFile(FileObject baseFile, String name) throws FileSystemException;
-
-    /**
-     * Locates a file by name.  See {@link #resolveFile(FileObject, String)}
-     * for details.
-     *
-     * @param baseFile The base file to use to resolve relative paths.
-     *                 Must not be {@code null}, not even if the <i>name</i> is absolute.
-     * @param name     The name of the file.
-     * @return The file.  Never returns null.
-     * @throws FileSystemException On error parsing the file name.
-     */
-    FileObject resolveFile(File baseFile, String name) throws FileSystemException;
-
-    /**
-     * Resolves a name, relative to this file name.  Equivalent to calling
-     * {@code resolveName( path, NameScope.FILE_SYSTEM )}.
-     *
-     * @param root the base filename
-     * @param name The name to resolve.
-     * @return A {@link FileName} object representing the resolved file name.
-     * @throws FileSystemException If the name is invalid.
-     */
-    FileName resolveName(FileName root, String name) throws FileSystemException;
-
-    /**
-     * Resolves a name, relative to the "root" file name.  Refer to {@link NameScope}
-     * for a description of how names are resolved.
-     *
-     * @param root the base filename
-     * @param name  The name to resolve.
-     * @param scope The {@link NameScope} to use when resolving the name.
-     * @return A {@link FileName} object representing the resolved file name.
-     * @throws FileSystemException If the name is invalid.
-     */
-    FileName resolveName(FileName root, String name, NameScope scope)
-        throws FileSystemException;
-
-    /**
-     * Converts a local file into a {@link FileObject}.
-     *
-     * @param file The file to convert.
-     * @return The {@link FileObject} that represents the local file.  Never
-     *         returns null.
-     * @throws FileSystemException On error converting the file.
-     */
-    FileObject toFileObject(File file) throws FileSystemException;
-
-    /**
-     * Creates a layered file system.  A layered file system is a file system
-     * that is created from the contents of a file, such as a zip or tar file.
-     *
-     * @param provider The name of the file system provider to use.  This name
-     *                 is the same as the scheme used in URI to identify the provider.
-     * @param file     The file to use to create the file system.
-     * @return The root file of the new file system.
-     * @throws FileSystemException On error creating the file system.
-     */
-    FileObject createFileSystem(String provider, FileObject file)
-        throws FileSystemException;
-
-    /**
-     * Closes the given filesystem.
-     * <p>
-     * If you use VFS as singleton it is VERY dangerous to call this method.
-     *
-     * @param filesystem The FileSystem to close.
-     */
-    void closeFileSystem(FileSystem filesystem);
-
-    /**
-     * Creates a layered file system.  A layered file system is a file system
-     * that is created from the contents of a file, such as a zip or tar file.
-     *
-     * @param file The file to use to create the file system.
-     * @return The root file of the new file system.
-     * @throws FileSystemException On error creating the file system.
-     */
-    FileObject createFileSystem(FileObject file) throws FileSystemException;
-
-    /**
-     * Creates an empty virtual file system.  Can be populated by adding
-     * junctions to it.
-     *
-     * @param rootUri The root URI to use for the new file system.  Can be null.
-     * @return The root file of the new file system.
-     * @throws FileSystemException if an error occurs creating the VirtualFileSystem.
-     */
-    FileObject createVirtualFileSystem(String rootUri) throws FileSystemException;
-
-    /**
-     * Creates a virtual file system.  The file system will contain a junction
-     * at the fs root to the supplied root file.
-     *
-     * @param rootFile The root file to backs the file system.
-     * @return The root of the new file system.
-     * @throws FileSystemException if an error occurs creating the VirtualFileSystem.
-     */
-    FileObject createVirtualFileSystem(FileObject rootFile) throws FileSystemException;
-
-    /**
-     * Returns a streamhandler factory to enable URL lookup using this
-     * FileSystemManager.
-     *
-     * @return the URLStreamHandlerFactory.
-     */
-    URLStreamHandlerFactory getURLStreamHandlerFactory();
-
-    /**
-     * Determines if a layered file system can be created for a given file.
-     *
-     * @param file The file to check for.
-     * @return true if the FileSystem can be created.
-     * @throws FileSystemException if an error occurs.
-     */
-    boolean canCreateFileSystem(FileObject file) throws FileSystemException;
-
-    /**
-     * Get the cache used to cache fileobjects.
-     *
-     * @return The FilesCache.
-     */
-    FilesCache getFilesCache();
-
-    /**
-     * Get the cache strategy used.
-     *
-     * @return the CacheStrategy.
-     */
-    CacheStrategy getCacheStrategy();
-
-    /**
-     * Get the file object decorator used.
-     *
-     * @return the file object decorator Class.
-     */
-    Class<?> getFileObjectDecorator();
-
-    /**
-     * The constructor associated to the fileObjectDecorator.
-     * We cache it here for performance reasons.
-     *
-     * @return the Constructor associated with the FileObjectDecorator.
-     */
-    Constructor<?> getFileObjectDecoratorConst();
-
-    /**
-     * The class to use to determine the content-type (mime-type).
-     *
-     * @return the FileContentInfoFactory.
-     */
-    FileContentInfoFactory getFileContentInfoFactory();
-
-    /**
-     * Returns true if this manager has a provider for a particular scheme.
-     *
-     * @param scheme The scheme for which a provider should be checked.
-     * @return true if a provider for the scheme is available.
-     */
-    boolean hasProvider(String scheme);
-
-    /**
-     * Get the schemes currently available.
-     *
-     * @return An array of available scheme names that are supported.
-     */
-    String[] getSchemes();
-
-    /**
-     * Get the capabilities for a given scheme.
-     *
-     * @param scheme The scheme to use to locate the provider's capabilities.
-     * @return A Collection of the various capabilities.
-     * @throws FileSystemException if the given scheme is not konwn.
-     */
-    Collection<Capability> getProviderCapabilities(String scheme) throws FileSystemException;
-
-    /**
-     * Sets the logger to use.
-     *
-     * @param log The logger to use.
-     */
-    void setLogger(Log log);
-
-    /**
-     * Get the configuration builder for the given scheme.
-     *
-     * @param scheme The schem to use to obtain the FileSystemConfigBuidler.
-     * @return A FileSystemConfigBuilder appropriate for the given scheme.
-     * @throws FileSystemException if the given scheme is not konwn.
-     */
-    FileSystemConfigBuilder getFileSystemConfigBuilder(String scheme) throws FileSystemException;
-
-    /**
-     * Resolve the uri to a filename.
-     *
-     * @param uri The uri to resolve.
-     * @return A FileName that matches the uri.
-     * @throws FileSystemException if this is not possible.
-     */
-    FileName resolveURI(String uri) throws FileSystemException;
-
-    // -- OPERATIONS --
-    /**
-     * Adds the specified FileOperationProvider for the specified scheme.
-     * <p>
-     * Several FileOperationProvider's might be registered for the same scheme.
-     * For example, for {@code "file"} scheme we can register {@code SvnWsOperationProvider} and
-     * {@code CvsOperationProvider.}
-     *
-     * @param scheme The scheme assoicated with this provider.
-     * @param operationProvider The FileOperationProvider to add.
-     * @throws FileSystemException if an error occurs.
-     */
-    void addOperationProvider(String scheme, FileOperationProvider operationProvider)
-        throws FileSystemException;
-
-    /**
-     * @see FileSystemManager#addOperationProvider(String, org.apache.commons.vfs2.operations.FileOperationProvider)
-     *
-     * @param schemes The schemes that will be associated with the provider.
-     * @param operationProvider The FileOperationProvider to add.
-     * @throws FileSystemException if an error occurs.
-     */
-    void addOperationProvider(String[] schemes, FileOperationProvider operationProvider)
-        throws FileSystemException;
-
-
-    /**
-     * Get Providers for file operations.
-     *
-     * @param scheme the scheme for wich we want to get the list af registered providers.
-     *
-     * @return the registered FileOperationProviders for the specified scheme.
-     * If there were no providers registered for the scheme, it returns null.
-     *
-     * @throws FileSystemException if an error occurs.
-     */
-    FileOperationProvider[] getOperationProviders(String scheme) throws FileSystemException;
-
-    /**
-     * Resolves a URI into a {@link FileObject}.
-     *
-     * @param uri The URI to convert.
-     * @return The {@link FileObject} that represents the URI.  Never
-     *         returns null.
-     * @throws FileSystemException On error converting the file.
-     * @since 2.1
-     */
-    FileObject resolveFile(URI uri) throws FileSystemException;
-
-    /**
-     * Resolves a URL into a {@link FileObject}.
-     *
-     * @param url The URL to convert.
-     * @return The {@link FileObject} that represents the URL.  Never
-     *         returns null.
-     * @throws FileSystemException On error converting the file.
-     * @since 2.1
-     */
-    FileObject resolveFile(URL url) throws FileSystemException;
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemOptions.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemOptions.java
deleted file mode 100644
index 0f7c945..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileSystemOptions.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.commons.vfs2;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-/**
- * Configures file systems individually with these options.
- * <p>
- * To configure a file system, you set properties on a {@link FileSystemOptions} object. Most file systems provide a
- * {@link FileSystemConfigBuilder} with specific options for that file system.
- * <p>
- * To use the options, pass them to {@link FileSystemManager#resolveFile(String,FileSystemOptions)}. From there, the
- * options apply to all files that are resolved relative to that file.
- *
- * @see org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder
- * @see org.apache.commons.vfs2.provider.ftp.FtpFileSystemConfigBuilder
- * @see org.apache.commons.vfs2.provider.ftps.FtpsFileSystemConfigBuilder
- * @see org.apache.commons.vfs2.provider.hdfs.HdfsFileSystemConfigBuilder
- * @see org.apache.commons.vfs2.provider.http.HttpFileSystemConfigBuilder
- * @see org.apache.commons.vfs2.provider.webdav.WebdavFileSystemConfigBuilder
- * @see org.apache.commons.vfs2.provider.ram.RamFileSystemConfigBuilder
- * @see org.apache.commons.vfs2.provider.res.ResourceFileSystemConfigBuilder
- * @see org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder
- *
- */
-public final class FileSystemOptions implements Cloneable
-{
-    /** The options */
-    private final Map<FileSystemOptionKey, Object> options;
-
-    /**
-     * Creates a new instance.
-     */
-    public FileSystemOptions()
-    {
-        this(new TreeMap<FileSystemOptionKey, Object>());
-    }
-
-    protected FileSystemOptions(final Map<FileSystemOptionKey, Object> options)
-    {
-        this.options = options;
-    }
-
-    /**
-     * Keys in the options Map.
-     */
-    private static final class FileSystemOptionKey implements Comparable<FileSystemOptionKey>
-    {
-        /** Constant used to create hashcode */
-        private static final int HASH = 29;
-
-        /** The FileSystem class */
-        private final Class<? extends FileSystem> fileSystemClass;
-
-        /** The option name */
-        private final String name;
-
-        // TODO: the parameter name suggests that the class should only be a
-        // a FileSystem, however some of the tests pass in DefaultFileSystemConfigBuilder
-        private FileSystemOptionKey(final Class<? extends FileSystem> fileSystemClass, final String name)
-        {
-            this.fileSystemClass = fileSystemClass;
-            this.name = name;
-        }
-
-        @Override
-        public int compareTo(final FileSystemOptionKey o)
-        {
-            final int ret = fileSystemClass.getName().compareTo(o.fileSystemClass.getName());
-            if (ret != 0)
-            {
-                return ret;
-            }
-            return name.compareTo(o.name);
-        }
-
-        @Override
-        public boolean equals(final Object o)
-        {
-            if (this == o)
-            {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass())
-            {
-                return false;
-            }
-
-            final FileSystemOptionKey that = (FileSystemOptionKey) o;
-
-            if (!fileSystemClass.equals(that.fileSystemClass))
-            {
-                return false;
-            }
-            if (!name.equals(that.name))
-            {
-                return false;
-            }
-
-            return true;
-        }
-
-        @Override
-        public int hashCode()
-        {
-            int result;
-            result = fileSystemClass.hashCode();
-            result = HASH * result + name.hashCode();
-            return result;
-        }
-
-        @Override
-        public String toString()
-        {
-            return fileSystemClass.getName()+"."+name;
-        }
-    }
-
-    void setOption(final Class<? extends FileSystem> fileSystemClass, final String name, final Object value)
-    {
-        options.put(new FileSystemOptionKey(fileSystemClass, name), value);
-    }
-
-    Object getOption(final Class<? extends FileSystem> fileSystemClass, final String name)
-    {
-        final FileSystemOptionKey key = new FileSystemOptionKey(fileSystemClass, name);
-        return options.get(key);
-    }
-
-    boolean hasOption(final Class<? extends FileSystem> fileSystemClass, final String name)
-    {
-        final FileSystemOptionKey key = new FileSystemOptionKey(fileSystemClass, name);
-        return options.containsKey(key);
-    }
-
-    public int compareTo(final FileSystemOptions other)
-    {
-        if (this == other)
-        {
-            // the same instance
-            return 0;
-        }
-
-        final int propsSz = options == null ? 0 : options.size();
-        final int propsFkSz = other.options == null ? 0 : other.options.size();
-        if (propsSz < propsFkSz)
-        {
-            return -1;
-        }
-        if (propsSz > propsFkSz)
-        {
-            return 1;
-        }
-        if (propsSz == 0)
-        {
-            // props empty
-            return 0;
-        }
-
-        // ensure proper sequence of options
-        final SortedMap<FileSystemOptionKey, Object> myOptions =
-              options instanceof SortedMap
-            ? (SortedMap<FileSystemOptionKey, Object>)options
-            : new TreeMap<FileSystemOptionKey, Object>(options);
-        final SortedMap<FileSystemOptionKey, Object> theirOptions =
-              other.options instanceof SortedMap
-            ? (SortedMap<FileSystemOptionKey, Object>)other.options
-            : new TreeMap<FileSystemOptionKey, Object>(other.options);
-        final Iterator<FileSystemOptionKey> optKeysIter = myOptions.keySet().iterator();
-        final Iterator<FileSystemOptionKey> otherKeysIter = theirOptions.keySet().iterator();
-        while(optKeysIter.hasNext()) {
-            int comp = optKeysIter.next().compareTo(otherKeysIter.next());
-            if (comp != 0) {
-                return comp;
-            }
-        }
-
-        Object[] array = new Object[propsSz];
-        final int hash = Arrays.deepHashCode(myOptions.values().toArray(array));
-        final int hashFk = Arrays.deepHashCode(theirOptions.values().toArray(array));
-        if (hash < hashFk)
-        {
-            return -1;
-        }
-        if (hash > hashFk)
-        {
-            return 1;
-        }
-
-        // TODO: compare Entry by Entry ??
-        return 0;
-    }
-
-    @Override
-    public int hashCode()
-    {
-        final int prime = 31;
-        int result = 1;
-        if (options == null) {
-            result = prime * result;
-        } else {
-            final SortedMap<FileSystemOptionKey, Object> myOptions =
-                options instanceof SortedMap
-              ? (SortedMap<FileSystemOptionKey, Object>)options
-              : new TreeMap<FileSystemOptionKey, Object>(options);
-            result = prime * result + myOptions.keySet().hashCode();
-            result = prime * result + Arrays.deepHashCode(myOptions.values().toArray(new Object[options.size()]));
-        }
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj)
-    {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        FileSystemOptions other = (FileSystemOptions)obj;
-        return compareTo(other) == 0;
-    }
-
-
-    /**
-     * {@inheritDoc}
-     *
-     * @since 2.0
-     */
-    @Override
-    public Object clone()
-    {
-        return new FileSystemOptions(new TreeMap<FileSystemOptionKey, Object>(options));
-    }
-
-    @Override
-    public String toString()
-    {
-        return options.toString();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileType.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileType.java
deleted file mode 100644
index 922d23e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileType.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.commons.vfs2;
-
-/**
- * An enumerated type that represents a file's type.
- */
-public enum FileType
-{
-    /**
-     * A folder.  May contain other files, and have attributes, but does not
-     * have any data content.
-     */
-    FOLDER("folder", true, false, true),
-
-    /**
-     * A regular file.  May have data content and attributes, but cannot
-     * contain other files.
-     */
-    FILE("file", false, true, true),
-
-    /**
-     * A file or folder.  May have data content and attributes, and can
-     * contain other files.
-     */
-    FILE_OR_FOLDER("fileOrFolder", true, true, true),
-
-    /**
-     * A file that does not exist.  May not have data content, attributes,
-     * or contain other files.
-     */
-    IMAGINARY("imaginary", false, false, false);
-
-    /** The name of the FileType */
-    private final String name;
-
-    /** true if the FileType can have children */
-    private final boolean hasChildren;
-
-    /** true if the FileType can have content */
-    private final boolean hasContent;
-
-    /** true if the FileType has attributes */
-    private final boolean hasAttrs;
-
-    private FileType(final String name,
-                     final boolean hasChildren,
-                     final boolean hasContent,
-                     final boolean hasAttrs)
-    {
-        this.name = name;
-        this.hasChildren = hasChildren;
-        this.hasContent = hasContent;
-        this.hasAttrs = hasAttrs;
-    }
-
-    /**
-     * Returns the name of this type.
-     * @return The name of this type.
-     */
-    @Override
-    public String toString()
-    {
-        return name;
-    }
-
-    /**
-     * Returns the name of this type.
-     * @return The name of the type.
-     */
-    public String getName()
-    {
-        return name;
-    }
-
-    /**
-     * Returns true if files of this type may contain other files.
-     * @return true if files can contain other files.
-     */
-    public boolean hasChildren()
-    {
-        return hasChildren;
-    }
-
-    /**
-     * Returns true if files of this type may have data content.
-     * @return true if files can have content.
-     */
-    public boolean hasContent()
-    {
-        return hasContent;
-    }
-
-    /**
-     * Returns true if files of this type may have attributes.
-     * @return true if files can have attributes
-     */
-    public boolean hasAttributes()
-    {
-        return hasAttrs;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileTypeHasNoContentException.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileTypeHasNoContentException.java
deleted file mode 100644
index d4bcba4..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileTypeHasNoContentException.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.commons.vfs2;
-
-/**
- * delivers a file-not-folder exception which happens when trying to issue
- * {@link org.apache.commons.vfs2.FileObject#getChildren()} on a file.
- * @since 2.0
- */
-public class FileTypeHasNoContentException extends FileSystemException
-{
-    /**
-     * serialVersionUID format is YYYYMMDD for the date of the last binary change.
-     */
-    private static final long serialVersionUID = 20101208L;
-
-    public FileTypeHasNoContentException(final Object info0)
-    {
-        super("vfs.provider/read-not-file.error", info0);
-    }
-
-    public FileTypeHasNoContentException(final Object info0, final Throwable throwable)
-    {
-        super("vfs.provider/read-not-file.error", info0, throwable);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileTypeSelector.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileTypeSelector.java
deleted file mode 100644
index 2558589..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileTypeSelector.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.commons.vfs2;
-
-/**
- * A {@link FileSelector} that selects files of a particular type.
- */
-public class FileTypeSelector
-    implements FileSelector
-{
-    /** The FileType */
-    private final FileType type;
-
-    /**
-     * Creates a new selector for the given file type.
-     *
-     * @param type
-     *            The file type to select
-     */
-    public FileTypeSelector(final FileType type)
-    {
-        this.type = type;
-    }
-
-    /**
-     * Determines if a file or folder should be selected.
-     * @param fileInfo The file selection information.
-     * @return true if the file or folder should be selected.
-     * @throws FileSystemException if an error occurs
-     */
-    @Override
-    public boolean includeFile(final FileSelectInfo fileInfo)
-        throws FileSystemException
-    {
-        return fileInfo.getFile().getType() == type;
-    }
-
-    /**
-     * Determines whether a folder should be traversed.
-     * @param fileInfo The file selection information.
-     * @return true if the file or folder should be traversed.
-     */
-    @Override
-    public boolean traverseDescendents(final FileSelectInfo fileInfo)
-    {
-        return true;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FileUtil.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FileUtil.java
deleted file mode 100644
index 5b38745..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FileUtil.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.commons.vfs2;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Utility methods for dealing with FileObjects.
- */
-public final class FileUtil
-{
-
-    private FileUtil()
-    {
-    }
-
-    /**
-     * Returns the content of a file, as a byte array.
-     *
-     * @param file The file to get the content of.
-     * @return The content as a byte array.
-     * @throws IOException if the file content cannot be accessed.
-     */
-    public static byte[] getContent(final FileObject file)
-        throws IOException
-    {
-        final FileContent content = file.getContent();
-        final int size = (int) content.getSize();
-        final byte[] buf = new byte[size];
-
-        final InputStream in = content.getInputStream();
-        try
-        {
-            int read = 0;
-            for (int pos = 0; pos < size && read >= 0; pos += read)
-            {
-                read = in.read(buf, pos, size - pos);
-            }
-        }
-        finally
-        {
-            in.close();
-        }
-
-        return buf;
-    }
-
-    /**
-     * Writes the content of a file to an OutputStream.
-     * @param file The FileObject to write.
-     * @param output The OutputStream to write to.
-     * @throws IOException if an error occurs writing the file.
-     * @see FileContent#write(OutputStream)
-     */
-    public static void writeContent(final FileObject file,
-                                    final OutputStream output)
-        throws IOException
-    {
-        file.getContent().write(output);
-    }
-
-    /**
-     * Copies the content from a source file to a destination file.
-     * @param srcFile The source FileObject.
-     * @param destFile The target FileObject
-     * @throws IOException If an error occurs copying the file.
-     * @see FileContent#write(FileContent)
-     * @see FileContent#write(FileObject)
-     */
-    public static void copyContent(final FileObject srcFile,
-                                   final FileObject destFile)
-        throws IOException
-    {
-        srcFile.getContent().write(destFile);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/FilesCache.java b/trunk/core/src/main/java/org/apache/commons/vfs2/FilesCache.java
deleted file mode 100644
index 113cead..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/FilesCache.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.commons.vfs2;
-
-
-/**
- * The fileCache interface. Implementations of this interface are expected to be thread safe.
- */
-public interface FilesCache
-{
-    /**
-     * Adds a FileObject to the cache.
-     *
-     * @param file the file
-     */
-    void putFile(final FileObject file);
-
-    /**
-     * Adds a FileObject to the cache if it isn't already present.
-     *
-     * @param file the file
-     * @return true if the file was stored, false otherwise.
-     */
-    boolean putFileIfAbsent(final FileObject file);
-
-    /**
-     * Retrieves a FileObject from the cache by name.
-     *
-     * @param filesystem The FileSystem.
-     * @param name the name
-     * @return the fileobject or null if file is not cached
-     */
-    FileObject getFile(final FileSystem filesystem, final FileName name);
-
-    /**
-     * Purges the entries corresponding to the FileSystem.
-     *
-     * @param fileSystem The FileSystem.
-     */
-    void clear(final FileSystem fileSystem);
-
-    /**
-     * Purges the whole cache.
-     */
-    void close();
-
-    /**
-     * Removes a file from cache.
-     *
-     * @param filesystem filesystem
-     * @param name       filename
-     */
-    void removeFile(final FileSystem filesystem, final FileName name);
-
-    /**
-     * If the cache uses timestamps it could use this method to handle
-     * updates of them.
-     *
-     * @param file filename
-     */
-    // public void touchFile(final FileObject file);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/NameScope.java b/trunk/core/src/main/java/org/apache/commons/vfs2/NameScope.java
deleted file mode 100644
index 8b43e53..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/NameScope.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.commons.vfs2;
-
-/**
- * An enumerated type for file name scope, used when resolving a name relative
- * to a file.
- */
-public enum NameScope
-{
-    /**
-     * Resolve against the children of the base file.  The name is resolved
-     * as described by {@link #FILE_SYSTEM}.  However, an exception is
-     * thrown if the resolved file is not a direct child of the base file.
-     */
-    CHILD("child"),
-
-    /**
-     * Resolve against the descendants of the base file.  The name is resolved
-     * as described by {@link #FILE_SYSTEM}.  However, an exception is thrown
-     * if the resolved file is not a descendent of the base file.
-     */
-    DESCENDENT("descendent"),
-
-    /**
-     * Resolve against the descendants of the base file.  The name is resolved
-     * as described by {@link #FILE_SYSTEM}.  However, an exception is thrown
-     * if the resolved file is not a descendent of the base file, or the base
-     * files itself.
-     */
-    DESCENDENT_OR_SELF("descendent_or_self"),
-
-    /**
-     * Resolve against files in the same file system as the base file.
-     * <p>
-     * If the supplied name is an absolute path, then it is resolved
-     * relative to the root of the file system that the base file belongs to.
-     * If a relative name is supplied, then it is resolved relative to the base
-     * file.
-     * <p>
-     * The path may use any mix of {@code /}, {@code \}, or file
-     * system specific separators to separate elements in the path.  It may
-     * also contain {@code .} and {@code ..} elements.
-     * <p>
-     * A path is considered absolute if it starts with a separator character,
-     * and relative if it does not.
-     */
-    FILE_SYSTEM("filesystem");
-
-    /** The name */
-    private final String realName;
-
-    private NameScope(final String name)
-    {
-        this.realName = name;
-    }
-
-    /**
-     * Returns the name of the scope.
-     * @return The name of the scope.
-     */
-    @Override
-    public String toString()
-    {
-        return realName;
-    }
-
-    /**
-     * Returns the name of the scope.
-     * @return The name of the scope.
-     */
-    public String getName()
-    {
-        return realName;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/PatternFileSelector.java b/trunk/core/src/main/java/org/apache/commons/vfs2/PatternFileSelector.java
deleted file mode 100644
index b78d4bb..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/PatternFileSelector.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.commons.vfs2;

-

-import java.util.regex.Pattern;

-

-/**

- * A {@link FileSelector} that selects based on regular expressions matched against base filename.

- *

- * @since 2.1

- */

-public class PatternFileSelector implements FileSelector

-{

-

-    /**

-     * The extensions to select.

-     */

-    private final Pattern pattern;

-

-    /**

-     * Creates a new selector for the given pattern.

-     *

-     * @param pattern

-     *            The regular expressed used by this selector.

-     */

-    public PatternFileSelector(final Pattern pattern)

-    {

-        this.pattern = pattern;

-    }

-

-    /**

-     * Creates a new selector for the given pattern.

-     *

-     * @param regex

-     *            The regular expressed used by this selector.

-     */

-    public PatternFileSelector(final String regex)

-    {

-        this(Pattern.compile(regex));

-    }

-

-    /**

-     * Creates a new selector for the given Pattern and flags.

-     *

-     * @param regex

-     *            The expression to be compiled

-     *

-     * @param flags

-     *            Match flags, a bit mask.

-     *

-     * @see Pattern#compile(String, int)

-     */

-    public PatternFileSelector(final String regex, final int flags)

-    {

-        this(Pattern.compile(regex, flags));

-    }

-

-    /**

-     * Determines if a file or folder should be selected.

-     *

-     * @param fileInfo

-     *            The file selection information.

-     * @return true if the file should be selected, false otherwise.

-     */

-    @Override

-    public boolean includeFile(final FileSelectInfo fileInfo)

-    {

-        return this.pattern.matcher(fileInfo.getFile().getName().getPath()).matches();

-    }

-

-    @Override

-    public String toString()

-    {

-        return this.pattern.toString();

-    }

-

-    /**

-     * Determines whether a folder should be traversed.

-     *

-     * @param fileInfo

-     *            The file selection information.

-     * @return true if descendants should be traversed, false otherwise.

-     */

-    @Override

-    public boolean traverseDescendents(final FileSelectInfo fileInfo)

-    {

-        return true;

-    }

-}

diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/RandomAccessContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/RandomAccessContent.java
deleted file mode 100644
index a52b352..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/RandomAccessContent.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.commons.vfs2;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Provides random access over content.
- */
-public interface RandomAccessContent extends DataOutput, DataInput
-{
-    /**
-     * Closes this random access file stream and releases any system resources associated with the stream.
-     * <p>
-     * A closed random access file cannot perform input or output operations and cannot be reopened.
-     * </p>
-     * <p>
-     * If this file has an associated channel then the channel is closed as well.
-     * <p>
-     *
-     * @throws IOException
-     *             if an I/O error occurs.
-     */
-    void close() throws IOException;
-
-    /**
-     * Returns the current offset in this file.
-     *
-     * @return the offset from the beginning of the file, in bytes, at which the next read or write occurs.
-     * @throws IOException
-     *             if an I/O error occurs.
-     */
-    long getFilePointer() throws IOException;
-
-    /**
-     * Get the input stream.
-     * <p>
-     * <b>Notice: If you use {@link #seek(long)} you have to re-get the InputStream</b>
-     * </p>
-     *
-     * @return the InputStream.
-     * @throws IOException
-     *             if an I/O error occurs.
-     */
-    InputStream getInputStream() throws IOException;
-
-    /**
-     * Returns the length of this file.
-     *
-     * @return the length of this file, measured in bytes.
-     * @throws IOException
-     *             if an I/O error occurs.
-     */
-    long length() throws IOException;
-
-    /**
-     * Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs.
-     * <p>
-     * The offset may be set beyond the end of the file. Setting the offset beyond the end of the file does not change
-     * the file length. The file length will change only by writing after the offset has been set beyond the end of the
-     * file.
-     * </p>
-     * <p>
-     * <b>Notice: If you use {@link #getInputStream()} you have to re-get the InputStream after calling
-     * {@link #seek(long)}</b>
-     * </p>
-     *
-     * @param pos
-     *            the offset position, measured in bytes from the beginning of the file, at which to set the file
-     *            pointer.
-     * @throws IOException
-     *             if {@code pos} is less than {@code 0} or if an I/O error occurs.
-     */
-    void seek(long pos) throws IOException;
-
-    /**
-     * Sets the length of this content.
-     *
-     * <p>
-     * If the the {@code newLength} argument is smaller than {@link #length()}, the content is truncated.
-     * </p>
-     *
-     * <p>
-     * If the the {@code newLength} argument is greater than {@link #length()}, the content grows with undefined data.
-     * </p>
-     *
-     * @param newLength
-     *            The desired content length
-     * @exception IOException
-     *                If an I/O error occurs
-     * @since 2.1
-     */
-    void setLength(long newLength) throws IOException;
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/Resources.properties b/trunk/core/src/main/java/org/apache/commons/vfs2/Resources.properties
deleted file mode 100644
index 34270b9..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/Resources.properties
+++ /dev/null
@@ -1,301 +0,0 @@
-#   Licensed to the Apache Software Foundation (ASF) under one or more
-#   contributor license agreements.  See the NOTICE file distributed with
-#   this work for additional information regarding copyright ownership.
-#   The ASF licenses this file to You under the Apache License, Version 2.0
-#   (the "License"); you may not use this file except in compliance with
-#   the License.  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-# $Id$
-
-# Factory
-vfs/create-manager.error=Could not create a file system manager of class "{0}".
-
-# AbstractFileObject
-vfs.provider/delete-not-supported.error=This file type does not support delete.
-vfs.provider/rename-not-supported.error=This file type does not support rename.
-vfs.provider/write-append-not-supported.error=The file type does not support append mode.
-vfs.provider/random-access-not-supported.error=The file type does not support random access.
-vfs.provider/random-access-read-not-supported.error=The file type does not support read in random access mode.
-vfs.provider/random-access-write-not-supported.error=The file type does not support write in random access mode.
-vfs.provider/create-folder-not-supported.error=This file type does not support folder creation.
-vfs.provider/get-last-modified-not-supported.error=This file type does not support retriving last modified time.
-vfs.provider/set-last-modified-not-supported.error=This file type does not support setting last modified time.
-vfs.provider/set-attribute-not-supported.error=This file type does not support setting attributes.
-vfs.provider/remove-attribute-not-supported.error=This file type does not support removing attributes.
-vfs.provider/get-attribute-not-supported.error=This file type does not support getting attributes.
-vfs.provider/write-not-supported.error=This file type cannot be written to.
-vfs.provider/get-type.error=Could not determine the type of file "{0}".
-vfs.provider/list-children-not-folder.error=Could not list the contents of "{0}" because it is not a folder.
-vfs.provider/list-children.error=Could not list the contents of folder "{0}".
-vfs.provider/delete-read-only.error=Could not delete "{0}" because it is read-only.
-vfs.provider/rename-read-only.error=Could not rename "{0}" because it is read-only.
-vfs.provider/rename-parent-read-only.error=Could not rename "{0}" because "{1}" is read-only.
-vfs.provider/rename-dest-exists.error=Destination "{0}" already existent.
-vfs.provider/delete.error=Could not delete "{0}".
-vfs.provider/rename.error=Could not rename "{0}" to "{1}".
-vfs.provider/create-folder-mismatched-type.error=Could not create folder "{0}" because it already exists and is a file.
-vfs.provider/create-folder-read-only.error=Could not create folder "{0}" because its parent folder is read-only.
-vfs.provider/create-folder.error=Could not create folder "{0}".
-vfs.provider/create-file.error=Could not create file "{0}".
-vfs.provider/write-read-only.error=Could not write to "{0}" because it is read-only.
-vfs.provider/write-not-file.error=Could not write to "{0}" because it is not a file.
-vfs.provider/write.error=Could not write to "{0}".
-vfs.provider/copy-file.error=Could not copy "{0}" to "{1}".
-vfs.provider/rename-filename.error=You can only rename within the same folder. Invalid Filename: "{0}".
-vfs.provider/copy-read-only.error=Could not copy {0} "{1}" to "{2}" because the destination file is read-only.
-vfs.provider/copy-missing-file.error=Could not copy "{0}" because it does not exist.
-vfs.provider/find-files.error=Could not find files in "{0}".
-vfs.provider/check-is-executable.error=Could not determine if file "{0}" is executable.
-vfs.provider/check-is-hidden.error=Could not determine if file "{0}" is hidden.
-vfs.provider/check-is-writeable.error=Could not determine if file "{0}" is writeable.
-vfs.provider/check-is-readable.error=Could not determine if file "{0}" is readable.
-vfs.provider/set-executable.error=Could not set the executable flag of file "{0}".
-vfs.provider/set-writeable.error=Could not set the writeable flag of file "{0}".
-vfs.provider/set-readable.error=Could not set the readable flag of file "{0}".
-vfs.provider/get-url.error=Could not create URL for "{0}".
-vfs.provider/resync.error=Could not resync "{0}".
-vfs.provider/close.error=Could not close "{0}".
-vfs.provider/read.error=Could not read file "{0}".
-vfs.provider/random-access.error=Could not read/write file "{0}".
-vfs.provider/read-not-readable.error=File "{0}" is not readable.
-vfs.provider/read-not-file.error=Could not read from "{0}" because it is not a file.
-vfs.provider/closed.error=File closed.
-
-# DefaultFileContent
-vfs.provider/get-size-not-file.error=Could not determine the size of "{0}" because it is not a file.
-vfs.provider/get-size-write.error=Could not determine the size of file "{0}" because it is being written to.
-vfs.provider/get-size.error=Could not determine the size of file "{0}".
-vfs.provider/read-in-use.error=Could not read file "{0}" because it is currently being written to.
-vfs.provider/write-in-use.error=Could not write to "{0}" because it is currently in use.
-vfs.provider/random-in-use.error=Could not read/write file "{0}" because it is currently in use.
-vfs.provider/get-last-modified-writing.error=Could not determine the last modified timestamp of "{0}" because it is being written to.
-vfs.provider/get-last-modified-no-exist.error=Could not determine the last modified timestamp of "{0}" because it does not exist.
-vfs.provider/get-last-modified.error=Could not determine the last modified timestamp of "{0}".
-vfs.provider/set-last-modified-writing.error=Could not set the last modified timestamp of "{0}" because it is being written to.
-vfs.provider/set-last-modified-no-exist.error=Could not set the last modified timestamp of "{0}" because it does not exist.
-vfs.provider/set-last-modified.error=Could not set the last modified timestamp of "{0}".
-vfs.provider/get-certificates-no-exist.error=Could not retrieve the certificates of "{0}" because it does not exist.
-vfs.provider/get-certificates-writing.error=Could not retrieve the certificates of "{0}" because it is being written to.
-vfs.provider/get-certificates.error=Could not retrieve the certificates of "{0}".
-vfs.provider/close-instr.error=Could not close the input stream for file "{0}".
-vfs.provider/close-outstr.error=Could not close the output stream for file "{0}".
-vfs.provider/close-rac.error=Could not close the random access content for file "{0}".
-vfs.provider/exists-attribute-no-exist.error=Could not check if attribute "{0}" of "{1}" exists because attributes are not supported.
-vfs.provider/get-attributes-no-exist.error=Could not get attributes for file "{0}" because it does not exist.
-vfs.provider/get-attributes.error=Could not get attributes "{0}".
-vfs.provider/set-attribute-no-exist.error=Could not set attribute "{0}" of "{1}" because it does not exist.
-vfs.provider/set-attribute.error=Could not set attribute "{0}" of "{1}".
-vfs.provider/remove-attribute-no-exist.error=Could not check if attribute "{0}" of "{1}" exists because attributes are not supported.
-vfs.provider/remove-attribute.error=Could not remove attribute "{0}" of "{1}".
-
-# AbstractFileSystemProvider
-vfs.provider/invalid-absolute-uri.error=Invalid absolute URI "{0}".
-vfs.provider/not-layered-fs.error=File system for URL scheme "{0}" is not a layered file system.
-vfs.provider/no-config-builder.error=File provider for URL scheme "{0}" does not provide a configuration builder.
-vfs.provider/config-key-invalid.error=The configuration builder for scheme "{0}" has no option "{1}".
-vfs.provider/config-value-invalid.error=The delegating configuration builder cant convert value "{2}" for key "{1}" scheme "{0}".
-vfs.provider/config-too-many-values.error=Too many values for configuration builder for scheme "{0}" key "{1}".
-vfs.provider/config-unexpected-primitive.error=Unexpected primitive "{0}".
-vfs.provider/config-unexpected-value-class.error=Cant convert a "{0}" value for scheme "{1}" key "{2}".
-
-# AbstractFileSystem
-vfs.provider/files-cache-missing.error=No files-cache implementation set.
-vfs.provider/mismatched-fs-for-name.error=Incorrect file system URI "{2}" in name "{0}", was expecting "{1}".
-vfs.provider/junctions-not-supported.error=Junctions not supported for file system "{0}".
-vfs.provider/notify-listener.warn=Could not notify listener of change to "{0}".
-vfs.provider/replicate-missing-file.error=Could not replicate "{0}" as it does not exist.
-vfs.provider/replicate-file.error=Could not replicate "{0}".
-vfs.provider/resolve-file.error=Could not resolve file "{0}".
-
-# AbstractFileProvider
-vfs.provider/filename-parser-missing.error=No filename-parser implementation set.
-
-# AbstractFileName
-vfs.provider/filename-type.error=A filename can only be of type FileType.FOLDER or FileType.FILE
-
-# Operations
-vfs.operation/wrong-type.error=Can't lookup operation, wrong type: "{0}"
-vfs.operation/not-found.error=Operation not found, type: "{0}"
-vfs.operation/cant-register.error=Can't register operation, wrong type: "{0}"
-vfs.operation/operation-not-supported.error=Operation "{0}" not supported.
-vfs.operation/operation-provider-already-added.error=Operation provider already added to scheme "{0}"
-
-# RandomAccess
-vfs.provider/random-access-invalid-position.error=Invalid position: "{0}"
-vfs.provider/random-access-open-failed.error=Could not access file "{0}" because it does not exist.
-
-# UriParser
-vfs.provider/missing-double-slashes.error=Expecting // to follow the scheme in URI "{0}".
-vfs.provider/missing-hostname.error=Hostname missing from URI "{0}".
-vfs.provider/missing-port.error=Port number is missing from URI "{0}".
-vfs.provider/missing-hostname-path-sep.error=Expecting / to follow the hostname in URI "{0}".
-vfs.provider/invalid-descendent-name.error=Invalid descendent file name "{0}".
-vfs.provider/invalid-escape-sequence.error=Invalid URI escape sequence "{0}".
-vfs.provider/invalid-relative-path.error=Invalid relative file name.
-
-# DefaultFileSystemManager
-vfs.impl/unknown-scheme.error=Unknown scheme "{0}" in URI "{1}".
-vfs.impl/find-rel-file.error=Could not find file with URI "{0}" because it is a relative path, and no base URI was provided.
-vfs.impl/multiple-providers-for-scheme.error=Multiple providers registered for URL scheme "{0}".
-vfs.impl/configuration-already-set.error=FilesCache implementation already set.
-vfs.impl/configuration-already-in-use.error=The configuration is already attached to an filesystemmanager. You cant change it anymore.
-vfs.impl/unknown-provider.error=No file provider is registered with URI scheme "{0}" to handle file "{1}".
-vfs.impl/no-provider-for-file.error=Could not find a file provider that can handle file "{0}".
-vfs.impl/no-local-file-provider.error=Could not find a file provider which can handle local files.
-vfs.impl/no-replicator.error=No file replicator configured.
-vfs.impl/no-temp-file-store.error=No temporary file store configured.
-vfs.impl/replicate-file.error=Could not replicate "{0}".
-vfs.impl/delete-temp.warn=Could not clean up temporary file "{0}".
-vfs.impl/init-replicator.error=Could not initialise file replicator.
-vfs.impl/already-inited.error=Manager already inited, cant change the configuration now.
-vfs.impl/invalid-decorator.error="{0}" is not a valid decorator. It has to extend "DecoratedFileObject" and must provide a single argument constructor which takes a "FileObject"
-vfs.impl/temp-dir.info=Using "{0}" as temporary files store.
-
-# StandardFileSystemManager
-vfs.impl/find-config-file.error=Could not find VFS configuration resource "{0}".
-vfs.impl/load-config.error=Could not load VFS configuration from "{0}".
-vfs.impl/create-provider.error=Could not create file provider of class "{0}".
-vfs.impl/create-files-cache.error=Could not create files-cache implementation of class "{0}".
-vfs.impl/create-client-factory.error=Could not create client factory of class "{0}".
-vfs.impl/skipping-provider.debug=Skipping provider "{0}" because required class "{1}" is not available.
-vfs.impl/skipping-provider-scheme.debug=Skipping provider "{0}" because required scheme "{1}" is not available.
-
-# FileTypeMap
-vfs.impl/multiple-schemes.error=This file requires multiple schemes. Use getSchemes() instead.
-
-# VFSClassLoader
-vfs.impl/pkg-sealing-unsealed=Trying to seal package "{0}" that exists as unsealed.
-vfs.impl/pkg-sealed-other-url=Package "{0}" exists and is sealed with other URL.
-
-# VirtualFileSystem
-vfs.impl/nested-junction.error=Attempting to create a nested junction at "{0}".  Nested junctions are not supported.
-vfs.impl/create-junction.error=Could not create a junction at "{0}".
-
-# SoftRefFilesCache
-vfs.impl/SoftRefReleaseThread-interrupt.info=SoftRefFilesCache - Release Thread interrupted.
-vfs.impl/SoftRefReleaseThread-already-running.warn=SoftRefFilesCache - Release Thread already running.
-
-# Local Provider
-vfs.provider.local/get-type.error=Could not determine the type of "{0}".
-vfs.provider.local/delete-file.error=Could not delete "{0}".
-vfs.provider.local/rename-file.error=Could not rename file "{0}" to "{1}".
-vfs.provider.local/create-folder.error=Could not create directory "{0}".
-vfs.provider.local/not-absolute-file-name.error=URI "{0}" is not an absolute file name.
-vfs.provider.local/missing-share-name.error=Share name missing from UNC file name "{0}".
-
-# Temp Provider
-vfs.provider.temp/get-type.error=Could not determine the type of "{0}".
-vfs.provider.temp/delete-file.error=Could not delete "{0}".
-vfs.provider.temp/rename-file.error=Could not rename file "{0}" to "{1}".
-vfs.provider.temp/create-folder.error=Could not create directory "{0}".
-vfs.provider.temp/not-absolute-file-name.error=URI "{0}" is not an absolute file name.
-vfs.provider.temp/missing-share-name.error=Share name missing from UNC file name "{0}".
-
-# SMB Provider
-vfs.provider.smb/missing-share-name.error=The share name is missing from URI "{0}".
-vfs.provider.smb/get-type.error=Could not detemine the type of "{0}".
-
-# Zip Provider
-vfs.provider.zip/open-zip-file.error=Could not open Zip file "{0}".
-vfs.provider.zip/close-zip-file.error=Could not close Zip file "{0}".
-
-# Bzip2 Provider
-vfs.provider.bzip2/not-a-bzip2-file.error=File "{0}" is not bzip2 compressed.
-
-# JarFileSystem
-vfs.provider.jar/open-jar-file.error=Could not open Jar file "{0}".
-
-# JarURLConnectionImpl
-vfs.provider.jar/jar-file-no-access.error=JarURLConnections in VFS does not give access to the JarFile.
-vfs.provider.jar/jar-entry-no-access.error=JarURLConnections in VFS does not give access to the JarEntry.
-
-# FTP Provider
-vfs.provider.ftp.wrapper/change-work-directory-back.error=Could not change back to work directory "{0}".
-vfs.provider.ftp/change-work-directory.error=Could not change to work directory "{0}".
-vfs.provider.ftp/close-connection.error=Could not close connection to FTP server.
-vfs.provider.ftp/connect-rejected.error=Connection to FTP server on "{0}" rejected.
-vfs.provider.ftp/connect.error=Could not connect to FTP server on "{0}".
-vfs.provider.ftp/create-folder.error=Could not create FTP directory "{0}".
-vfs.provider.ftp/delete-file.error=Could not delete FTP file "{0}".
-vfs.provider.ftp/finish-get.error=Could not get FTP file "{0}".
-vfs.provider.ftp/finish-put.error=Could not put FTP file "{0}".
-vfs.provider.ftp/get-type.error=Could not determine the file type of "{0}".
-vfs.provider.ftp/input-error.debug=Cant open input connection for file "{0}". Reason: "{1}".
-vfs.provider.ftp/invalid-directory-entry.debug=Invalid directory entry at line "{0}" (directory "{1}").
-vfs.provider.ftp/login.error=Could not login to FTP server on "{0}" as user "{1}".
-vfs.provider.ftp/output-error.debug=Cant open output connection for file "{0}". Reason: "{1}".
-vfs.provider.ftp/rename-file.error=Could not rename FTP file "{0}" to "{1}".
-vfs.provider.ftp/set-file-type.error=Could not set the file type to "{0}".
-
-# FTPS Provider
-vfs.provider.ftps/data-channel.level=Failed to setup secure data channel level "{0}".
-
-# SFTP Provider
-vfs.provider.sftp/change-work-directory-back.error=Could not change back to work directory "{0}".
-vfs.provider.sftp/change-work-directory.error=Could not change to work directory "{0}".
-vfs.provider.sftp/config-sshdir.error=SSH-Folder "{0}" non existent or not a folder.
-vfs.provider.sftp/connect.error=Could not connect to SFTP server at "{0}".
-vfs.provider.sftp/create-folder.error=Folder creation failed with unknown error.
-vfs.provider.sftp/delete.error=Delete failed with unknown error.
-vfs.provider.sftp/filename-encoding.error=Could not change to file name encoding "{0}"
-vfs.provider.sftp/get-file.error=Read file contents failed with unknown error.
-vfs.provider.sftp/known-hosts.error=Error during processing known-hosts file "{0}".
-vfs.provider.sftp/list-children.error=List folder contents failed with unknown error.
-vfs.provider.sftp/load-private-key.error=Could not load private key from "{0}".
-vfs.provider.sftp/put-file.error=Write file contents failed with unknown error.
-vfs.provider.sftp/StrictHostKeyChecking-arg.error=Illegal argument "{0}" hostKeyChecking can only be "ask", "yes" or "no"
-vfs.provider.sftp/unknown-modtime.error=Last modification time not fetched.
-vfs.provider.sftp/unknown-permissions.error=File permissions not fetched.
-vfs.provider.sftp/unknown-size.error=File size not fetched.
-
-# URL Provider
-vfs.provider.url/badly-formed-uri.error=Badly formed URI "{0}".
-
-# Http Provider
-vfs.provider.http/get.error=GET method failed for "{0}" with HTTP status {1}.
-vfs.provider.http/head.error=HEAD method failed for "{0}" with HTTP status {1}.
-vfs.provider.http/last-modified.error=No Last-Modified header in HTTP response.
-vfs.provider.http/get-range.error=GET method failed for "{0}" range "{1}" with HTTP status {2}.
-vfs.provider.http/connect.error=Could not connect to HTTP server on "{0}".
-
-# WebDAV Provider
-vfs.provider.webdav/write-file.error=Write to file failed with message: "{0}".
-vfs.provider.webdav/list-children.error=List child resources failed with message: "{0}".
-vfs.provider.webdav/create-collection.error=Create collection failed with message: "{0}".
-vfs.provider.webdav/delete-file.error=Delete file failed with message: "{0}".
-vfs.provider.webdav/create-client.error=Could not create client for server "{0}".
-vfs.provider.webdav/rename-file.error=Rename file failed with message: "{0}".
-vfs.provider.webdav/get-attributes.error=Could not get attributes for: "{0}".
-vfs.provider.webdav/set-attributes.error=Could not set property "{1}" for: "{0}".
-vfs.provider.webdav/get-property.error=Could not get property for: "{0}", name="{1}", type="{2}", nameSet="{3}", addEncoding="{4}".
-
-# Tar
-vfs.provider.tar/open-tar-file.error=Could not open Tar file "{0}".
-vfs.provider.tar/close-tar-file.error=Could not close Tar file "{0}".
-
-# Ant tasks
-vfs.tasks/sync.no-destination.error=No destination file or directory specified.
-vfs.tasks/sync.too-many-destinations.error=Cannot specify both a destination file and a destination directory.
-vfs.tasks/sync.no-source-files.warn=No source files specified.
-vfs.tasks/sync.no-source-file.error=No source file specified.
-vfs.tasks/sync.too-many-source-files.error=Too many source files specified.
-vfs.tasks/sync.source-not-file.error=Source file "{0}" is not a file, or does not exist.
-vfs.tasks/sync.src-file-no-exist.warn=Source file "{0}" does not exist.
-vfs.tasks/sync.duplicate-source-files.warn=Multiple source files for destination file "{0}".
-vfs.tasks/delete.no-source-files.error=No files to delete specified.
-vfs.tasks/mkdir.create-folder.info=Creating directory "{0}".
-
-# Selectors
-vfs.selectors/filefilter.missing.error=Configure a fileFilter or override accept().
-
-# Utils
-vfs.util/find-abstract-file-object.error=Object "{0}" did not extend from AbstractFileObject.
-vfs.util/missing-capability.error=The Filesystem does not provide the required capability "{0}".
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/Selectors.java b/trunk/core/src/main/java/org/apache/commons/vfs2/Selectors.java
deleted file mode 100644
index 1d539fc..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/Selectors.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.commons.vfs2;
-
-/**
- * Several standard file selectors.
- */
-public final class Selectors
-{
-    /**
-     * A {@link FileSelector} that selects only the base file/folder.
-     */
-    public static final FileSelector SELECT_SELF = new FileDepthSelector();
-
-    /**
-     * A {@link FileSelector} that selects the base file/folder and its
-     * direct children.
-     */
-    public static final FileSelector SELECT_SELF_AND_CHILDREN = new FileDepthSelector(0, 1);
-
-    /**
-     * A {@link FileSelector} that selects only the direct children
-     * of the base folder.
-     */
-    public static final FileSelector SELECT_CHILDREN = new FileDepthSelector(1);
-
-    /**
-     * A {@link FileSelector} that selects all the descendants of the
-     * base folder, but does not select the base folder itself.
-     */
-    public static final FileSelector EXCLUDE_SELF = new FileDepthSelector(1, Integer.MAX_VALUE);
-
-    /**
-     * A {@link FileSelector} that only files (not folders).
-     */
-    public static final FileSelector SELECT_FILES = new FileTypeSelector(FileType.FILE);
-
-    /**
-     * A {@link FileSelector} that only folders (not files).
-     */
-    public static final FileSelector SELECT_FOLDERS = new FileTypeSelector(FileType.FOLDER);
-
-    /**
-     * A {@link FileSelector} that selects the base file/folder, plus all
-     * its descendants.
-     */
-    public static final FileSelector SELECT_ALL = new AllFileSelector();
-
-    /**
-     * Prevent the class from being instantiated.
-     */
-    private Selectors()
-    {
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/UserAuthenticationData.java b/trunk/core/src/main/java/org/apache/commons/vfs2/UserAuthenticationData.java
deleted file mode 100644
index f35a381..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/UserAuthenticationData.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.commons.vfs2;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
-
-/**
- * Contains various authentication data.
- */
-public class UserAuthenticationData
-{
-    /**
-     * Represents a user authentication item.
-     */
-    public static class Type implements Comparable<Type>
-    {
-        /** The type name */
-        private final String type;
-
-        /**
-         * Creates a new Type.
-         *
-         * @param type the type
-         */
-        public Type(final String type)
-        {
-            this.type = type;
-        }
-
-        @Override
-        public boolean equals(final Object o)
-        {
-            if (this == o)
-            {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass())
-            {
-                return false;
-            }
-
-            final Type type1 = (Type) o;
-
-            if (type != null ? !type.equals(type1.type) : type1.type != null)
-            {
-                return false;
-            }
-
-            return true;
-        }
-
-        @Override
-        public int compareTo(final Type o)
-        {
-            return type.compareTo(o.type);
-        }
-
-        /**
-         * @return The hash code.
-         * @since 2.0
-         * */
-        @Override
-        public int hashCode()
-        {
-            return type != null ? type.hashCode() : 0;
-        }
-
-        /**
-         * @return The type.
-         * @since 2.0
-         * */
-        @Override
-        public String toString()
-        {
-            return type;
-        }
-    }
-
-    /** The user name. */
-    public static final Type USERNAME = new Type("username");
-
-    /** The password. */
-    public static final Type PASSWORD = new Type("password");
-
-    /** The user's domain. */
-    public static final Type DOMAIN = new Type("domain");
-
-    /** The authentication data. */
-    private final Map<Type, char[]> authenticationData = new TreeMap<Type, char[]>();
-
-    /**
-     * Creates a new uninitialized instance.
-     */
-    public UserAuthenticationData()
-    {
-        // do nothing
-    }
-
-    /**
-     * Sets a data to this collection.
-     * @param type The Type to add
-     * @param data The data associated with the Type
-     */
-    public void setData(final Type type, final char[] data)
-    {
-        authenticationData.put(type, data);
-    }
-
-    /**
-     * Gets a data from the collection.
-     * @param type The Type to retrieve.
-     * @return a character array containing the data associated with the type.
-     */
-    public char[] getData(final Type type)
-    {
-        return authenticationData.get(type);
-    }
-
-    /**
-     * Deletes all data stored within this authenticator.
-     */
-    public void cleanup()
-    {
-        // step 1: nullify character buffers
-        final Iterator<char[]> iterAuthenticationData = authenticationData.values().iterator();
-        while (iterAuthenticationData.hasNext())
-        {
-            final char[] data = iterAuthenticationData.next();
-            if (data == null || data.length < 0)
-            {
-                continue;
-            }
-
-            for (int i = 0; i < data.length; i++)
-            {
-                data[i] = 0;
-            }
-        }
-        // step 2: allow data itself to gc
-        authenticationData.clear();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/UserAuthenticator.java b/trunk/core/src/main/java/org/apache/commons/vfs2/UserAuthenticator.java
deleted file mode 100644
index 9885986..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/UserAuthenticator.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.commons.vfs2;
-
-/**
- * The user authenticator is used to query credentials from the user. Since a UserAuthenticator
- * is provided with the {@link FileSystemOptions} to a {@link FileSystem} it should also implement
- * reasonable equals and hashCode functions if the FileSystem should be shared.
- */
-public interface UserAuthenticator
-{
-    /**
-     * Queries the given type from the user.
-     * @param types An array containing the user's credentials
-     * @return The UserAuthenticationData.
-     */
-    UserAuthenticationData requestAuthentication(UserAuthenticationData.Type[] types);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/VFS.java b/trunk/core/src/main/java/org/apache/commons/vfs2/VFS.java
deleted file mode 100644
index 4a06105..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/VFS.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.commons.vfs2;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-/**
- * The main entry point for the VFS.  Used to create {@link FileSystemManager}
- * instances.
- */
-public final class VFS
-{
-    /** The URI style */
-    private static Boolean uriStyle;
-
-    /** The FileSystemManager */
-    private static FileSystemManager instance;
-
-    private VFS()
-    {
-    }
-
-    /**
-     * Returns the default {@link FileSystemManager} instance.
-     * <p>
-     * Warning, if you close this instance you may affect all current
-     * and future users of this manager singleton.
-     *
-     * @return The FileSystemManager.
-     * @throws FileSystemException if an error occurs creating the manager.
-     */
-    public static synchronized FileSystemManager getManager()
-        throws FileSystemException
-    {
-        if (instance == null)
-        {
-            instance = createManager("org.apache.commons.vfs2.impl.StandardFileSystemManager");
-        }
-        return instance;
-    }
-
-    /**
-     * Creates a file system manager instance.
-     * @param managerClassName The specific manager impelmentation class name.
-     * @return The FileSystemManager.
-     * @throws FileSystemException if an error occurs creating the manager.
-     */
-    private static FileSystemManager createManager(final String managerClassName)
-        throws FileSystemException
-    {
-        try
-        {
-            // Create instance
-            final Class<?> mgrClass = Class.forName(managerClassName);
-            final FileSystemManager mgr = (FileSystemManager) mgrClass.newInstance();
-
-            try
-            {
-                // Initialize
-                final Method initMethod = mgrClass.getMethod("init", (Class[]) null);
-                initMethod.invoke(mgr, (Object[]) null);
-            }
-            catch (final NoSuchMethodException ignored)
-            {
-                /* Ignore; don't initialize. */
-            }
-
-            return mgr;
-        }
-        catch (final InvocationTargetException e)
-        {
-            throw new FileSystemException("vfs/create-manager.error",
-                managerClassName,
-                e.getTargetException());
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs/create-manager.error",
-                managerClassName,
-                e);
-        }
-    }
-
-    public static boolean isUriStyle()
-    {
-        if (uriStyle == null)
-        {
-            uriStyle = Boolean.FALSE;
-        }
-        return uriStyle.booleanValue();
-    }
-
-    public static void setUriStyle(final boolean uriStyle)
-    {
-        if (VFS.uriStyle != null && VFS.uriStyle.booleanValue() != uriStyle)
-        {
-            throw new IllegalStateException("VFS.uriStyle was already set differently.");
-        }
-        VFS.uriStyle = Boolean.valueOf(uriStyle);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/VfsLog.java b/trunk/core/src/main/java/org/apache/commons/vfs2/VfsLog.java
deleted file mode 100644
index 4149e58..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/VfsLog.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.commons.vfs2;
-
-import org.apache.commons.logging.Log;
-
-/**
- * This class is to keep the old logging behaviour (for ant-task) and to be able to
- * correctly use commons-logging.<br>
- * I hope i could remove it sometimes.
- */
-public final class VfsLog
-{
-    // static utility class
-    private VfsLog()
-    {
-    }
-
-    /**
-     * warning.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     * @param t The exception, if any.
-     */
-    public static void warn(final Log vfslog, final Log commonslog, final String message, final Throwable t)
-    {
-        if (vfslog != null)
-        {
-            vfslog.warn(message, t);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.warn(message, t);
-        }
-    }
-
-    /**
-     * warning.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     */
-    public static void warn(final Log vfslog, final Log commonslog, final String message)
-    {
-        if (vfslog != null)
-        {
-            vfslog.warn(message);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.warn(message);
-        }
-    }
-
-    /**
-     * debug.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     */
-    public static void debug(final Log vfslog, final Log commonslog, final String message)
-    {
-        if (vfslog != null)
-        {
-            vfslog.debug(message);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.debug(message);
-        }
-    }
-
-    /**
-     * debug.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     * @param t The exception, if any.
-     */
-    public static void debug(final Log vfslog, final Log commonslog, final String message, final Throwable t)
-    {
-        if (vfslog != null)
-        {
-            vfslog.debug(message, t);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.debug(message, t);
-        }
-    }
-
-    /**
-     * info.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     * @param t The exception, if any.
-     */
-    public static void info(final Log vfslog, final Log commonslog, final String message, final Throwable t)
-    {
-        if (vfslog != null)
-        {
-            vfslog.info(message, t);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.info(message, t);
-        }
-    }
-
-    /**
-     * info.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     */
-    public static void info(final Log vfslog, final Log commonslog, final String message)
-    {
-        if (vfslog != null)
-        {
-            vfslog.info(message);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.info(message);
-        }
-    }
-
-    /**
-     * error.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     * @param t The exception, if any.
-     */
-    public static void error(final Log vfslog, final Log commonslog, final String message, final Throwable t)
-    {
-        if (vfslog != null)
-        {
-            vfslog.error(message, t);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.error(message, t);
-        }
-    }
-
-    /**
-     * error.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     */
-    public static void error(final Log vfslog, final Log commonslog, final String message)
-    {
-        if (vfslog != null)
-        {
-            vfslog.error(message);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.error(message);
-        }
-    }
-
-    /**
-     * fatal.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     * @param t The exception, if any.
-     */
-    public static void fatal(final Log vfslog, final Log commonslog, final String message, final Throwable t)
-    {
-        if (vfslog != null)
-        {
-            vfslog.fatal(message, t);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.fatal(message, t);
-        }
-    }
-
-    /**
-     * fatal.
-     * @param vfslog The base component Logger to use.
-     * @param commonslog The class specific Logger
-     * @param message The message to log.
-     */
-    public static void fatal(final Log vfslog, final Log commonslog, final String message)
-    {
-        if (vfslog != null)
-        {
-            vfslog.fatal(message);
-        }
-        else if (commonslog != null)
-        {
-            commonslog.fatal(message);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/auth/StaticUserAuthenticator.java b/trunk/core/src/main/java/org/apache/commons/vfs2/auth/StaticUserAuthenticator.java
deleted file mode 100644
index f142db9..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/auth/StaticUserAuthenticator.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.commons.vfs2.auth;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.UserAuthenticator;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-/**
- * Provides always the same credentials data passed in with the constructor.
- */
-public class StaticUserAuthenticator implements UserAuthenticator, Comparable<StaticUserAuthenticator>
-{
-    private static final Log LOG = LogFactory.getLog(StaticUserAuthenticator.class);
-
-    /** The user name */
-    private final String username;
-
-    /** The password */
-    private final String password;
-
-    /** The user's domain */
-    private final String domain;
-
-    public StaticUserAuthenticator(final String domain, final String username, final String password)
-    {
-        this.username = username;
-        this.password = password;
-        this.domain = domain;
-    }
-
-    @Override
-    public UserAuthenticationData requestAuthentication(final UserAuthenticationData.Type[] types)
-    {
-        final UserAuthenticationData data = new UserAuthenticationData();
-        for (final UserAuthenticationData.Type type : types)
-        {
-            if (type == UserAuthenticationData.DOMAIN)
-            {
-                data.setData(UserAuthenticationData.DOMAIN, UserAuthenticatorUtils.toChar(domain));
-            }
-            else if (type == UserAuthenticationData.USERNAME)
-            {
-                data.setData(UserAuthenticationData.USERNAME, UserAuthenticatorUtils.toChar(username));
-            }
-            else if (type == UserAuthenticationData.PASSWORD)
-            {
-                data.setData(UserAuthenticationData.PASSWORD, UserAuthenticatorUtils.toChar(password));
-            }
-            else
-            {
-                if (LOG.isDebugEnabled())
-                {
-                    LOG.debug(StaticUserAuthenticator.class.getSimpleName()
-                        + " does not support authentication data type '" + type
-                        + "'; authentication request for this type ignored.");
-                }
-            }
-        }
-        return data;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 2.0
-     */
-    @Override
-    public int hashCode()
-    {
-        final int prime = 37;
-        int result = 1;
-        result = prime * result + (domain == null ? 0 : domain.hashCode());
-        result = prime * result + (password == null ? 0 : password.hashCode());
-        result = prime * result + (username == null ? 0 : username.hashCode());
-
-        return result;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 2.0
-     */
-    @Override
-    public boolean equals(final Object obj)
-    {
-        if (this == obj)
-        {
-            return true;
-        }
-
-        if (obj == null)
-        {
-            return false;
-        }
-
-        if (getClass() != obj.getClass())
-        {
-            return false;
-        }
-
-        final StaticUserAuthenticator other = (StaticUserAuthenticator) obj;
-        return equalsNullsafe(domain, other.domain)
-                && equalsNullsafe(username, other.username)
-                && equalsNullsafe(password, other.password);
-    }
-
-    private boolean equalsNullsafe(final String thisString, final String otherString)
-    {
-        if (thisString == null)
-        {
-            if (otherString != null)
-            {
-                return false;
-            }
-        }
-        else if (!thisString.equals(otherString))
-        {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 2.0
-     */
-    @Override
-    public int compareTo(final StaticUserAuthenticator other)
-    {
-        int result = compareStringOrNull(domain, other.domain);
-        result = result == 0 ? compareStringOrNull(username, other.username) : result;
-        result = result == 0 ? compareStringOrNull(password, other.password) : result;
-
-        return result;
-    }
-
-    private int compareStringOrNull(final String thisString, final String otherString)
-    {
-        if (thisString == null)
-        {
-            if (otherString != null)
-            {
-                return -1;
-            }
-        }
-        else
-        {
-            if (otherString == null)
-            {
-                return 1;
-            }
-
-            final int result = thisString.compareTo(otherString);
-            if (result != 0)
-            {
-                return result;
-            }
-        }
-
-        return 0;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @since 2.0
-     */
-    @Override
-    public String toString()
-    {
-        final StringBuilder buffer = new StringBuilder();
-        if (domain != null)
-        {
-            buffer.append(domain).append('\\');
-        }
-        if (username != null)
-        {
-            buffer.append(username);
-        }
-        else
-        {
-            buffer.append("(null)");
-        }
-        if (password != null)
-        {
-            buffer.append(":***");
-        }
-        return buffer.toString();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/auth/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/auth/package.html
deleted file mode 100644
index 754cf02..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/auth/package.html
+++ /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.
--->
-<body>
-<p>VFS Authentication implementation</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/AbstractFilesCache.java b/trunk/core/src/main/java/org/apache/commons/vfs2/cache/AbstractFilesCache.java
deleted file mode 100644
index b802777..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/AbstractFilesCache.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.commons.vfs2.cache;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FilesCache;
-import org.apache.commons.vfs2.provider.AbstractVfsComponent;
-
-
-/**
- * Abstract base class for FilesCache implementations.
- */
-public abstract class AbstractFilesCache extends AbstractVfsComponent implements FilesCache
-{
-    // @Override - commented in FilesCache interface
-    public void touchFile(final FileObject file)
-    {
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/DefaultFilesCache.java b/trunk/core/src/main/java/org/apache/commons/vfs2/cache/DefaultFilesCache.java
deleted file mode 100644
index 920d9d0..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/DefaultFilesCache.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.commons.vfs2.cache;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-
-/**
- * A simple {@link org.apache.commons.vfs2.FilesCache FilesCache} implementation.
- * <p>
- * This implementation caches every file with no expire or limit.
- * All files and filesystems are hard reachable references. This implementation
- * holds a list of filesystem specific {@linkplain ConcurrentHashMap ConcurrentHashMaps} in
- * the main cache map.
- * <p>
- * Cached {@linkplain FileObject FileObjects} as well as {@linkplain FileSystem FileSystems}
- * are only removed when {@link #clear(FileSystem)} is called (i.e. on filesystem close).
- * When the used {@link org.apache.commons.vfs2.FileSystemManager FileSystemManager} is closed,
- * it will also {@linkplain #close() close} this cache (which frees all entries).
- * <p>
- * Despite its name, this is not the fallback implementation used by
- * {@link org.apache.commons.vfs2.impl.DefaultFileSystemManager#init() DefaultFileSystemManager#init()}
- * anymore.
- */
-public class DefaultFilesCache extends AbstractFilesCache
-{
-    /** The FileSystem cache. Keeps one Map for each FileSystem. */
-    private final ConcurrentMap<FileSystem, ConcurrentMap<FileName, FileObject>> filesystemCache =
-                    new ConcurrentHashMap<FileSystem, ConcurrentMap<FileName, FileObject>>(10);
-
-    @Override
-    public void putFile(final FileObject file)
-    {
-        final Map<FileName, FileObject> files = getOrCreateFilesystemCache(file.getFileSystem());
-        files.put(file.getName(), file);
-    }
-
-    @Override
-    public boolean putFileIfAbsent(final FileObject file)
-    {
-        final ConcurrentMap<FileName, FileObject> files = getOrCreateFilesystemCache(file.getFileSystem());
-        return files.putIfAbsent(file.getName(), file) == null;
-    }
-
-    @Override
-    public FileObject getFile(final FileSystem filesystem, final FileName name)
-    {
-        // avoid creating filesystem entry for empty filesystem cache:
-        final Map<FileName, FileObject> files = filesystemCache.get(filesystem);
-        if (files == null)
-        {
-            // cache for filesystem is not known => file is not cached:
-            return null;
-        }
-
-        return files.get(name); // or null
-    }
-
-    @Override
-    public void clear(final FileSystem filesystem)
-    {
-        // avoid keeping a reference to the FileSystem (key) object
-        final Map<FileName, FileObject> files = filesystemCache.remove(filesystem);
-        if (files != null)
-        {
-            files.clear(); // help GC
-        }
-    }
-
-    protected ConcurrentMap<FileName, FileObject> getOrCreateFilesystemCache(final FileSystem filesystem)
-    {
-        ConcurrentMap<FileName, FileObject> files = filesystemCache.get(filesystem);
-        // we loop to make sure we never return null even when concurrent clean is called
-        while (files == null)
-        {
-            filesystemCache.putIfAbsent(filesystem, new ConcurrentHashMap<FileName, FileObject>(200, 0.75f, 8));
-            files = filesystemCache.get(filesystem);
-        }
-
-        return files;
-    }
-
-    @Override
-    public void close()
-    {
-        super.close();
-
-        filesystemCache.clear();
-    }
-
-    @Override
-    public void removeFile(final FileSystem filesystem, final FileName name)
-    {
-        // avoid creating filesystem entry for empty filesystem cache:
-        final Map<FileName, FileObject> files = filesystemCache.get(filesystem);
-        if (files != null)
-        {
-            files.remove(name);
-            // This would be too racey:
-            // if (files.empty()) filesystemCache.remove(filessystem);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/FileSystemAndNameKey.java b/trunk/core/src/main/java/org/apache/commons/vfs2/cache/FileSystemAndNameKey.java
deleted file mode 100644
index d9cdaa4..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/FileSystemAndNameKey.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.commons.vfs2.cache;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystem;
-
-/**
- * Key for various cache implementations.
- * <p>
- * It compares the fileSystem (by hashCode) and the filename.
- */
-class FileSystemAndNameKey implements Comparable<FileSystemAndNameKey>
-{
-    /** The FileSystem */
-    private final FileSystem fileSystem;
-
-    /** The FileName */
-    private final FileName fileName;
-
-    /** hashcode to identify this object */
-    private final int fileSystemId;
-
-    FileSystemAndNameKey(final FileSystem fileSystem, final FileName fileName)
-    {
-        this.fileSystem = fileSystem;
-        this.fileSystemId = System.identityHashCode(fileSystem);
-
-        this.fileName = fileName;
-    }
-
-    @Override
-    public int compareTo(final FileSystemAndNameKey other)
-    {
-        if (fileSystemId < other.fileSystemId)
-        {
-            return -1;
-        }
-        if (fileSystemId > other.fileSystemId)
-        {
-            return 1;
-        }
-
-        return fileName.compareTo(other.fileName);
-    }
-
-    FileSystem getFileSystem()
-    {
-        return fileSystem;
-    }
-
-    FileName getFileName()
-    {
-        return fileName;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/LRUFilesCache.java b/trunk/core/src/main/java/org/apache/commons/vfs2/cache/LRUFilesCache.java
deleted file mode 100644
index eba5fcd..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/LRUFilesCache.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.cache;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.commons.collections4.map.AbstractLinkedMap;
-import org.apache.commons.collections4.map.LRUMap;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.VfsLog;
-import org.apache.commons.vfs2.util.Messages;
-
-/**
- * This implementation caches every file using {@link LRUMap}.
- * <p>
- * The default constructor uses a LRU size of 100 per filesystem.
- */
-public class LRUFilesCache extends AbstractFilesCache
-{
-    /** The default LRU size */
-    private static final int DEFAULT_LRU_SIZE = 100;
-
-    /** The logger to use. */
-    private static final Log log = LogFactory.getLog(LRUFilesCache.class);
-
-    /** The FileSystem cache */
-    private final ConcurrentMap<FileSystem, Map<FileName, FileObject>> filesystemCache =
-          new ConcurrentHashMap<FileSystem, Map<FileName, FileObject>>(10);
-
-    /** The size of the cache */
-    private final int lruSize;
-
-    private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
-    private final Lock readLock = rwLock.readLock();
-    private final Lock writeLock = rwLock.writeLock();
-
-    /**
-     * The file cache
-     */
-    private class MyLRUMap extends LRUMap<FileName, FileObject>
-    {
-        /**
-         * serialVersionUID format is YYYYMMDD for the date of the last binary change.
-         */
-        private static final long serialVersionUID = 20101208L;
-
-        /** The FileSystem */
-        private final FileSystem filesystem;
-
-        public MyLRUMap(final FileSystem filesystem, final int size)
-        {
-            super(size, true);
-            this.filesystem = filesystem;
-        }
-
-        @Override
-        protected boolean removeLRU(final AbstractLinkedMap.LinkEntry<FileName, FileObject> linkEntry)
-        {
-            synchronized (LRUFilesCache.this)
-            {
-                final FileObject file = linkEntry.getValue();
-
-                // System.err.println(">>> " + size() + " check removeLRU:" + linkEntry.getKey().toString());
-
-                if (file.isAttached() || file.isContentOpen())
-                {
-                    // do not allow open or attached files to be removed
-                    // System.err.println(">>> " + size() + " VETO removeLRU:" +
-                    //    linkEntry.getKey().toString() + " (" + file.isAttached() + "/" +
-                    //    file.isContentOpen() + ")");
-                    return false;
-                }
-
-                // System.err.println(">>> " + size() + " removeLRU:" + linkEntry.getKey().toString());
-                if (super.removeLRU(linkEntry))
-                {
-                    try
-                    {
-                        // force detach
-                        file.close();
-                    }
-                    catch (final FileSystemException e)
-                    {
-                        VfsLog.warn(getLogger(), log, Messages.getString("vfs.impl/LRUFilesCache-remove-ex.warn"), e);
-                    }
-
-                    final Map<?, ?> files = filesystemCache.get(filesystem);
-                    if (files.size() < 1)
-                    {
-                        filesystemCache.remove(filesystem);
-                    }
-
-                    return true;
-                }
-
-                return false;
-            }
-        }
-    }
-
-    /**
-     * Default constructor. Uses a LRU size of 100 per filesystem.
-     */
-    public LRUFilesCache()
-    {
-        this(DEFAULT_LRU_SIZE);
-    }
-
-    /**
-     * Set the desired LRU size.
-     *
-     * @param lruSize the LRU size
-     */
-    public LRUFilesCache(final int lruSize)
-    {
-        this.lruSize = lruSize;
-    }
-
-    @Override
-    public void putFile(final FileObject file)
-    {
-        final Map<FileName, FileObject> files = getOrCreateFilesystemCache(file.getFileSystem());
-
-        writeLock.lock();
-        try
-        {
-            files.put(file.getName(), file);
-        }
-        finally
-        {
-            writeLock.unlock();
-        }
-    }
-
-
-    @Override
-    public boolean putFileIfAbsent(final FileObject file)
-    {
-        final Map<FileName, FileObject> files = getOrCreateFilesystemCache(file.getFileSystem());
-
-        writeLock.lock();
-        try
-        {
-            final FileName name = file.getName();
-
-            if (files.containsKey(name))
-            {
-                return false;
-            }
-
-            files.put(name, file);
-            return true;
-        }
-        finally
-        {
-            writeLock.unlock();
-        }
-    }
-
-    @Override
-    public FileObject getFile(final FileSystem filesystem, final FileName name)
-    {
-        final Map<FileName, FileObject> files = getOrCreateFilesystemCache(filesystem);
-
-        readLock.lock();
-        try
-        {
-            return files.get(name);
-        }
-        finally
-        {
-            readLock.unlock();
-        }
-    }
-
-    @Override
-    public void clear(final FileSystem filesystem)
-    {
-        final Map<FileName, FileObject> files = getOrCreateFilesystemCache(filesystem);
-
-        writeLock.lock();
-        try
-        {
-            files.clear();
-
-            filesystemCache.remove(filesystem);
-        }
-        finally
-        {
-            writeLock.unlock();
-        }
-    }
-
-    protected Map<FileName, FileObject> getOrCreateFilesystemCache(final FileSystem filesystem)
-    {
-        Map<FileName, FileObject> files = filesystemCache.get(filesystem);
-        if (files == null)
-        {
-            files = new MyLRUMap(filesystem, lruSize);
-            filesystemCache.putIfAbsent(filesystem, files);
-        }
-        return files;
-    }
-
-    @Override
-    public void close()
-    {
-        super.close();
-        filesystemCache.clear();
-    }
-
-    @Override
-    public void removeFile(final FileSystem filesystem, final FileName name)
-    {
-        final Map<?, ?> files = getOrCreateFilesystemCache(filesystem);
-
-        writeLock.lock();
-        try
-        {
-            files.remove(name);
-
-            if (files.size() < 1)
-            {
-                filesystemCache.remove(filesystem);
-            }
-        }
-        finally
-        {
-            writeLock.unlock();
-        }
-    }
-
-    @Override
-    public void touchFile(final FileObject file)
-    {
-        // this moves the file back on top
-        getFile(file.getFileSystem(), file.getName());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/NullFilesCache.java b/trunk/core/src/main/java/org/apache/commons/vfs2/cache/NullFilesCache.java
deleted file mode 100644
index 8f3146e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/NullFilesCache.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.commons.vfs2.cache;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-
-/**
- * A {@link org.apache.commons.vfs2.FilesCache} implementation.
- * <p>
- * This implementation never ever caches a single file.
- * <p>
- * <b>Notice</b>: if you use resolveFile(uri) multiple times with the same path, the system will always
- * create a new instance. Changes on one instance of this file are not seen by the others.
- */
-public class NullFilesCache extends AbstractFilesCache
-{
-    @Override
-    public void putFile(final FileObject file)
-    {
-    }
-
-    @Override
-    public boolean putFileIfAbsent(final FileObject file)
-    {
-        return false;
-    }
-
-    @Override
-    public FileObject getFile(final FileSystem filesystem, final FileName name)
-    {
-        return null;
-    }
-
-    @Override
-    public void clear(final FileSystem filesystem)
-    {
-    }
-
-    @Override
-    public void removeFile(final FileSystem filesystem, final FileName name)
-    {
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/OnCallRefreshFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/cache/OnCallRefreshFileObject.java
deleted file mode 100644
index c7bed07..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/OnCallRefreshFileObject.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.commons.vfs2.cache;
-
-import java.util.List;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.impl.DecoratedFileObject;
-
-/**
- * This decorator refreshes the fileObject data on every call.
- */
-public class OnCallRefreshFileObject extends DecoratedFileObject
-{
-    public OnCallRefreshFileObject(final FileObject fileObject)
-    {
-        super(fileObject);
-    }
-
-    @Override
-    public void close() throws FileSystemException
-    {
-        refresh();
-        super.close();
-    }
-
-    @Override
-    public void copyFrom(final FileObject srcFile, final FileSelector selector) throws FileSystemException
-    {
-        refresh();
-        super.copyFrom(srcFile, selector);
-    }
-
-    @Override
-    public void createFile() throws FileSystemException
-    {
-        refresh();
-        super.createFile();
-    }
-
-    @Override
-    public void createFolder() throws FileSystemException
-    {
-        refresh();
-        super.createFolder();
-    }
-
-    @Override
-    public boolean delete() throws FileSystemException
-    {
-        refresh();
-        return super.delete();
-    }
-
-    @Override
-    public int delete(final FileSelector selector) throws FileSystemException
-    {
-        refresh();
-        return super.delete(selector);
-    }
-
-    @Override
-    public boolean exists() throws FileSystemException
-    {
-        refresh();
-        return super.exists();
-    }
-
-    @Override
-    public void findFiles(final FileSelector selector, final boolean depthwise, final List<FileObject> selected)
-        throws FileSystemException
-    {
-        refresh();
-        super.findFiles(selector, depthwise, selected);
-    }
-
-    @Override
-    public FileObject[] findFiles(final FileSelector selector) throws FileSystemException
-    {
-        refresh();
-        return super.findFiles(selector);
-    }
-
-    @Override
-    public FileObject getChild(final String name) throws FileSystemException
-    {
-        refresh();
-        return super.getChild(name);
-    }
-
-    @Override
-    public FileObject[] getChildren() throws FileSystemException
-    {
-        refresh();
-        return super.getChildren();
-    }
-
-    @Override
-    public FileContent getContent() throws FileSystemException
-    {
-        refresh();
-        return super.getContent();
-    }
-
-    @Override
-    public FileType getType() throws FileSystemException
-    {
-        refresh();
-        return super.getType();
-    }
-
-    @Override
-    public boolean isExecutable() throws FileSystemException
-    {
-        refresh();
-        return super.isExecutable();
-    }
-
-    @Override
-    public boolean isHidden() throws FileSystemException
-    {
-        refresh();
-        return super.isHidden();
-    }
-
-    @Override
-    public boolean isReadable() throws FileSystemException
-    {
-        refresh();
-        return super.isReadable();
-    }
-
-    @Override
-    public boolean isWriteable() throws FileSystemException
-    {
-        refresh();
-        return super.isWriteable();
-    }
-
-    @Override
-    public boolean setExecutable(final boolean executable, final boolean ownerOnly) throws FileSystemException
-    {
-        refresh();
-        return super.setExecutable(executable, ownerOnly);
-    }
-
-    @Override
-    public boolean setReadable(final boolean readable, final boolean ownerOnly) throws FileSystemException
-    {
-        refresh();
-        return super.setReadable(readable, ownerOnly);
-    }
-
-    @Override
-    public boolean setWritable(final boolean writable, final boolean ownerOnly) throws FileSystemException
-    {
-        refresh();
-        return super.setWritable(writable, ownerOnly);
-    }
-
-    @Override
-    public void moveTo(final FileObject destFile) throws FileSystemException
-    {
-        refresh();
-        super.moveTo(destFile);
-    }
-
-    @Override
-    public FileObject resolveFile(final String name, final NameScope scope) throws FileSystemException
-    {
-        refresh();
-        return super.resolveFile(name, scope);
-    }
-
-    @Override
-    public FileObject resolveFile(final String path) throws FileSystemException
-    {
-        refresh();
-        return super.resolveFile(path);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/SoftRefFilesCache.java b/trunk/core/src/main/java/org/apache/commons/vfs2/cache/SoftRefFilesCache.java
deleted file mode 100644
index 100abaf..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/SoftRefFilesCache.java
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.cache;
-
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.SoftReference;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.VfsLog;
-import org.apache.commons.vfs2.util.Messages;
-
-/**
- * This implementation caches every file as long as it is strongly reachable by
- * the java vm. As soon as the vm needs memory - every softly reachable file
- * will be discarded.
- *
- * @see SoftReference
- */
-public class SoftRefFilesCache extends AbstractFilesCache
-{
-    private static final int TIMEOUT = 1000;
-
-    private static final Log log = LogFactory.getLog(SoftRefFilesCache.class);
-
-    private final ConcurrentMap<FileSystem, Map<FileName, Reference<FileObject>>> fileSystemCache =
-          new ConcurrentHashMap<FileSystem, Map<FileName, Reference<FileObject>>>();
-    private final Map<Reference<FileObject>, FileSystemAndNameKey> refReverseMap =
-          new HashMap<Reference<FileObject>, FileSystemAndNameKey>(100);
-    private final ReferenceQueue<FileObject> refQueue = new ReferenceQueue<FileObject>();
-
-    private volatile SoftRefReleaseThread softRefReleaseThread = null; // @GuardedBy("lock")
-
-    private final Lock lock = new ReentrantLock();
-
-
-    /**
-     * This thread will listen on the ReferenceQueue and remove the entry in the
-     * filescache as soon as the vm removes the reference
-     */
-    private final class SoftRefReleaseThread extends Thread
-    {
-        private volatile boolean requestEnd; // used for inter-thread communication
-
-        private SoftRefReleaseThread()
-        {
-            setName(SoftRefReleaseThread.class.getName());
-            setDaemon(true);
-        }
-
-        @Override
-        public void run()
-        {
-            loop: while (!requestEnd && !Thread.currentThread().isInterrupted())
-            {
-                try
-                {
-                    final Reference<?> ref = refQueue.remove(TIMEOUT);
-                    if (ref == null)
-                    {
-                        continue;
-                    }
-
-                    lock.lock();
-                    try
-                    {
-                        final FileSystemAndNameKey key = refReverseMap.get(ref);
-
-                        if (key != null && removeFile(key))
-                        {
-                            close(key.getFileSystem());
-                        }
-                    }
-                    finally
-                    {
-                        lock.unlock();
-                    }
-                }
-                catch (final InterruptedException e)
-                {
-                    if (!requestEnd)
-                    {
-                        VfsLog.warn(getLogger(), log,
-                                    Messages.getString("vfs.impl/SoftRefReleaseThread-interrupt.info"));
-                    }
-                    break loop;
-                }
-            }
-        }
-    }
-
-    public SoftRefFilesCache()
-    {
-    }
-
-    private void startThread()
-    {
-        // Double Checked Locking is allowed when volatile
-        if (softRefReleaseThread != null)
-        {
-            return;
-        }
-
-        synchronized (lock)
-        {
-            if (softRefReleaseThread == null)
-            {
-                softRefReleaseThread = new SoftRefReleaseThread();
-                softRefReleaseThread.start();
-            }
-        }
-    }
-
-    private void endThread()
-    {
-        synchronized (lock)
-        {
-            final SoftRefReleaseThread thread = softRefReleaseThread;
-            softRefReleaseThread = null;
-            if (thread != null)
-            {
-                thread.requestEnd = true;
-                thread.interrupt();
-            }
-        }
-    }
-
-    @Override
-    public void putFile(final FileObject fileObject)
-    {
-        if (log.isDebugEnabled())
-        {
-            log.debug("putFile: " + this.getSafeName(fileObject));
-        }
-
-        final Map<FileName, Reference<FileObject>> files = getOrCreateFilesystemCache(fileObject.getFileSystem());
-
-        final Reference<FileObject> ref = createReference(fileObject, refQueue);
-        final FileSystemAndNameKey key = new FileSystemAndNameKey(fileObject.getFileSystem(), fileObject.getName());
-
-        lock.lock();
-        try
-        {
-            final Reference<FileObject> old = files.put(fileObject.getName(), ref);
-            if (old != null)
-            {
-                refReverseMap.remove(old);
-            }
-            refReverseMap.put(ref, key);
-        }
-        finally
-        {
-            lock.unlock();
-        }
-    }
-
-    private String getSafeName(final FileName fileName)
-    {
-        return fileName.getFriendlyURI();
-    }
-
-    private String getSafeName(final FileObject fileObject)
-    {
-        return this.getSafeName(fileObject.getName());
-    }
-
-    @Override
-    public boolean putFileIfAbsent(final FileObject fileObject)
-    {
-        if (log.isDebugEnabled())
-        {
-            log.debug("putFile: " + this.getSafeName(fileObject));
-        }
-
-        final Map<FileName, Reference<FileObject>> files = getOrCreateFilesystemCache(fileObject.getFileSystem());
-
-        final Reference<FileObject> ref = createReference(fileObject, refQueue);
-        final FileSystemAndNameKey key = new FileSystemAndNameKey(fileObject.getFileSystem(), fileObject.getName());
-
-        lock.lock();
-        try
-        {
-            if (files.containsKey(fileObject.getName()) && files.get(fileObject.getName()).get() != null)
-            {
-                return false;
-            }
-            final Reference<FileObject> old = files.put(fileObject.getName(), ref);
-            if (old != null)
-            {
-                refReverseMap.remove(old);
-            }
-            refReverseMap.put(ref, key);
-            return true;
-        }
-        finally
-        {
-            lock.unlock();
-        }
-    }
-
-    protected Reference<FileObject> createReference(final FileObject file, final ReferenceQueue<FileObject> refqueue)
-    {
-        return new SoftReference<FileObject>(file, refqueue);
-    }
-
-    @Override
-    public FileObject getFile(final FileSystem fileSystem, final FileName fileName)
-    {
-        final Map<FileName, Reference<FileObject>> files = getOrCreateFilesystemCache(fileSystem);
-
-        lock.lock();
-        try
-        {
-            final Reference<FileObject> ref = files.get(fileName);
-            if (ref == null)
-            {
-                return null;
-            }
-
-            final FileObject fo = ref.get();
-            if (fo == null)
-            {
-                removeFile(fileSystem, fileName);
-            }
-            return fo;
-        }
-        finally
-        {
-            lock.unlock();
-        }
-    }
-
-    @Override
-    public void clear(final FileSystem fileSystem)
-    {
-        final Map<FileName, Reference<FileObject>> files = getOrCreateFilesystemCache(fileSystem);
-
-        lock.lock();
-        try
-        {
-            final Iterator<FileSystemAndNameKey> iterKeys = refReverseMap.values().iterator();
-            while (iterKeys.hasNext())
-            {
-                final FileSystemAndNameKey key = iterKeys.next();
-                if (key.getFileSystem() == fileSystem)
-                {
-                    iterKeys.remove();
-                    files.remove(key.getFileName());
-                }
-            }
-
-            if (files.size() < 1)
-            {
-                close(fileSystem);
-            }
-        }
-        finally
-        {
-            lock.unlock();
-        }
-    }
-
-    /**
-     * Called while the lock is held
-     * @param fileSystem The file system to close.
-     */
-    private void close(final FileSystem fileSystem)
-    {
-        if (log.isDebugEnabled())
-        {
-            log.debug("close fs: " + fileSystem.getRootName());
-        }
-
-        fileSystemCache.remove(fileSystem);
-        if (fileSystemCache.size() < 1)
-        {
-            endThread();
-        }
-        /* This is not thread-safe as another thread might be opening the file system
-        ((DefaultFileSystemManager) getContext().getFileSystemManager())
-                ._closeFileSystem(filesystem);
-         */
-    }
-
-    @Override
-    public void close()
-    {
-        super.close();
-
-        endThread();
-
-        lock.lock();
-        try
-        {
-            fileSystemCache.clear();
-
-            refReverseMap.clear();
-        }
-        finally
-        {
-            lock.unlock();
-        }
-    }
-
-    @Override
-    public void removeFile(final FileSystem fileSystem, final FileName fileName)
-    {
-        if (removeFile(new FileSystemAndNameKey(fileSystem, fileName)))
-        {
-            close(fileSystem);
-        }
-    }
-
-    private boolean removeFile(final FileSystemAndNameKey key)
-    {
-        if (log.isDebugEnabled())
-        {
-            log.debug("removeFile: " + this.getSafeName(key.getFileName()));
-        }
-
-        final Map<?, ?> files = getOrCreateFilesystemCache(key.getFileSystem());
-
-        lock.lock();
-        try
-        {
-            final Object ref = files.remove(key.getFileName());
-            if (ref != null)
-            {
-                refReverseMap.remove(ref);
-            }
-
-            return files.size() < 1;
-        }
-        finally
-        {
-            lock.unlock();
-        }
-    }
-
-    protected Map<FileName, Reference<FileObject>> getOrCreateFilesystemCache(final FileSystem fileSystem)
-    {
-        if (fileSystemCache.size() < 1)
-        {
-            startThread();
-        }
-
-        Map<FileName, Reference<FileObject>> files;
-
-        do
-        {
-            files = fileSystemCache.get(fileSystem);
-            if (files != null)
-            {
-                break;
-            }
-            files = new HashMap<FileName, Reference<FileObject>>();
-        } while (fileSystemCache.putIfAbsent(fileSystem, files) == null);
-
-        return files;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/WeakRefFilesCache.java b/trunk/core/src/main/java/org/apache/commons/vfs2/cache/WeakRefFilesCache.java
deleted file mode 100644
index a0d40f2..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/WeakRefFilesCache.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.commons.vfs2.cache;
-
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.WeakReference;
-
-import org.apache.commons.vfs2.FileObject;
-
-/**
- * This implementation caches every file as long as it is strongly reachable by
- * the java vm. As soon as the object is no longer reachable it will be discarded.
- * In contrast to the SoftRefFilesCache this implementation might free resources faster
- * as it don't wait until a memory limitation.
- *
- * @see java.lang.ref.WeakReference
- */
-public class WeakRefFilesCache extends SoftRefFilesCache
-{
-    @Override
-    protected Reference<FileObject> createReference(final FileObject file, final ReferenceQueue<FileObject> refqueue)
-    {
-        return new WeakReference<FileObject>(file, refqueue);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/cache/package.html
deleted file mode 100644
index 55f796a..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/cache/package.html
+++ /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.
--->
-<body>
-<p>VFS File caching</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/events/AbstractFileChangeEvent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/events/AbstractFileChangeEvent.java
deleted file mode 100644
index ce4a9ae..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/events/AbstractFileChangeEvent.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.commons.vfs2.events;
-
-import org.apache.commons.vfs2.FileChangeEvent;
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileObject;
-
-/**
- * A change event that knows how to notify a listener.
- */
-public abstract class AbstractFileChangeEvent extends FileChangeEvent
-{
-    public AbstractFileChangeEvent(final FileObject file)
-    {
-        super(file);
-    }
-
-    public abstract void notify(final FileListener listener) throws Exception;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/events/ChangedEvent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/events/ChangedEvent.java
deleted file mode 100644
index 5be75f0..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/events/ChangedEvent.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.commons.vfs2.events;
-
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileObject;
-
-/**
- * File changed event.
- */
-public class ChangedEvent extends AbstractFileChangeEvent
-{
-    public ChangedEvent(final FileObject file)
-    {
-        super(file);
-    }
-
-    @Override
-    public void notify(final FileListener listener) throws Exception
-    {
-        listener.fileChanged(this);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/events/CreateEvent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/events/CreateEvent.java
deleted file mode 100644
index 26f35ec..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/events/CreateEvent.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.commons.vfs2.events;
-
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileObject;
-
-/**
- * File creation event.
- */
-public class CreateEvent extends AbstractFileChangeEvent
-{
-    public CreateEvent(final FileObject file)
-    {
-        super(file);
-    }
-
-    @Override
-    public void notify(final FileListener listener) throws Exception
-    {
-        listener.fileCreated(this);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/events/DeleteEvent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/events/DeleteEvent.java
deleted file mode 100644
index de4e775..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/events/DeleteEvent.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.commons.vfs2.events;
-
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileObject;
-
-/**
- * File deletion event.
- */
-public class DeleteEvent extends AbstractFileChangeEvent
-{
-    public DeleteEvent(final FileObject file)
-    {
-        super(file);
-    }
-
-    @Override
-    public void notify(final FileListener listener) throws Exception
-    {
-        listener.fileDeleted(this);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/events/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/events/package.html
deleted file mode 100644
index acbdf79..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/events/package.html
+++ /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.
--->
-<body>
-<p>VFS Events</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DecoratedFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DecoratedFileObject.java
deleted file mode 100644
index 07ef301..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DecoratedFileObject.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.impl;
-
-import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.operations.FileOperations;
-
-/**
- * Base class to build a fileObject decoration.
- */
-public class DecoratedFileObject implements FileObject
-{
-    private final FileObject decoratedFileObject;
-
-    public DecoratedFileObject(final FileObject decoratedFileObject)
-    {
-        super();
-        this.decoratedFileObject = decoratedFileObject;
-    }
-
-    @Override
-    public boolean canRenameTo(final FileObject newfile)
-    {
-        return decoratedFileObject.canRenameTo(newfile);
-    }
-
-    @Override
-    public void close() throws FileSystemException
-    {
-        decoratedFileObject.close();
-    }
-
-    @Override
-    public int compareTo(final FileObject fo)
-    {
-        return decoratedFileObject.compareTo(fo);
-    }
-
-    @Override
-    public void copyFrom(final FileObject srcFile, final FileSelector selector) throws FileSystemException
-    {
-        decoratedFileObject.copyFrom(srcFile, selector);
-    }
-
-    @Override
-    public void createFile() throws FileSystemException
-    {
-        decoratedFileObject.createFile();
-    }
-
-    @Override
-    public void createFolder() throws FileSystemException
-    {
-        decoratedFileObject.createFolder();
-    }
-
-    @Override
-    public boolean delete() throws FileSystemException
-    {
-        return decoratedFileObject.delete();
-    }
-
-    @Override
-    public int delete(final FileSelector selector) throws FileSystemException
-    {
-        return decoratedFileObject.delete(selector);
-    }
-
-    @Override
-    public int deleteAll() throws FileSystemException
-    {
-        return decoratedFileObject.deleteAll();
-    }
-
-    @Override
-    public boolean exists() throws FileSystemException
-    {
-        return decoratedFileObject.exists();
-    }
-
-    @Override
-    public FileObject[] findFiles(final FileSelector selector) throws FileSystemException
-    {
-        return decoratedFileObject.findFiles(selector);
-    }
-
-    @Override
-    public void findFiles(final FileSelector selector, final boolean depthwise, final List<FileObject> selected)
-        throws FileSystemException
-    {
-        decoratedFileObject.findFiles(selector, depthwise, selected);
-    }
-
-    @Override
-    public FileObject getChild(final String name) throws FileSystemException
-    {
-        return decoratedFileObject.getChild(name);
-    }
-
-    @Override
-    public FileObject[] getChildren() throws FileSystemException
-    {
-        return decoratedFileObject.getChildren();
-    }
-
-    @Override
-    public FileContent getContent() throws FileSystemException
-    {
-        return decoratedFileObject.getContent();
-    }
-
-    public FileObject getDecoratedFileObject()
-    {
-        return decoratedFileObject;
-    }
-
-    @Override
-    public FileOperations getFileOperations() throws FileSystemException
-    {
-        return decoratedFileObject.getFileOperations();
-    }
-
-    @Override
-    public FileSystem getFileSystem()
-    {
-        return decoratedFileObject.getFileSystem();
-    }
-
-    @Override
-    public String getPublicURIString()
-    {
-        return decoratedFileObject.getPublicURIString();
-    }
-
-    @Override
-    public FileName getName()
-    {
-        return decoratedFileObject.getName();
-    }
-
-    @Override
-    public FileObject getParent() throws FileSystemException
-    {
-        return decoratedFileObject.getParent();
-    }
-
-    @Override
-    public FileType getType() throws FileSystemException
-    {
-        return decoratedFileObject.getType();
-    }
-
-    @Override
-    public URL getURL() throws FileSystemException
-    {
-        return decoratedFileObject.getURL();
-    }
-
-    @Override
-    public boolean isAttached()
-    {
-        return decoratedFileObject.isAttached();
-    }
-
-    @Override
-    public boolean isContentOpen()
-    {
-        return decoratedFileObject.isContentOpen();
-    }
-
-    @Override
-    public boolean isExecutable() throws FileSystemException
-    {
-        return decoratedFileObject.isExecutable();
-    }
-
-    @Override
-    public boolean isFile() throws FileSystemException
-    {
-        return decoratedFileObject.isFile();
-    }
-
-    @Override
-    public boolean isFolder() throws FileSystemException
-    {
-        return decoratedFileObject.isFolder();
-    }
-
-    @Override
-    public boolean isHidden() throws FileSystemException
-    {
-        return decoratedFileObject.isHidden();
-    }
-
-    @Override
-    public boolean isReadable() throws FileSystemException
-    {
-        return decoratedFileObject.isReadable();
-    }
-
-    @Override
-    public boolean isWriteable() throws FileSystemException
-    {
-        return decoratedFileObject.isWriteable();
-    }
-
-    @Override
-    public Iterator<FileObject> iterator()
-    {
-        return decoratedFileObject.iterator();
-    }
-
-    @Override
-    public void moveTo(final FileObject destFile) throws FileSystemException
-    {
-        decoratedFileObject.moveTo(destFile);
-    }
-
-    @Override
-    public void refresh() throws FileSystemException
-    {
-        decoratedFileObject.refresh();
-    }
-
-    @Override
-    public FileObject resolveFile(final String path) throws FileSystemException
-    {
-        return decoratedFileObject.resolveFile(path);
-    }
-
-    @Override
-    public FileObject resolveFile(final String name, final NameScope scope) throws FileSystemException
-    {
-        return decoratedFileObject.resolveFile(name, scope);
-    }
-
-    @Override
-    public boolean setExecutable(final boolean executable, final boolean ownerOnly) throws FileSystemException
-    {
-        return decoratedFileObject.setExecutable(executable, ownerOnly);
-    }
-
-    @Override
-    public boolean setReadable(final boolean readable, final boolean ownerOnly) throws FileSystemException
-    {
-        return decoratedFileObject.setReadable(readable, ownerOnly);
-    }
-
-    @Override
-    public boolean setWritable(final boolean writable, final boolean ownerOnly) throws FileSystemException
-    {
-        return decoratedFileObject.setWritable(writable, ownerOnly);
-    }
-
-    @Override
-    public String toString()
-    {
-        return decoratedFileObject.toString();
-    }
-
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileContentInfo.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileContentInfo.java
deleted file mode 100644
index 7b5aded..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileContentInfo.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.commons.vfs2.impl;
-
-import org.apache.commons.vfs2.FileContentInfo;
-
-/**
- * The default file content information.
- */
-public class DefaultFileContentInfo implements FileContentInfo
-{
-    private final String contentType;
-    private final String contentEncoding;
-
-    public DefaultFileContentInfo(final String contentType, final String contentEncoding)
-    {
-        this.contentType = contentType;
-        this.contentEncoding = contentEncoding;
-    }
-
-    @Override
-    public String getContentType()
-    {
-        return contentType;
-    }
-
-    @Override
-    public String getContentEncoding()
-    {
-        return contentEncoding;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
deleted file mode 100644
index ad4d22b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileMonitor.java
+++ /dev/null
@@ -1,677 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Stack;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileMonitor;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-
-/**
- * A polling {@link FileMonitor} implementation.
- * <p>
- * The DefaultFileMonitor is a Thread based polling file system monitor with a 1
- * second delay.
- *
- * <h2>Design:</h2>
- *
- * There is a Map of monitors known as FileMonitorAgents. With the thread running,
- * each FileMonitorAgent object is asked to "check" on the file it is
- * responsible for. To do this check, the cache is cleared.
- * <ul>
- * <li>If the file existed before the refresh and it no longer exists, a delete
- * event is fired.</li>
- * <li>If the file existed before the refresh and it still exists, check the
- * last modified timestamp to see if that has changed.</li>
- * <li>If it has, fire a change event.</li>
- * </ul>
- * With each file delete, the FileMonitorAgent of the parent is asked to
- * re-build its
- * list of children, so that they can be accurately checked when there are new
- * children.
- * <p>
- * New files are detected during each "check" as each file does a check for new
- * children.
- * If new children are found, create events are fired recursively if recursive
- * descent is enabled.
- * <p>
- * For performance reasons, added a delay that increases as the number of files
- * monitored
- * increases. The default is a delay of 1 second for every 1000 files processed.
- *
- * <h2>Example usage:</h2><pre>
- * FileSystemManager fsManager = VFS.getManager();
- * FileObject listendir = fsManager.resolveFile("/home/username/monitored/");
- *
- * DefaultFileMonitor fm = new DefaultFileMonitor(new CustomFileListener());
- * fm.setRecursive(true);
- * fm.addFile(listendir);
- * fm.start();</pre>
- * <i>(where CustomFileListener is a class that implements the FileListener
- * interface.)</i>
- */
-public class DefaultFileMonitor implements Runnable, FileMonitor
-{
-    private static final Log LOG = LogFactory.getLog(DefaultFileMonitor.class);
-
-    private static final long DEFAULT_DELAY = 1000;
-
-    private static final int DEFAULT_MAX_FILES = 1000;
-
-    /**
-     * Map from FileName to FileObject being monitored.
-     */
-    private final Map<FileName, FileMonitorAgent> monitorMap = new HashMap<FileName, FileMonitorAgent>();
-
-    /**
-     * The low priority thread used for checking the files being monitored.
-     */
-    private Thread monitorThread;
-
-    /**
-     * File objects to be removed from the monitor map.
-     */
-    private final Stack<FileObject> deleteStack = new Stack<FileObject>();
-
-    /**
-     * File objects to be added to the monitor map.
-     */
-    private final Stack<FileObject> addStack = new Stack<FileObject>();
-
-    /**
-     * A flag used to determine if the monitor thread should be running.
-     */
-    private volatile boolean shouldRun = true; // used for inter-thread communication
-
-    /**
-     * A flag used to determine if adding files to be monitored should be recursive.
-     */
-    private boolean recursive;
-
-    /**
-     * Set the delay between checks
-     */
-    private long delay = DEFAULT_DELAY;
-
-    /**
-     * Set the number of files to check until a delay will be inserted
-     */
-    private int checksPerRun = DEFAULT_MAX_FILES;
-
-    /**
-     * A listener object that if set, is notified on file creation and deletion.
-     */
-    private final FileListener listener;
-
-    public DefaultFileMonitor(final FileListener listener)
-    {
-        this.listener = listener;
-    }
-
-    /**
-     * Access method to get the recursive setting when adding files for monitoring.
-     * @return true if monitoring is enabled for children.
-     */
-    public boolean isRecursive()
-    {
-        return this.recursive;
-    }
-
-    /**
-     * Access method to set the recursive setting when adding files for monitoring.
-     * @param newRecursive true if monitoring should be enabled for children.
-     */
-    public void setRecursive(final boolean newRecursive)
-    {
-        this.recursive = newRecursive;
-    }
-
-    /**
-     * Access method to get the current FileListener object notified when there
-     * are changes with the files added.
-     * @return The FileListener.
-     */
-    FileListener getFileListener()
-    {
-        return this.listener;
-    }
-
-    /**
-     * Adds a file to be monitored.
-     * @param file The FileObject to monitor.
-     */
-    @Override
-    public void addFile(final FileObject file)
-    {
-        doAddFile(file);
-        try
-        {
-            // add all direct children too
-            if (file.getType().hasChildren())
-            {
-                // Traverse the children
-                final FileObject[] children = file.getChildren();
-                for (final FileObject element : children)
-                {
-                    doAddFile(element);
-                }
-            }
-        }
-        catch (final FileSystemException fse)
-        {
-            LOG.error(fse.getLocalizedMessage(), fse);
-        }
-    }
-
-    /**
-     * Adds a file to be monitored.
-     * @param file The FileObject to add.
-     */
-    private void doAddFile(final FileObject file)
-    {
-        synchronized (this.monitorMap)
-        {
-            if (this.monitorMap.get(file.getName()) == null)
-            {
-                this.monitorMap.put(file.getName(), new FileMonitorAgent(this,
-                    file));
-
-                try
-                {
-                    if (this.listener != null)
-                    {
-                        file.getFileSystem().addListener(file, this.listener);
-                    }
-
-                    if (file.getType().hasChildren() && this.recursive)
-                    {
-                        // Traverse the children
-                        final FileObject[] children = file.getChildren();
-                        for (final FileObject element : children)
-                        {
-                            this.addFile(element); // Add depth first
-                        }
-                    }
-
-                }
-                catch (final FileSystemException fse)
-                {
-                    LOG.error(fse.getLocalizedMessage(), fse);
-                }
-
-            }
-        }
-    }
-
-    /**
-     * Removes a file from being monitored.
-     * @param file The FileObject to remove from monitoring.
-     */
-    @Override
-    public void removeFile(final FileObject file)
-    {
-        synchronized (this.monitorMap)
-        {
-            final FileName fn = file.getName();
-            if (this.monitorMap.get(fn) != null)
-            {
-                FileObject parent;
-                try
-                {
-                    parent = file.getParent();
-                }
-                catch (final FileSystemException fse)
-                {
-                    parent = null;
-                }
-
-                this.monitorMap.remove(fn);
-
-                if (parent != null)
-                { // Not the root
-                    final FileMonitorAgent parentAgent =
-                        this.monitorMap.get(parent.getName());
-                    if (parentAgent != null)
-                    {
-                        parentAgent.resetChildrenList();
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Queues a file for removal from being monitored.
-     * @param file The FileObject to be removed from being monitored.
-     */
-    protected void queueRemoveFile(final FileObject file)
-    {
-        this.deleteStack.push(file);
-    }
-
-    /**
-     * Get the delay between runs.
-     * @return The delay period.
-     */
-    public long getDelay()
-    {
-        return delay;
-    }
-
-    /**
-     * Set the delay between runs.
-     * @param delay The delay period.
-     */
-    public void setDelay(final long delay)
-    {
-        if (delay > 0)
-        {
-            this.delay = delay;
-        }
-        else
-        {
-            this.delay = DEFAULT_DELAY;
-        }
-    }
-
-    /**
-     * get the number of files to check per run.
-     * @return The number of files to check per iteration.
-     */
-    public int getChecksPerRun()
-    {
-        return checksPerRun;
-    }
-
-    /**
-     * set the number of files to check per run.
-     * a additional delay will be added if there are more files to check
-     *
-     * @param checksPerRun a value less than 1 will disable this feature
-     */
-    public void setChecksPerRun(final int checksPerRun)
-    {
-        this.checksPerRun = checksPerRun;
-    }
-
-    /**
-     * Queues a file for addition to be monitored.
-     * @param file The FileObject to add.
-     */
-    protected void queueAddFile(final FileObject file)
-    {
-        this.addStack.push(file);
-    }
-
-    /**
-     * Starts monitoring the files that have been added.
-     */
-    public void start()
-    {
-        if (this.monitorThread == null)
-        {
-            this.monitorThread = new Thread(this);
-            this.monitorThread.setDaemon(true);
-            this.monitorThread.setPriority(Thread.MIN_PRIORITY);
-        }
-        this.monitorThread.start();
-    }
-
-    /**
-     * Stops monitoring the files that have been added.
-     */
-    public void stop()
-    {
-        this.shouldRun = false;
-    }
-
-    /**
-     * Asks the agent for each file being monitored to check its file for changes.
-     */
-    @Override
-    public void run()
-    {
-        mainloop:
-        while (!monitorThread.isInterrupted() && this.shouldRun)
-        {
-            // For each entry in the map
-            Object[] fileNames;
-            synchronized (this.monitorMap)
-            {
-                fileNames = this.monitorMap.keySet().toArray();
-            }
-            for (int iterFileNames = 0; iterFileNames < fileNames.length;
-                 iterFileNames++)
-            {
-                final FileName fileName = (FileName) fileNames[iterFileNames];
-                FileMonitorAgent agent;
-                synchronized (this.monitorMap)
-                {
-                    agent = this.monitorMap.get(fileName);
-                }
-                if (agent != null)
-                {
-                    agent.check();
-                }
-
-                if (getChecksPerRun() > 0 && (iterFileNames + 1) % getChecksPerRun() == 0)
-                {
-                    try
-                    {
-                        Thread.sleep(getDelay());
-                    }
-                    catch (final InterruptedException e)
-                    {
-                        // Woke up.
-                    }
-                }
-
-                if (monitorThread.isInterrupted() || !this.shouldRun)
-                {
-                    continue mainloop;
-                }
-            }
-
-            while (!this.addStack.empty())
-            {
-                this.addFile(this.addStack.pop());
-            }
-
-            while (!this.deleteStack.empty())
-            {
-                this.removeFile(this.deleteStack.pop());
-            }
-
-            try
-            {
-                Thread.sleep(getDelay());
-            }
-            catch (final InterruptedException e)
-            {
-                continue;
-            }
-        }
-
-        this.shouldRun = true;
-    }
-
-    /**
-     * File monitor agent.
-     */
-    private static final class FileMonitorAgent
-    {
-        private final FileObject file;
-        private final DefaultFileMonitor fm;
-
-        private boolean exists;
-        private long timestamp;
-        private Map<FileName, Object> children;
-
-        private FileMonitorAgent(final DefaultFileMonitor fm, final FileObject file)
-        {
-            this.fm = fm;
-            this.file = file;
-
-            this.refresh();
-            this.resetChildrenList();
-
-            try
-            {
-                this.exists = this.file.exists();
-            }
-            catch (final FileSystemException fse)
-            {
-                this.exists = false;
-                this.timestamp = -1;
-            }
-
-            if (this.exists)
-            {
-                try
-                {
-                    this.timestamp = this.file.getContent().getLastModifiedTime();
-                }
-                catch (final FileSystemException fse)
-                {
-                    this.timestamp = -1;
-                }
-            }
-        }
-
-        private void resetChildrenList()
-        {
-            try
-            {
-                if (this.file.getType().hasChildren())
-                {
-                    this.children = new HashMap<FileName, Object>();
-                    final FileObject[] childrenList = this.file.getChildren();
-                    for (final FileObject element : childrenList)
-                    {
-                        this.children.put(element.getName(), new
-                            Object()); // null?
-                    }
-                }
-            }
-            catch (final FileSystemException fse)
-            {
-                this.children = null;
-            }
-        }
-
-
-        /**
-         * Clear the cache and re-request the file object
-         */
-        private void refresh()
-        {
-            try
-            {
-                this.file.refresh();
-            }
-            catch (final FileSystemException fse)
-            {
-                LOG.error(fse.getLocalizedMessage(), fse);
-            }
-        }
-
-
-        /**
-         * Recursively fires create events for all children if recursive descent is
-         * enabled. Otherwise the create event is only fired for the initial
-         * FileObject.
-         * @param child The child to add.
-         */
-        private void fireAllCreate(final FileObject child)
-        {
-            // Add listener so that it can be triggered
-            if (this.fm.getFileListener() != null)
-            {
-                child.getFileSystem().addListener(child, this.fm.getFileListener());
-            }
-
-            ((AbstractFileSystem) child.getFileSystem()).fireFileCreated(child);
-
-            // Remove it because a listener is added in the queueAddFile
-            if (this.fm.getFileListener() != null)
-            {
-                child.getFileSystem().removeListener(child,
-                    this.fm.getFileListener());
-            }
-
-            this.fm.queueAddFile(child); // Add
-
-            try
-            {
-                if (this.fm.isRecursive() && child.getType().hasChildren())
-                {
-                    final FileObject[] newChildren = child.getChildren();
-                    for (final FileObject element : newChildren)
-                    {
-                        fireAllCreate(element);
-                    }
-                }
-            }
-            catch (final FileSystemException fse)
-            {
-                LOG.error(fse.getLocalizedMessage(), fse);
-            }
-        }
-
-        /**
-         * Only checks for new children. If children are removed, they'll
-         * eventually be checked.
-         */
-        private void checkForNewChildren()
-        {
-            try
-            {
-                if (this.file.getType().hasChildren())
-                {
-                    final FileObject[] newChildren = this.file.getChildren();
-                    if (this.children != null)
-                    {
-                        // See which new children are not listed in the current children map.
-                        final Map<FileName, Object> newChildrenMap = new HashMap<FileName, Object>();
-                        final Stack<FileObject> missingChildren = new Stack<FileObject>();
-
-                        for (int i = 0; i < newChildren.length; i++)
-                        {
-                            newChildrenMap.put(newChildren[i].getName(), new
-                                Object()); // null ?
-                            // If the child's not there
-                            if
-                                (!this.children.containsKey(newChildren[i].getName()))
-                            {
-                                missingChildren.push(newChildren[i]);
-                            }
-                        }
-
-                        this.children = newChildrenMap;
-
-                        // If there were missing children
-                        if (!missingChildren.empty())
-                        {
-
-                            while (!missingChildren.empty())
-                            {
-                                final FileObject child = missingChildren.pop();
-                                this.fireAllCreate(child);
-                            }
-                        }
-
-                    }
-                    else
-                    {
-                        // First set of children - Break out the cigars
-                        if (newChildren.length > 0)
-                        {
-                            this.children = new HashMap<FileName, Object>();
-                        }
-                        for (final FileObject element : newChildren)
-                        {
-                            this.children.put(element.getName(), new
-                                Object()); // null?
-                            this.fireAllCreate(element);
-                        }
-                    }
-                }
-            }
-            catch (final FileSystemException fse)
-            {
-                LOG.error(fse.getLocalizedMessage(), fse);
-            }
-        }
-
-        private void check()
-        {
-            this.refresh();
-
-            try
-            {
-                // If the file existed and now doesn't
-                if (this.exists && !this.file.exists())
-                {
-                    this.exists = this.file.exists();
-                    this.timestamp = -1;
-
-                    // Fire delete event
-
-                    ((AbstractFileSystem)
-                        this.file.getFileSystem()).fireFileDeleted(this.file);
-
-                    // Remove listener in case file is re-created. Don't want to fire twice.
-                    if (this.fm.getFileListener() != null)
-                    {
-                        this.file.getFileSystem().removeListener(this.file,
-                            this.fm.getFileListener());
-                    }
-
-                    // Remove from map
-                    this.fm.queueRemoveFile(this.file);
-                }
-                else if (this.exists && this.file.exists())
-                {
-
-                    // Check the timestamp to see if it has been modified
-                    if (this.timestamp != this.file.getContent().getLastModifiedTime())
-                    {
-                        this.timestamp = this.file.getContent().getLastModifiedTime();
-                        // Fire change event
-
-                        // Don't fire if it's a folder because new file children
-                        // and deleted files in a folder have their own event triggered.
-                        if (!this.file.getType().hasChildren())
-                        {
-                            ((AbstractFileSystem)
-                                this.file.getFileSystem()).fireFileChanged(this.file);
-                        }
-                    }
-
-                }
-                else if (!this.exists && this.file.exists())
-                {
-                    this.exists = this.file.exists();
-                    this.timestamp = this.file.getContent().getLastModifiedTime();
-                    // Don't fire if it's a folder because new file children
-                    // and deleted files in a folder have their own event triggered.
-                    if (!this.file.getType().hasChildren())
-                    {
-                        ((AbstractFileSystem)
-                                this.file.getFileSystem()).fireFileCreated(this.file);
-                    }
-                }
-
-                this.checkForNewChildren();
-
-            }
-            catch (final FileSystemException fse)
-            {
-                LOG.error(fse.getLocalizedMessage(), fse);
-            }
-        }
-
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileReplicator.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileReplicator.java
deleted file mode 100644
index 819981b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileReplicator.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.impl;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Random;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.VfsLog;
-import org.apache.commons.vfs2.provider.AbstractVfsComponent;
-import org.apache.commons.vfs2.provider.FileReplicator;
-import org.apache.commons.vfs2.provider.TemporaryFileStore;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.util.Messages;
-
-/**
- * A simple file replicator and temporary file store.
- */
-public class DefaultFileReplicator
-    extends AbstractVfsComponent
-    implements FileReplicator, TemporaryFileStore
-{
-    private static final Log log = LogFactory.getLog(DefaultFileReplicator.class);
-    private static final int MASK = 0xffff;
-
-    private static final Random random = new Random();
-
-    private static final char[] TMP_RESERVED_CHARS = new char[]
-        {
-            '?', '/', '\\', ' ', '&', '"', '\'', '*', '#', ';', ':', '<', '>', '|'
-        };
-
-    private final ArrayList<Object> copies = new ArrayList<Object>();
-    private long filecount;
-    private File tempDir;
-    private boolean tempDirMessageLogged;
-
-    public DefaultFileReplicator()
-    {
-    }
-
-    /**
-     * Constructor to set the location of the temporary directory.
-     *
-     * @param tempDir The temporary directory.
-     */
-    public DefaultFileReplicator(final File tempDir)
-    {
-        this.tempDir = tempDir;
-    }
-
-    protected void addFile(final Object file)
-    {
-        synchronized (copies)
-        {
-            copies.add(file);
-        }
-    }
-
-    /**
-     * Allocates a new temporary file.
-     *
-     * @param baseName the base file name.
-     * @return The created File.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public File allocateFile(final String baseName) throws FileSystemException
-    {
-        // Create a unique-ish file name
-        final String basename = createFilename(baseName);
-        synchronized (this)
-        {
-            filecount++;
-        }
-
-        return createAndAddFile(tempDir, basename);
-    }
-
-    /**
-     * Closes the replicator, deleting all temporary files.
-     */
-    @Override
-    public void close()
-    {
-        // Delete the temporary files
-        synchronized (copies)
-        {
-            while (copies.size() > 0)
-            {
-                final File file = (File) removeFile();
-                deleteFile(file);
-            }
-        }
-
-        // Clean up the temp directory, if it is empty
-        if (tempDir != null && tempDir.exists() && tempDir.list().length == 0)
-        {
-            tempDir.delete();
-            tempDir = null;
-        }
-    }
-
-    protected File createAndAddFile(final File parent, final String basename) throws FileSystemException
-    {
-        final File file = createFile(tempDir, basename);
-
-        // Keep track to delete later
-        addFile(file);
-
-        return file;
-    }
-
-    /**
-     * Create the temporary file.
-     *
-     * @param parent The file to use as the parent of the file being created.
-     * @param name The name of the file to create.
-     * @return The File that was created.
-     * @throws FileSystemException if an error occurs creating the file.
-     */
-    protected File createFile(final File parent, final String name) throws FileSystemException
-    {
-        return new File(parent, UriParser.decode(name));
-    }
-
-    /**
-     * Create the temporary file name.
-     *
-     * @param baseName The base to prepend to the file name being created.
-     * @return the name of the File.
-     */
-    protected String createFilename(final String baseName)
-    {
-        // BUG29007
-        // return baseName + "_" + getFilecount() + ".tmp";
-
-        // imario@apache.org: BUG34976 get rid of maybe reserved and dangerous characters
-        // e.g. to allow replication of http://hostname.org/fileservlet?file=abc.txt
-        final String safeBasename = UriParser.encode(baseName, TMP_RESERVED_CHARS).replace('%', '_');
-        return "tmp_" + getFilecount() + "_" + safeBasename;
-    }
-
-    /**
-     * Physically deletes the file from the filesystem.
-     *
-     * @param file The File to delete.
-     */
-    protected void deleteFile(final File file)
-    {
-        try
-        {
-            final FileObject fileObject = getContext().toFileObject(file);
-            fileObject.deleteAll();
-        }
-        catch (final FileSystemException e)
-        {
-            final String message = Messages.getString("vfs.impl/delete-temp.warn", file.getName());
-            VfsLog.warn(getLogger(), log, message, e);
-        }
-    }
-
-    protected long getFilecount()
-    {
-        return filecount;
-    }
-
-    /**
-     * Initializes this component.
-     *
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void init() throws FileSystemException
-    {
-        if (tempDir == null)
-        {
-            final String baseTmpDir = System.getProperty("java.io.tmpdir");
-
-            tempDir = new File(baseTmpDir, "vfs_cache").getAbsoluteFile();
-        }
-
-        filecount = random.nextInt() & MASK;
-
-        if (!tempDirMessageLogged)
-        {
-            final String message = Messages.getString("vfs.impl/temp-dir.info", tempDir);
-            VfsLog.info(getLogger(), log, message);
-
-            tempDirMessageLogged = true;
-        }
-    }
-
-    /**
-     * Removes a file from the copies list. Will be used for cleanup.
-     * <p>
-     * Notice: The system awaits that the returning object can be cast to a {@link java.io.File}.
-     *
-     * @return the File that was removed.
-     */
-    protected Object removeFile()
-    {
-        synchronized (copies)
-        {
-            return copies.remove(0);
-        }
-    }
-
-    /**
-     * Removes a instance from the list of copies.
-     *
-     * @param file The File to remove.
-     */
-    protected void removeFile(final Object file)
-    {
-        synchronized (copies)
-        {
-            copies.remove(file);
-        }
-    }
-
-    /**
-     * Creates a local copy of the file, and all its descendants.
-     *
-     * @param srcFile The file to copy.
-     * @param selector The FileSelector.
-     * @return the created File.
-     * @throws FileSystemException if an error occurs copying the file.
-     */
-    @Override
-    public File replicateFile(final FileObject srcFile,
-                              final FileSelector selector)
-        throws FileSystemException
-    {
-        final String basename = srcFile.getName().getBaseName();
-        final File file = allocateFile(basename);
-
-        // Copy from the source file
-        final FileObject destFile = getContext().toFileObject(file);
-        destFile.copyFrom(srcFile, selector);
-
-        return file;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileSystemConfigBuilder.java
deleted file mode 100644
index 0ee7950..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileSystemConfigBuilder.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.commons.vfs2.impl;
-
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticator;
-
-/**
- * Default options usable for all file systems.
- */
-public class DefaultFileSystemConfigBuilder extends FileSystemConfigBuilder
-{
-    /** The default FileSystemConfigBuilder */
-    private static final DefaultFileSystemConfigBuilder BUILDER = new DefaultFileSystemConfigBuilder();
-
-    /**
-     * Gets the singleton builder.
-     *
-     * @return the singleton builder.
-     */
-    public static DefaultFileSystemConfigBuilder getInstance()
-    {
-        return BUILDER;
-    }
-
-    /**
-     * Sets the user authenticator to get authentication informations.
-     * @param opts The FileSystemOptions.
-     * @param userAuthenticator The UserAuthenticator.
-     * @throws FileSystemException if an error occurs setting the UserAuthenticator.
-     */
-    public void setUserAuthenticator(final FileSystemOptions opts, final UserAuthenticator userAuthenticator)
-            throws FileSystemException
-    {
-        setParam(opts, "userAuthenticator", userAuthenticator);
-    }
-
-    /**
-     * @see #setUserAuthenticator
-     * @param opts The FileSystemOptions.
-     * @return The UserAuthenticator.
-     */
-    public UserAuthenticator getUserAuthenticator(final FileSystemOptions opts)
-    {
-        return (UserAuthenticator) getParam(opts, "userAuthenticator");
-    }
-
-    /**
-     * Dummy class that implements FileSystem.
-     */
-    abstract static class DefaultFileSystem implements FileSystem
-    {
-    }
-
-    @Override
-    protected Class<? extends FileSystem> getConfigClass()
-    {
-        return DefaultFileSystem.class;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileSystemManager.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileSystemManager.java
deleted file mode 100644
index 220a4ec..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultFileSystemManager.java
+++ /dev/null
@@ -1,1341 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.impl;
-
-import java.io.File;
-import java.lang.reflect.Constructor;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLStreamHandler;
-import java.net.URLStreamHandlerFactory;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.CacheStrategy;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.FilesCache;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.VFS;
-import org.apache.commons.vfs2.cache.SoftRefFilesCache;
-import org.apache.commons.vfs2.operations.FileOperationProvider;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileProvider;
-import org.apache.commons.vfs2.provider.DefaultURLStreamHandler;
-import org.apache.commons.vfs2.provider.FileProvider;
-import org.apache.commons.vfs2.provider.FileReplicator;
-import org.apache.commons.vfs2.provider.LocalFileProvider;
-import org.apache.commons.vfs2.provider.TemporaryFileStore;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.provider.VfsComponent;
-
-/**
- * The default file system manager implementation.
- */
-public class DefaultFileSystemManager implements FileSystemManager
-{
-    /**
-     * Mapping from URI scheme to FileProvider.
-     */
-    private final Map<String, FileProvider> providers = new HashMap<String, FileProvider>();
-
-    /**
-     * All components used by this manager.
-     */
-    private final ArrayList<Object> components = new ArrayList<Object>();
-
-    /**
-     * The context to pass to providers.
-     */
-    private final DefaultVfsComponentContext context = new DefaultVfsComponentContext(this);
-
-    /**
-     * Operations providers added to this manager.
-     */
-    private final Map<String, List<FileOperationProvider>> operationProviders =
-            new HashMap<String, List<FileOperationProvider>>();
-
-    /**
-     * Mappings of file types.
-     */
-    private final FileTypeMap typeMap = new FileTypeMap();
-
-
-    /**
-     * The provider for local files.
-     */
-    private LocalFileProvider localFileProvider;
-
-    /**
-     * The default provider.
-     */
-    private FileProvider defaultProvider;
-
-    /**
-     * The file replicator to use.
-     */
-    private FileReplicator fileReplicator;
-
-    /**
-     * The base file to use for relative URI.
-     */
-    private FileObject baseFile;
-
-    /**
-     * The files cache
-     */
-    private FilesCache filesCache;
-
-    /**
-     * The cache strategy
-     */
-    private CacheStrategy fileCacheStrategy;
-
-    /**
-     * Class which decorates all returned fileObjects
-     */
-    private Class<?> fileObjectDecorator;
-    /**
-     * Reflection constructor extracted from {@link #fileObjectDecorator}
-     */
-    private Constructor<?> fileObjectDecoratorConst;
-
-    /**
-     * The class to use to determine the content-type (mime-type)
-     */
-    private FileContentInfoFactory fileContentInfoFactory;
-
-    /**
-     * The logger to use. Default implementation.
-     */
-    private Log log = LogFactory.getLog(getClass());
-
-    /**
-     * The temporary file store to use.
-     */
-    private TemporaryFileStore tempFileStore;
-
-    /**
-     * The virtual file provider.
-     */
-    private VirtualFileProvider vfsProvider;
-
-    /**
-     * Flag, if manager is initialized (after init() and before close()).
-     */
-    private boolean init;
-
-
-    /**
-     * Returns the logger used by this manager.
-     * @return the Logger.
-     */
-    protected Log getLogger()
-    {
-        return log;
-    }
-
-    /**
-     * Registers a file system provider.
-     * <p>
-     * The manager takes care of all lifecycle management.
-     * A provider may be registered multiple times.
-     * The first {@link LocalFileProvider} added will be
-     * remembered for {@link #getLocalFileProvider()}.
-     *
-     * @param urlScheme
-     *            The scheme the provider will handle.
-     * @param provider
-     *            The provider.
-     * @throws FileSystemException if an error occurs adding the provider.
-     */
-    public void addProvider(final String urlScheme, final FileProvider provider)
-            throws FileSystemException
-    {
-        addProvider(new String[] {urlScheme}, provider);
-    }
-
-    /**
-     * Registers a file system provider.
-     * <p>
-     * The manager takes care of all lifecycle management.
-     * A provider may be registered multiple times.
-     * The first {@link LocalFileProvider} added will be
-     * remembered for {@link #getLocalFileProvider()}.
-     *
-     * @param urlSchemes
-     *            The schemes the provider will handle.
-     * @param provider
-     *            The provider.
-     * @throws FileSystemException if an error occurs adding the provider.
-     */
-    public void addProvider(final String[] urlSchemes,
-            final FileProvider provider) throws FileSystemException
-    {
-        // fail duplicate schemes
-        for (final String scheme : urlSchemes)
-        {
-            if (providers.containsKey(scheme))
-            {
-                throw new FileSystemException(
-                        "vfs.impl/multiple-providers-for-scheme.error", scheme);
-            }
-        }
-
-        // Contextualise the component (if not already)
-        setupComponent(provider);
-
-        // Add to map
-        for (final String scheme : urlSchemes)
-        {
-            providers.put(scheme, provider);
-        }
-
-        if (provider instanceof LocalFileProvider && localFileProvider == null)
-        {
-            localFileProvider = (LocalFileProvider) provider;
-        }
-    }
-
-    /**
-     * Returns true if this manager has a provider for a particular scheme.
-     *
-     * @param scheme The scheme to check.
-     * @return true if a provider is configured for this scheme, false otherwise.
-     */
-    @Override
-    public boolean hasProvider(final String scheme)
-    {
-        return providers.containsKey(scheme);
-    }
-
-    /**
-     * Adds an filename extension mapping.
-     *
-     * @param extension The file name extension.
-     * @param scheme The scheme to use for files with this extension.
-     */
-    public void addExtensionMap(final String extension, final String scheme)
-    {
-        typeMap.addExtension(extension, scheme);
-    }
-
-    /**
-     * Adds a mime type mapping.
-     *
-     * @param mimeType The mime type.
-     * @param scheme The scheme to use for files with this mime type.
-     */
-    public void addMimeTypeMap(final String mimeType, final String scheme)
-    {
-        typeMap.addMimeType(mimeType, scheme);
-    }
-
-    /**
-     * Sets the default provider. This is the provider that will handle URI with
-     * unknown schemes. The manager takes care of all lifecycle management.
-     * @param provider The FileProvider.
-     * @throws FileSystemException if an error occurs setting the provider.
-     */
-    public void setDefaultProvider(final FileProvider provider)
-            throws FileSystemException
-    {
-        setupComponent(provider);
-        defaultProvider = provider;
-    }
-
-    /**
-     * Returns the filesCache implementation used to cache files.
-     * @return The FilesCache.
-     */
-    @Override
-    public FilesCache getFilesCache()
-    {
-        return filesCache;
-    }
-
-    /**
-     * Sets the filesCache implementation used to cache files.
-     * <p>
-     * Can only be set before the FileSystemManager is initialized.
-     * <p>
-     * The manager takes care of the lifecycle. If none is set, a default is picked
-     * in {@link #init()}.
-     *
-     * @param filesCache The FilesCache.
-     * @throws FileSystemException if an error occurs setting the cache..
-     */
-    public void setFilesCache(final FilesCache filesCache)
-            throws FileSystemException
-    {
-        if (init)
-        {
-            throw new FileSystemException("vfs.impl/already-inited.error");
-        }
-
-        this.filesCache = filesCache;
-    }
-
-    /**
-     * Set the cache strategy to use when dealing with file object data.
-     * <p>
-     * Can only be set before the FileSystemManager is initialized.
-     * <p>
-     * The default is {@link CacheStrategy#ON_RESOLVE}
-     *
-     * @param fileCacheStrategy The CacheStrategy to use.
-     * @throws FileSystemException
-     *             if this is not possible. e.g. it is already set.
-     */
-    public void setCacheStrategy(final CacheStrategy fileCacheStrategy)
-            throws FileSystemException
-    {
-        if (init)
-        {
-            throw new FileSystemException("vfs.impl/already-inited.error");
-        }
-
-        this.fileCacheStrategy = fileCacheStrategy;
-    }
-
-    /**
-     * Get the cache strategy used.
-     * @return The CacheStrategy.
-     */
-    @Override
-    public CacheStrategy getCacheStrategy()
-    {
-        return fileCacheStrategy;
-    }
-
-    /**
-     * Get the file object decorator used.
-     * @return The decorator.
-     */
-    @Override
-    public Class<?> getFileObjectDecorator()
-    {
-        return fileObjectDecorator;
-    }
-
-    /**
-     * The constructor associated to the fileObjectDecorator.
-     * We cache it here for performance reasons.
-     * @return The decorator's Constructor.
-     */
-    @Override
-    public Constructor<?> getFileObjectDecoratorConst()
-    {
-        return fileObjectDecoratorConst;
-    }
-
-    /**
-     * Set a fileObject decorator to be used for ALL returned file objects.
-     * <p>
-     * Can only be set before the FileSystemManager is initialized.
-     *
-     * @param fileObjectDecorator must be inherted from {@link DecoratedFileObject} a has to provide a
-     * constructor with a single {@link FileObject} as argument
-     * @throws FileSystemException if an error occurs setting the decorator.
-     */
-    public void setFileObjectDecorator(final Class<?> fileObjectDecorator) throws FileSystemException
-    {
-        if (init)
-        {
-            throw new FileSystemException("vfs.impl/already-inited.error");
-        }
-        if (!DecoratedFileObject.class.isAssignableFrom(fileObjectDecorator))
-        {
-            throw new FileSystemException("vfs.impl/invalid-decorator.error", fileObjectDecorator.getName());
-        }
-
-        try
-        {
-            fileObjectDecoratorConst = fileObjectDecorator.getConstructor(new Class[]{FileObject.class});
-        }
-        catch (final NoSuchMethodException e)
-        {
-            throw new FileSystemException("vfs.impl/invalid-decorator.error", fileObjectDecorator.getName(), e);
-        }
-
-        this.fileObjectDecorator = fileObjectDecorator;
-    }
-
-    /**
-     * get the fileContentInfoFactory used to determine the infos of a file
-     * content.
-     * @return The FileContentInfoFactory.
-     */
-    @Override
-    public FileContentInfoFactory getFileContentInfoFactory()
-    {
-        return fileContentInfoFactory;
-    }
-
-    /**
-     * set the fileContentInfoFactory used to determine the infos of a file
-     * content.
-     * <p>
-     * Can only be set before the FileSystemManager is initialized.
-     *
-     * @param fileContentInfoFactory The FileContentInfoFactory.
-     * @throws FileSystemException if an error occurs setting the FileContentInfoFactory.
-     */
-    public void setFileContentInfoFactory(final FileContentInfoFactory fileContentInfoFactory)
-            throws FileSystemException
-    {
-        if (init)
-        {
-            throw new FileSystemException("vfs.impl/already-inited.error");
-        }
-
-        this.fileContentInfoFactory = fileContentInfoFactory;
-    }
-
-    /**
-     * Sets the file replicator to use.
-     * <p>
-     * The manager takes care of all lifecycle management.
-     *
-     * @param replicator The FileReplicator.
-     * @throws FileSystemException if an error occurs setting the replicator.
-     */
-    public void setReplicator(final FileReplicator replicator)
-            throws FileSystemException
-    {
-        setupComponent(replicator);
-        fileReplicator = replicator;
-    }
-
-    /**
-     * Sets the temporary file store to use.
-     * <p>
-     * The manager takes care of all lifecycle management.
-     *
-     * @param tempFileStore The temporary FileStore.
-     * @throws FileSystemException if an error occurs adding the file store.
-     */
-    public void setTemporaryFileStore(final TemporaryFileStore tempFileStore)
-            throws FileSystemException
-    {
-        setupComponent(tempFileStore);
-        this.tempFileStore = tempFileStore;
-    }
-
-    /**
-     * Sets the logger to use.
-     * <p>
-     * This overwrites the default logger for this manager and is not reset in {@link #close()}.
-     *
-     * @param log The Logger to use.
-     */
-    @Override
-    public void setLogger(final Log log)
-    {
-        this.log = log;
-    }
-
-    /**
-     * Initializes a component, if it has not already been initialised.
-     *
-     * @param component The component to setup.
-     * @throws FileSystemException if an error occurs.
-     */
-    private void setupComponent(final Object component)
-            throws FileSystemException
-    {
-        if (!components.contains(component))
-        {
-            if (component instanceof VfsComponent)
-            {
-                final VfsComponent vfsComponent = (VfsComponent) component;
-                vfsComponent.setLogger(getLogger());
-                vfsComponent.setContext(context);
-                vfsComponent.init();
-            }
-            components.add(component);
-        }
-    }
-
-    /**
-     * Closes a component, if it has not already been closed.
-     *
-     * @param component The component to close.
-     */
-    private void closeComponent(final Object component)
-    {
-        if (component != null && components.contains(component))
-        {
-            if (component instanceof VfsComponent)
-            {
-                final VfsComponent vfsComponent = (VfsComponent) component;
-                vfsComponent.close();
-            }
-            components.remove(component);
-        }
-    }
-
-    /**
-     * Returns the file replicator.
-     *
-     * @return The file replicator. Never returns null.
-     * @throws FileSystemException if there is no FileReplicator.
-     */
-    public FileReplicator getReplicator() throws FileSystemException
-    {
-        if (fileReplicator == null)
-        {
-            throw new FileSystemException("vfs.impl/no-replicator.error");
-        }
-        return fileReplicator;
-    }
-
-    /**
-     * Returns the temporary file store.
-     *
-     * @return The file store. Never returns null.
-     * @throws FileSystemException if there is no TemporaryFileStore.
-     */
-    public TemporaryFileStore getTemporaryFileStore()
-            throws FileSystemException
-    {
-        if (tempFileStore == null)
-        {
-            throw new FileSystemException("vfs.impl/no-temp-file-store.error");
-        }
-        return tempFileStore;
-    }
-
-    /**
-     * Initializes this manager.
-     * <p>
-     * If no value for the following properties was specified, it will
-     * use the following defaults:
-     * <ul>
-     * <li>fileContentInfoFactory = new FileContentInfoFilenameFactory()</li>
-     * <li>filesCache = new SoftRefFilesCache()</li>
-     * <li>fileCacheStrategy = CacheStrategy.ON_RESOLVE</li>
-     * </ul>
-     *
-     * @throws FileSystemException if an error occurs during initialization.
-     */
-    public void init() throws FileSystemException
-    {
-        if (fileContentInfoFactory == null)
-        {
-            fileContentInfoFactory = new FileContentInfoFilenameFactory();
-        }
-
-        if (filesCache == null)
-        {
-            // filesCache = new DefaultFilesCache();
-            filesCache = new SoftRefFilesCache();
-        }
-        if (fileCacheStrategy == null)
-        {
-            fileCacheStrategy = CacheStrategy.ON_RESOLVE;
-        }
-        setupComponent(filesCache);
-
-        vfsProvider = new VirtualFileProvider();
-        setupComponent(vfsProvider);
-
-        init = true;
-    }
-
-    /**
-     * Closes the manager.
-     * <p>
-     * This will close all providers (all files), it will also close
-     * all managed components including temporary files, replicator,
-     * file cache and file operations.
-     * <p>
-     * The manager is in uninitialized state after this method.
-     */
-    public void close()
-    {
-        if (!init)
-        {
-            return;
-        }
-
-        // make sure all discovered components in
-        // org.apache.commons.vfs2.impl.StandardFileSystemManager.configure(Element)
-        // are closed here
-
-        // Close the file system providers.
-        for (final FileProvider provider : providers.values())
-        {
-            closeComponent(provider);
-        }
-        // unregister all
-        providers.clear();
-
-        // Close the other components
-        closeComponent(vfsProvider);
-        closeComponent(fileReplicator);
-        closeComponent(tempFileStore);
-        closeComponent(filesCache);
-        closeComponent(defaultProvider);
-
-        // FileOperations are components, too
-        for (final List<FileOperationProvider> opproviders : operationProviders.values())
-        {
-            for (final FileOperationProvider p : opproviders)
-            {
-                closeComponent(p);
-            }
-        }
-        // unregister all
-        operationProviders.clear();
-
-        // collections with add()
-        typeMap.clear();
-
-        // should not happen, but make debugging easier:
-        if (!components.isEmpty())
-        {
-            log.warn("DefaultFilesystemManager.close: not all components are closed: " + components.toString());
-        }
-        components.clear();
-
-        // managed components
-        vfsProvider = null;
-
-        // setters and derived state
-        defaultProvider = null;
-        baseFile = null;
-        fileObjectDecorator = null;
-        fileObjectDecoratorConst = null;
-        localFileProvider = null;
-        fileReplicator = null;
-        tempFileStore = null;
-        // setters with init() defaults
-        filesCache = null;
-        fileCacheStrategy = null;
-        fileContentInfoFactory = null;
-
-        init = false;
-    }
-
-    /**
-     * Free all resources used by unused filesystems created by this manager.
-     */
-    public void freeUnusedResources()
-    {
-        if (!init)
-        {
-            return;
-        }
-
-        // Close the providers.
-        for (final FileProvider fileProvider : providers.values())
-        {
-            final AbstractFileProvider provider = (AbstractFileProvider) fileProvider;
-            provider.freeUnusedResources();
-        }
-        // vfsProvider does not need to free resources
-    }
-
-    /**
-     * Sets the base file to use when resolving relative URI.
-     * @param baseFile The new base FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    public void setBaseFile(final FileObject baseFile)
-            throws FileSystemException
-    {
-        this.baseFile = baseFile;
-    }
-
-    /**
-     * Sets the base file to use when resolving relative URI.
-     * @param baseFile The new base FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    public void setBaseFile(final File baseFile) throws FileSystemException
-    {
-        this.baseFile = getLocalFileProvider().findLocalFile(baseFile);
-    }
-
-    /**
-     * Returns the base file used to resolve relative URI.
-     * @return The FileObject that represents the base file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject getBaseFile() throws FileSystemException
-    {
-        return baseFile;
-    }
-
-    /**
-     * Locates a file by URI.
-     * @param uri The URI of the file to locate.
-     * @return The FileObject for the located file.
-     * @throws FileSystemException if the file cannot be located or an error occurs.
-     */
-    @Override
-    public FileObject resolveFile(final String uri) throws FileSystemException
-    {
-        return resolveFile(getBaseFile(), uri);
-    }
-
-    /**
-     * Locate a file by URI, use the FileSystemOptions for file-system creation.
-     * @param uri The URI of the file to locate.
-     * @param fileSystemOptions The options for the FileSystem.
-     * @return The FileObject for the located file.
-     * @throws FileSystemException if the file cannot be located or an error occurs.
-     */
-
-    @Override
-    public FileObject resolveFile(final String uri,
-            final FileSystemOptions fileSystemOptions)
-            throws FileSystemException
-    {
-        // return resolveFile(baseFile, uri, fileSystemOptions);
-        return resolveFile(getBaseFile(), uri, fileSystemOptions);
-    }
-
-    /**
-     * Resolves a URI, relative to base file.
-     * <p>
-     * Uses the {@linkplain #getLocalFileProvider() local file provider} to
-     * locate the system file.
-     *
-     * @param baseFile The base File to use to locate the file.
-     * @param uri The URI of the file to locate.
-     * @return The FileObject for the located file.
-     * @throws FileSystemException if the file cannot be located or an error occurs.
-     */
-    @Override
-    public FileObject resolveFile(final File baseFile, final String uri)
-            throws FileSystemException
-    {
-        final FileObject baseFileObj = getLocalFileProvider().findLocalFile(
-                baseFile);
-        return resolveFile(baseFileObj, uri);
-    }
-
-    /**
-     * Resolves a URI, relative to a base file.
-     * @param baseFile The base FileOjbect to use to locate the file.
-     * @param uri The URI of the file to locate.
-     * @return The FileObject for the located file.
-     * @throws FileSystemException if the file cannot be located or an error occurs.
-     */
-    @Override
-    public FileObject resolveFile(final FileObject baseFile, final String uri)
-            throws FileSystemException
-    {
-        return resolveFile(baseFile, uri, baseFile == null ? null : baseFile
-                .getFileSystem().getFileSystemOptions());
-    }
-
-    /**
-     * Resolves a URI, relative to a base file with specified FileSystem
-     * configuration.
-     * @param baseFile The base file.
-     * @param uri The file name. May be a fully qualified or relative path or a url.
-     * @param fileSystemOptions Options to pass to the file system.
-     * @return A FileObject representing the target file.
-     * @throws FileSystemException if an error occurs accessing the file.
-     */
-    public FileObject resolveFile(final FileObject baseFile, final String uri,
-            final FileSystemOptions fileSystemOptions)
-            throws FileSystemException
-    {
-        final FileObject realBaseFile;
-        if (baseFile != null && VFS.isUriStyle()
-                && baseFile.getName().isFile())
-        {
-            realBaseFile = baseFile.getParent();
-        }
-        else
-        {
-            realBaseFile = baseFile;
-        }
-        // TODO: use resolveName and use this name to resolve the fileObject
-
-        UriParser.checkUriEncoding(uri);
-
-        if (uri == null)
-        {
-            throw new IllegalArgumentException();
-        }
-
-        // Extract the scheme
-        final String scheme = UriParser.extractScheme(uri);
-        if (scheme != null)
-        {
-            // An absolute URI - locate the provider
-            final FileProvider provider = providers.get(scheme);
-            if (provider != null)
-            {
-                return provider.findFile(realBaseFile, uri, fileSystemOptions);
-            }
-            // Otherwise, assume a local file
-        }
-
-        // Handle absolute file names
-        if (localFileProvider != null
-                && localFileProvider.isAbsoluteLocalName(uri))
-        {
-            return localFileProvider.findLocalFile(uri);
-        }
-
-        if (scheme != null)
-        {
-            // An unknown scheme - hand it to the default provider
-            if (defaultProvider == null)
-            {
-                throw new FileSystemException("vfs.impl/unknown-scheme.error", scheme, uri);
-            }
-            return defaultProvider.findFile(realBaseFile, uri, fileSystemOptions);
-        }
-
-        // Assume a relative name - use the supplied base file
-        if (realBaseFile == null)
-        {
-            throw new FileSystemException("vfs.impl/find-rel-file.error", uri);
-        }
-
-        return realBaseFile.resolveFile(uri);
-    }
-
-    /**
-     * Resolves a name, relative to the file. If the supplied name is an
-     * absolute path, then it is resolved relative to the root of the file
-     * system that the file belongs to. If a relative name is supplied, then it
-     * is resolved relative to this file name.
-     * @param root The base FileName.
-     * @param path The path to the file relative to the base FileName or an absolute path.
-     * @return The constructed FileName.
-     * @throws FileSystemException if an error occurs constructing the FileName.
-     */
-    @Override
-    public FileName resolveName(final FileName root, final String path)
-            throws FileSystemException
-    {
-        return resolveName(root, path, NameScope.FILE_SYSTEM);
-    }
-
-    /**
-     * Resolves a name, relative to the root.
-     *
-     * @param base the base filename
-     * @param name the name
-     * @param scope the {@link NameScope}
-     * @return The FileName of the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileName resolveName(final FileName base, final String name,
-            final NameScope scope) throws FileSystemException
-    {
-        final FileName realBase;
-        if (base != null && VFS.isUriStyle() && base.isFile())
-        {
-            realBase = base.getParent();
-        }
-        else
-        {
-            realBase = base;
-        }
-
-        final StringBuilder buffer = new StringBuilder(name);
-
-        // Adjust separators
-        UriParser.fixSeparators(buffer);
-        String scheme = UriParser.extractScheme(buffer.toString());
-
-        // Determine whether to prepend the base path
-        if (name.length() == 0 || (scheme == null && buffer.charAt(0) != FileName.SEPARATOR_CHAR))
-        {
-            // Supplied path is not absolute
-            if (!VFS.isUriStyle())
-            {
-                // when using uris the parent already do have the trailing "/"
-                buffer.insert(0, FileName.SEPARATOR_CHAR);
-            }
-            buffer.insert(0, realBase.getPath());
-        }
-
-        // Normalise the path
-        final FileType fileType = UriParser.normalisePath(buffer);
-
-        // Check the name is ok
-        final String resolvedPath = buffer.toString();
-        if (!AbstractFileName
-                .checkName(realBase.getPath(), resolvedPath, scope))
-        {
-            throw new FileSystemException(
-                    "vfs.provider/invalid-descendent-name.error", name);
-        }
-
-        String fullPath;
-        if (scheme != null)
-        {
-            fullPath = resolvedPath;
-        }
-        else
-        {
-            scheme = realBase.getScheme();
-            fullPath = realBase.getRootURI() + resolvedPath;
-        }
-        final FileProvider provider = providers.get(scheme);
-        if (provider != null)
-        {
-            // TODO: extend the filename parser to be able to parse
-            // only a pathname and take the missing informations from
-            // the base. Then we can get rid of the string operation.
-            // // String fullPath = base.getRootURI() +
-            // resolvedPath.substring(1);
-
-            return provider.parseUri(realBase, fullPath);
-        }
-
-        // An unknown scheme - hand it to the default provider - if possible
-        if (scheme != null && defaultProvider != null)
-        {
-            return defaultProvider.parseUri(realBase, fullPath);
-        }
-
-        // TODO: avoid fallback to this point
-        // this happens if we have a virtual filesystem (no provider for scheme)
-        return ((AbstractFileName) realBase).createName(resolvedPath, fileType);
-    }
-
-    /**
-     * Resolve the uri to a filename.
-     * @param uri The URI to resolve.
-     * @return The FileName of the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileName resolveURI(final String uri) throws FileSystemException
-    {
-        UriParser.checkUriEncoding(uri);
-
-        if (uri == null)
-        {
-            throw new IllegalArgumentException();
-        }
-
-        // Extract the scheme
-        final String scheme = UriParser.extractScheme(uri);
-        if (scheme != null)
-        {
-            // An absolute URI - locate the provider
-            final FileProvider provider = providers.get(scheme);
-            if (provider != null)
-            {
-                return provider.parseUri(null, uri);
-            }
-
-            // Otherwise, assume a local file
-        }
-
-        // Handle absolute file names
-        if (localFileProvider != null
-                && localFileProvider.isAbsoluteLocalName(uri))
-        {
-            return localFileProvider.parseUri(null, uri);
-        }
-
-        if (scheme != null)
-        {
-            // An unknown scheme - hand it to the default provider
-            if (defaultProvider == null)
-            {
-                throw new FileSystemException("vfs.impl/unknown-scheme.error", scheme, uri);
-            }
-            return defaultProvider.parseUri(null, uri);
-        }
-
-        // Assume a relative name - use the supplied base file
-        if (baseFile == null)
-        {
-            throw new FileSystemException("vfs.impl/find-rel-file.error", uri);
-        }
-
-        return resolveName(baseFile.getName(), uri, NameScope.FILE_SYSTEM);
-    }
-
-    /**
-     * Converts a local file into a {@link FileObject}.
-     * @param file The input File.
-     * @return the create FileObject
-     * @throws FileSystemException if an error occurs creating the file.
-     */
-    @Override
-    public FileObject toFileObject(final File file) throws FileSystemException
-    {
-        return getLocalFileProvider().findLocalFile(file);
-    }
-
-    /**
-     * Creates a layered file system.
-     * @param scheme The scheme to use.
-     * @param file The FileObject.
-     * @return The layered FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject createFileSystem(final String scheme,
-            final FileObject file) throws FileSystemException
-    {
-        final FileProvider provider = providers.get(scheme);
-        if (provider == null)
-        {
-            throw new FileSystemException("vfs.impl/unknown-provider.error", scheme, file);
-        }
-        return provider.createFileSystem(scheme, file, file.getFileSystem().getFileSystemOptions());
-    }
-
-    /**
-     * Creates a layered file system.
-     * @param file The FileObject to use.
-     * @return The layered FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject createFileSystem(final FileObject file)
-            throws FileSystemException
-    {
-        final String scheme = typeMap.getScheme(file);
-        if (scheme == null)
-        {
-            throw new FileSystemException(
-                    "vfs.impl/no-provider-for-file.error", file);
-        }
-
-        return createFileSystem(scheme, file);
-    }
-
-    /**
-     * Determines if a layered file system can be created for a given file.
-     *
-     * @param file The file to check for.
-     * @return true if the FileSystem can be created.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean canCreateFileSystem(final FileObject file)
-            throws FileSystemException
-    {
-        return typeMap.getScheme(file) != null;
-    }
-
-    /**
-     * Creates a virtual file system.
-     * @param rootFile The FileObject to use.
-     * @return The FileObject in the VirtualFileSystem.
-     * @throws FileSystemException if an error occurs creating the file.
-     */
-    @Override
-    public FileObject createVirtualFileSystem(final FileObject rootFile)
-            throws FileSystemException
-    {
-        return vfsProvider.createFileSystem(rootFile);
-    }
-
-    /**
-     * Creates an empty virtual file system.
-     * @param rootUri The URI to use as the root of the FileSystem.
-     * @return A FileObject in the virtual FileSystem.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject createVirtualFileSystem(final String rootUri)
-            throws FileSystemException
-    {
-        return vfsProvider.createFileSystem(rootUri);
-    }
-
-    /**
-     * Locates the local file provider.
-     * <p>
-     * The local file provider is the first
-     * {@linkplain #addProvider(String[], FileProvider) provider added}
-     * implementing {@link LocalFileProvider}.
-     *
-     * @return The LocalFileProvider.
-     * @throws FileSystemException if no local file provider was set.
-     */
-    private LocalFileProvider getLocalFileProvider() throws FileSystemException
-    {
-        if (localFileProvider == null)
-        {
-            throw new FileSystemException(
-                    "vfs.impl/no-local-file-provider.error");
-        }
-        return localFileProvider;
-    }
-
-    /**
-     * Get the URLStreamHandlerFactory.
-     * @return The URLStreamHandlerFactory.
-     */
-    @Override
-    public URLStreamHandlerFactory getURLStreamHandlerFactory()
-    {
-        return new VfsStreamHandlerFactory();
-    }
-
-    /**
-     * Closes the given filesystem.
-     * <p>
-     * If you use VFS as singleton it is VERY dangerous to call this method.
-     *
-     * @param filesystem The FileSystem to close.
-     */
-    @Override
-    public void closeFileSystem(final FileSystem filesystem)
-    {
-        // inform the cache ...
-        getFilesCache().clear(filesystem);
-
-        // just in case the cache didnt call _closeFileSystem
-        _closeFileSystem(filesystem);
-    }
-
-    /**
-     * Closes the given file system.
-     * <p>
-     * If you use VFS as singleton it is VERY dangerous to call this method
-     * </p>
-     *
-     * @param filesystem The FileSystem to close.
-     */
-    public void _closeFileSystem(final FileSystem filesystem)
-    {
-        final FileProvider provider = providers.get(filesystem.getRootName().getScheme());
-        if (provider != null)
-        {
-            ((AbstractFileProvider) provider).closeFileSystem(filesystem);
-        }
-        else if (filesystem instanceof VirtualFileSystem)
-        {
-            // vfsProvider does not implement AbstractFileProvider
-            vfsProvider.closeFileSystem(filesystem);
-        }
-    }
-
-    /**
-     * This is an internal class because it needs access to the private member
-     * providers.
-     */
-    final class VfsStreamHandlerFactory implements URLStreamHandlerFactory
-    {
-        @Override
-        public URLStreamHandler createURLStreamHandler(final String protocol)
-        {
-            final FileProvider provider = providers.get(protocol);
-            if (provider != null)
-            {
-                return new DefaultURLStreamHandler(context);
-            }
-
-            // Route all other calls to the default URLStreamHandlerFactory
-            return new URLStreamHandlerProxy();
-        }
-    }
-
-    /**
-     * Get the schemes currently available.
-     * @return The array of scheme names.
-     */
-    @Override
-    public String[] getSchemes()
-    {
-        final String[] schemes = new String[providers.size()];
-        providers.keySet().toArray(schemes);
-        return schemes;
-    }
-
-    /**
-     * Get the capabilities for a given scheme.
-     *
-     * @param scheme The scheme to located.
-     * @return A Collection of capabilities.
-     * @throws FileSystemException if the given scheme is not konwn
-     */
-    @Override
-    public Collection<Capability> getProviderCapabilities(final String scheme)
-            throws FileSystemException
-    {
-        final FileProvider provider = providers.get(scheme);
-        if (provider == null)
-        {
-            throw new FileSystemException("vfs.impl/unknown-scheme.error", scheme);
-        }
-
-        return provider.getCapabilities();
-    }
-
-    /**
-     * Get the configuration builder for the given scheme.
-     * @param scheme The scheme to locate.
-     * @return The FileSystemConfigBuilder for the scheme.
-     * @throws FileSystemException if the given scheme is not konwn
-     */
-    @Override
-    public FileSystemConfigBuilder getFileSystemConfigBuilder(final String scheme)
-            throws FileSystemException
-    {
-        final FileProvider provider = providers.get(scheme);
-        if (provider == null)
-        {
-            throw new FileSystemException("vfs.impl/unknown-scheme.error", scheme);
-        }
-
-        return provider.getConfigBuilder();
-    }
-
-    // -- OPERATIONS --
-
-    /**
-     * Adds the specified FileOperationProvider for the specified scheme.
-     * Several FileOperationProvider's might be registered for the same scheme.
-     * For example, for "file" scheme we can register SvnWsOperationProvider and
-     * CvsOperationProvider.
-     *
-     * @param scheme The scheme the provider should be registered for.
-     * @param operationProvider The FileOperationProvider.
-     * @throws FileSystemException if an error occurs adding the provider.
-     */
-    @Override
-    public void addOperationProvider(final String scheme,
-            final FileOperationProvider operationProvider)
-            throws FileSystemException
-    {
-        addOperationProvider(new String[] {scheme}, operationProvider);
-    }
-
-    /**
-     * @see FileSystemManager#addOperationProvider(String,
-     *      org.apache.commons.vfs2.operations.FileOperationProvider)
-     *
-     * @param schemes The array of schemes the provider should apply to.
-     * @param operationProvider The FileOperationProvider.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void addOperationProvider(final String[] schemes,
-            final FileOperationProvider operationProvider)
-            throws FileSystemException
-    {
-        for (final String scheme : schemes)
-        {
-            if (!operationProviders.containsKey(scheme))
-            {
-                final List<FileOperationProvider> providers = new ArrayList<FileOperationProvider>();
-                operationProviders.put(scheme, providers);
-            }
-
-            final List<FileOperationProvider> providers = operationProviders.get(scheme);
-
-            if (providers.contains(operationProvider))
-            {
-                throw new FileSystemException(
-                        "vfs.operation/operation-provider-already-added.error", scheme);
-            }
-
-            setupComponent(operationProvider);
-
-            providers.add(operationProvider);
-        }
-    }
-
-    /**
-     * @param scheme
-     *            the scheme for wich we want to get the list af registered
-     *            providers.
-     *
-     * @return the registered FileOperationProviders for the specified scheme.
-     *         If there were no providers registered for the scheme, it returns
-     *         null.
-     *
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileOperationProvider[] getOperationProviders(final String scheme)
-            throws FileSystemException
-    {
-
-        final List<?> providers = operationProviders.get(scheme);
-        if (providers == null || providers.size() == 0)
-        {
-            return null;
-        }
-        return providers.toArray(new FileOperationProvider[] {});
-    }
-
-    /**
-     * Converts a URI into a {@link FileObject}.
-     *
-     * @param uri The URI to convert.
-     * @return The {@link FileObject} that represents the URI.  Never
-     *         returns null.
-     * @throws FileSystemException On error converting the URI.
-     * @since 2.1
-     */
-    @Override
-    public FileObject resolveFile(final URI uri) throws FileSystemException
-    {
-        // TODO Push the URI deeper into VFS
-        return resolveFile(baseFile, uri.toString(), null);
-    }
-
-    /**
-     * Converts a URL into a {@link FileObject}.
-     *
-     * @param url The URL to convert.
-     * @return The {@link FileObject} that represents the URL.  Never
-     *         returns null.
-     * @throws FileSystemException On error converting the URL.
-     * @since 2.1
-     */
-    @Override
-    public FileObject resolveFile(final URL url) throws FileSystemException
-    {
-        try
-        {
-            return this.resolveFile(url.toURI());
-        }
-        catch (final URISyntaxException e)
-        {
-            throw new FileSystemException(e);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultProviderConfiguration.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultProviderConfiguration.java
deleted file mode 100644
index 068b8a2..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultProviderConfiguration.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.commons.vfs2.impl;
-
-
-/**
- * Same as {@link ProviderConfiguration} but for the default provider.
- */
-public class DefaultProviderConfiguration extends ProviderConfiguration
-{
-    @Override
-    public boolean isDefault()
-    {
-        return true;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultVfsComponentContext.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultVfsComponentContext.java
deleted file mode 100644
index 9aed70c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/DefaultVfsComponentContext.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.commons.vfs2.impl;
-
-import java.io.File;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.FileReplicator;
-import org.apache.commons.vfs2.provider.TemporaryFileStore;
-import org.apache.commons.vfs2.provider.VfsComponentContext;
-
-
-/**
- * The default context implementation.
- */
-final class DefaultVfsComponentContext
-    implements VfsComponentContext
-{
-    private final DefaultFileSystemManager manager;
-
-    public DefaultVfsComponentContext(final DefaultFileSystemManager manager)
-    {
-        this.manager = manager;
-    }
-
-    /**
-     * Locate a file by name.
-     */
-    @Override
-    public FileObject resolveFile(final FileObject baseFile, final String name,
-                                  final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        return manager.resolveFile(baseFile, name, fileSystemOptions);
-    }
-
-    /**
-     * Locate a file by name.
-     */
-    @Override
-    public FileObject resolveFile(final String name, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        return manager.resolveFile(name, fileSystemOptions);
-    }
-
-    @Override
-    public FileName parseURI(final String uri) throws FileSystemException
-    {
-        return manager.resolveURI(uri);
-    }
-
-    /**
-     * Returns a {@link FileObject} for a local file.
-     */
-    @Override
-    public FileObject toFileObject(final File file)
-        throws FileSystemException
-    {
-        return manager.toFileObject(file);
-    }
-
-    /**
-     * Locates a file replicator for the provider to use.
-     */
-    @Override
-    public FileReplicator getReplicator() throws FileSystemException
-    {
-        return manager.getReplicator();
-    }
-
-    /**
-     * Locates a temporary file store for the provider to use.
-     */
-    @Override
-    public TemporaryFileStore getTemporaryFileStore() throws FileSystemException
-    {
-        return manager.getTemporaryFileStore();
-    }
-
-    /**
-     * Returns the filesystem manager for the current context
-     *
-     * @return the filesystem manager
-     */
-    @Override
-    public FileSystemManager getFileSystemManager()
-    {
-        return manager;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/FileContentInfoFilenameFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/FileContentInfoFilenameFactory.java
deleted file mode 100644
index 977a253..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/FileContentInfoFilenameFactory.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.commons.vfs2.impl;
-
-import java.net.FileNameMap;
-import java.net.URLConnection;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileContentInfo;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-
-/**
- * The FileContentInfoFilenameFactory.
- * <p>
- * Uses the filename extension to determine the content-type.
- * The content-encoding is not resolved.
- */
-public class FileContentInfoFilenameFactory implements FileContentInfoFactory
-{
-    @Override
-    public FileContentInfo create(final FileContent fileContent)
-    {
-        String contentType = null;
-
-        final String name = fileContent.getFile().getName().getBaseName();
-        if (name != null)
-        {
-            final FileNameMap fileNameMap = URLConnection.getFileNameMap();
-            contentType = fileNameMap.getContentTypeFor(name);
-        }
-
-        return new DefaultFileContentInfo(contentType, null);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/FileTypeMap.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/FileTypeMap.java
deleted file mode 100644
index eefda12..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/FileTypeMap.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.commons.vfs2.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * A helper class that determines the provider to use for a file.
- */
-class FileTypeMap
-{
-    private final Map<String, String> mimeTypeMap = new HashMap<String, String>();
-    private final Map<String, String> extensionMap = new HashMap<String, String>();
-
-    /**
-     * Adds a MIME type mapping.
-     */
-    public void addMimeType(final String mimeType, final String scheme)
-    {
-        mimeTypeMap.put(mimeType, scheme);
-    }
-
-    /**
-     * Adds a filename extension mapping.
-     */
-    public void addExtension(final String extension, final String scheme)
-    {
-        extensionMap.put(extension, scheme);
-    }
-
-    /**
-     * Find the scheme for the provider of a layered file system.
-     * <p>
-     * This will check the FileContentInfo or file extension.
-     * @return Scheme supporting the file type or null (if unknonw).
-     */
-    public String getScheme(final FileObject file) throws FileSystemException
-    {
-        // Check the file's mime type for a match
-        final FileContent content = file.getContent();
-        final String mimeType = content.getContentInfo().getContentType();
-        if (mimeType != null)
-        {
-            return mimeTypeMap.get(mimeType);
-        }
-
-        // no specific mime-type - if it is a file also check the extension
-        if (!file.isFile())
-        {
-            return null; // VFS-490 folders don't use extensions for mime-type
-        }
-        final String extension = file.getName().getExtension();
-        return extensionMap.get(extension);
-    }
-
-    /**
-     * Removes all extensions and scheme mappings.
-     */
-    public void clear()
-    {
-        mimeTypeMap.clear();
-        extensionMap.clear();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/PrivilegedFileReplicator.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/PrivilegedFileReplicator.java
deleted file mode 100644
index d47cd86..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/PrivilegedFileReplicator.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.commons.vfs2.impl;
-
-import java.io.File;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.FileReplicator;
-import org.apache.commons.vfs2.provider.VfsComponent;
-import org.apache.commons.vfs2.provider.VfsComponentContext;
-
-/**
- * A file replicator that wraps another file replicator, performing
- * the replication as a privileged action.
- */
-public class PrivilegedFileReplicator
-    implements FileReplicator, VfsComponent
-{
-    private final FileReplicator replicator;
-    private final VfsComponent replicatorComponent;
-
-    public PrivilegedFileReplicator(final FileReplicator replicator)
-    {
-        this.replicator = replicator;
-        if (replicator instanceof VfsComponent)
-        {
-            replicatorComponent = (VfsComponent) replicator;
-        }
-        else
-        {
-            replicatorComponent = null;
-        }
-    }
-
-    /**
-     * Sets the Logger to use for the component.
-     *
-     * @param logger The logger.
-     */
-    @Override
-    public void setLogger(final Log logger)
-    {
-        if (replicatorComponent != null)
-        {
-            replicatorComponent.setLogger(logger);
-        }
-    }
-
-    /**
-     * Sets the context for the replicator.
-     *
-     * @param context The component context.
-     */
-    @Override
-    public void setContext(final VfsComponentContext context)
-    {
-        if (replicatorComponent != null)
-        {
-            replicatorComponent.setContext(context);
-        }
-    }
-
-    /**
-     * Initializes the component.
-     *
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void init() throws FileSystemException
-    {
-        if (replicatorComponent != null)
-        {
-            try
-            {
-                AccessController.doPrivileged(new InitAction());
-            }
-            catch (final PrivilegedActionException e)
-            {
-                throw new FileSystemException("vfs.impl/init-replicator.error", e);
-            }
-        }
-    }
-
-    /**
-     * Closes the replicator.
-     */
-    @Override
-    public void close()
-    {
-        if (replicatorComponent != null)
-        {
-            AccessController.doPrivileged(new CloseAction());
-        }
-    }
-
-    /**
-     * Creates a local copy of the file, and all its descendants.
-     *
-     * @param srcFile The source FileObject.
-     * @param selector The file selector.
-     * @return The replicated file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public File replicateFile(final FileObject srcFile, final FileSelector selector)
-        throws FileSystemException
-    {
-        try
-        {
-            final ReplicateAction action = new ReplicateAction(srcFile, selector);
-            return AccessController.doPrivileged(action);
-        }
-        catch (final PrivilegedActionException e)
-        {
-            throw new FileSystemException("vfs.impl/replicate-file.error", e, srcFile.getName());
-        }
-    }
-
-    /**
-     * An action that initialises the wrapped replicator.
-     */
-    private class InitAction implements PrivilegedExceptionAction<Object>
-    {
-        /**
-         * Performs the action.
-         */
-        @Override
-        public Object run() throws Exception
-        {
-            replicatorComponent.init();
-            return null;
-        }
-    }
-
-    /**
-     * An action that replicates a file using the wrapped replicator.
-     */
-    private class ReplicateAction implements PrivilegedExceptionAction<File>
-    {
-        private final FileObject srcFile;
-        private final FileSelector selector;
-
-        public ReplicateAction(final FileObject srcFile,
-                               final FileSelector selector)
-        {
-            this.srcFile = srcFile;
-            this.selector = selector;
-        }
-
-        /**
-         * Performs the action.
-         * @throws Exception if an error occurs.
-         */
-        @Override
-        public File run() throws Exception
-        {
-            // TODO - Do not pass the selector through.  It is untrusted
-            // TODO - Need to determine which files can be read
-            return replicator.replicateFile(srcFile, selector);
-        }
-    }
-
-    /**
-     * An action that closes the wrapped replicator.
-     */
-    private class CloseAction implements PrivilegedAction<Object>
-    {
-        /**
-         * Performs the action.
-         */
-        @Override
-        public Object run()
-        {
-            replicatorComponent.close();
-            return null;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/ProviderConfiguration.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/ProviderConfiguration.java
deleted file mode 100644
index 69ded20..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/ProviderConfiguration.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.commons.vfs2.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class describes the configuration for a provider.
- * <p>
- * Used by digester in StandardFileSystemManager
- */
-public class ProviderConfiguration
-{
-    private String className;
-    private final List<String> schemes = new ArrayList<String>(10);
-    private final List<String> dependenies = new ArrayList<String>(10);
-
-    public ProviderConfiguration()
-    {
-    }
-
-    public String getClassName()
-    {
-        return className;
-    }
-
-    public void setClassName(final String className)
-    {
-        this.className = className;
-    }
-
-    public void setScheme(final String scheme)
-    {
-        schemes.add(scheme);
-    }
-
-    public List<String> getSchemes()
-    {
-        return schemes;
-    }
-
-    public void setDependency(final String dependency)
-    {
-        dependenies.add(dependency);
-    }
-
-    public List<String> getDependencies()
-    {
-        return dependenies;
-    }
-
-    public boolean isDefault()
-    {
-        return false;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/Resource.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/Resource.java
deleted file mode 100644
index 6e3ea16..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/Resource.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.commons.vfs2.impl;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.jar.Attributes;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileUtil;
-
-/**
- * Helper class for VFSClassLoader.
- * This represents a resource loaded with the classloader.
- *
- * @see VFSClassLoader
- */
-class Resource
-{
-    private final FileObject root;
-    private final FileObject resource;
-    private final FileObject packageFolder;
-    private final String packageName;
-
-    /**
-     * Creates a new instance.
-     *
-     * @param root     The code source FileObject.
-     * @param resource The resource of the FileObject.
-     */
-    public Resource(final String name,
-                    final FileObject root,
-                    final FileObject resource)
-        throws FileSystemException
-    {
-        this.root = root;
-        this.resource = resource;
-        packageFolder = resource.getParent();
-        final int pos = name.lastIndexOf('/');
-        if (pos == -1)
-        {
-            packageName = null;
-        }
-        else
-        {
-            packageName = name.substring(0, pos).replace('/', '.');
-        }
-    }
-
-    /**
-     * Returns the URL of the resource.
-     */
-    public URL getURL() throws FileSystemException
-    {
-        return resource.getURL();
-    }
-
-    /**
-     * Returns the name of the package containing the resource.
-     */
-    public String getPackageName()
-    {
-        return packageName;
-    }
-
-    /**
-     * Returns an attribute of the package containing the resource.
-     */
-    public String getPackageAttribute(final Attributes.Name attrName) throws FileSystemException
-    {
-        return (String) packageFolder.getContent().getAttribute(attrName.toString());
-    }
-
-    /**
-     * Returns the folder for the package containing the resource.
-     */
-    public FileObject getPackageFolder()
-    {
-        return packageFolder;
-    }
-
-    /**
-     * Returns the FileObject of the resource.
-     */
-    public FileObject getFileObject()
-    {
-        return resource;
-    }
-
-    /**
-     * Returns the code source as an URL.
-     */
-    public URL getCodeSourceURL() throws FileSystemException
-    {
-        return root.getURL();
-    }
-
-    /**
-     * Returns the data for this resource as a byte array.
-     */
-    public byte[] getBytes() throws IOException
-    {
-        return FileUtil.getContent(resource);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/StandardFileSystemManager.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/StandardFileSystemManager.java
deleted file mode 100644
index b7f04c1..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/StandardFileSystemManager.java
+++ /dev/null
@@ -1,521 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.impl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.VfsLog;
-import org.apache.commons.vfs2.operations.FileOperationProvider;
-import org.apache.commons.vfs2.provider.FileProvider;
-import org.apache.commons.vfs2.util.Messages;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-/**
- * A {@link org.apache.commons.vfs2.FileSystemManager} that configures itself
- * from an XML (Default: providers.xml) configuration file.
- * <p>
- * Certain providers are only loaded and available if the dependent library is in your
- * classpath. You have to configure your debugging facility to log "debug" messages to see
- * if a provider was skipped due to "unresolved externals".
- */
-public class StandardFileSystemManager
-    extends DefaultFileSystemManager
-{
-    private static final String CONFIG_RESOURCE = "providers.xml";
-    private static final String PLUGIN_CONFIG_RESOURCE = "META-INF/vfs-providers.xml";
-
-    private URL configUri;
-    private ClassLoader classLoader;
-
-    /**
-     * Sets the configuration file for this manager.
-     *
-     * @param configUri The URI for this manager.
-     */
-    public void setConfiguration(final String configUri)
-    {
-        try
-        {
-            setConfiguration(new URL(configUri));
-        }
-        catch (final MalformedURLException e)
-        {
-            getLogger().warn(e.getLocalizedMessage(), e);
-        }
-    }
-
-    /**
-     * Sets the configuration file for this manager.
-     *
-     * @param configUri The URI forthis manager.
-     */
-    public void setConfiguration(final URL configUri)
-    {
-        this.configUri = configUri;
-    }
-
-    /**
-     * Sets the ClassLoader to use to load the providers.
-     * Default is to use the ClassLoader that loaded this class.
-     *
-     * @param classLoader The ClassLoader.
-     */
-    public void setClassLoader(final ClassLoader classLoader)
-    {
-        this.classLoader = classLoader;
-    }
-
-    /**
-     * Initializes this manager. Adds the providers and replicator.
-     *
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void init() throws FileSystemException
-    {
-        // Set the replicator and temporary file store (use the same component)
-        final DefaultFileReplicator replicator = createDefaultFileReplicator();
-        setReplicator(new PrivilegedFileReplicator(replicator));
-        setTemporaryFileStore(replicator);
-
-        if (configUri == null)
-        {
-            // Use default config
-            final URL url = getClass().getResource(CONFIG_RESOURCE);
-            if (url == null)
-            {
-                throw new FileSystemException("vfs.impl/find-config-file.error", CONFIG_RESOURCE);
-            }
-            configUri = url;
-        }
-
-        configure(configUri);
-        configurePlugins();
-
-        // Initialise super-class
-        super.init();
-    }
-
-    /**
-     * Scans the classpath to find any droped plugin.
-     * <p>
-     * The plugin-description has to be in {@code /META-INF/vfs-providers.xml}.
-     *
-     * @throws FileSystemException if an error occurs.
-     */
-    protected void configurePlugins() throws FileSystemException
-    {
-        Enumeration<URL> enumResources;
-        try
-        {
-            enumResources = loadResources(PLUGIN_CONFIG_RESOURCE);
-        }
-        catch (final IOException e)
-        {
-            throw new FileSystemException(e);
-        }
-
-        while (enumResources.hasMoreElements())
-        {
-            final URL url = enumResources.nextElement();
-            configure(url);
-        }
-    }
-
-    private ClassLoader findClassLoader()
-    {
-        if (classLoader != null)
-        {
-            return classLoader;
-        }
-
-        ClassLoader cl = Thread.currentThread().getContextClassLoader();
-        if (cl == null)
-        {
-            cl = getClass().getClassLoader();
-        }
-
-        return cl;
-    }
-
-    protected DefaultFileReplicator createDefaultFileReplicator()
-    {
-        return new DefaultFileReplicator();
-    }
-
-    /**
-     * Configures this manager from an XML configuration file.
-     *
-     * @param configUri The URI of the configuration.
-     * @throws FileSystemException if an error occus.
-     */
-    private void configure(final URL configUri) throws FileSystemException
-    {
-        InputStream configStream = null;
-        try
-        {
-            // Load up the config
-            // TODO - validate
-            final DocumentBuilder builder = createDocumentBuilder();
-            configStream = configUri.openStream();
-            final Element config = builder.parse(configStream).getDocumentElement();
-
-            configure(config);
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.impl/load-config.error", configUri.toString(), e);
-        }
-        finally
-        {
-            if (configStream != null)
-            {
-                try
-                {
-                    configStream.close();
-                }
-                catch (final IOException e)
-                {
-                    getLogger().warn(e.getLocalizedMessage(), e);
-                }
-            }
-        }
-    }
-
-    /**
-     * Configures this manager from an XML configuration file.
-     *
-     * @param configUri The URI of the configuration.
-     * @param configStream An InputStream containing the configuration.
-     * @throws FileSystemException if an error occurs.
-     */
-    @SuppressWarnings("unused")
-    private void configure(final String configUri, final InputStream configStream)
-            throws FileSystemException
-    {
-        try
-        {
-            // Load up the config
-            // TODO - validate
-            final DocumentBuilder builder = createDocumentBuilder();
-            final Element config = builder.parse(configStream).getDocumentElement();
-
-            configure(config);
-
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.impl/load-config.error", configUri, e);
-        }
-    }
-
-    /**
-     * Configure and create a DocumentBuilder
-     *
-     * @return A DocumentBuilder for the configuration.
-     * @throws ParserConfigurationException if an error occurs.
-     */
-    private DocumentBuilder createDocumentBuilder() throws ParserConfigurationException
-    {
-        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setIgnoringElementContentWhitespace(true);
-        factory.setIgnoringComments(true);
-        factory.setExpandEntityReferences(true);
-        return  factory.newDocumentBuilder();
-    }
-
-    /**
-     * Configures this manager from an parsed XML configuration file
-     *
-     * @param config The configuration Element.
-     * @throws FileSystemException if an error occurs.
-     */
-    private void configure(final Element config) throws FileSystemException
-    {
-        // Add the providers
-        final NodeList providers = config.getElementsByTagName("provider");
-        final int count = providers.getLength();
-        for (int i = 0; i < count; i++)
-        {
-            final Element provider = (Element) providers.item(i);
-            addProvider(provider, false);
-        }
-
-        // Add the operation providers
-        final NodeList operationProviders = config.getElementsByTagName("operationProvider");
-        for (int i = 0; i < operationProviders.getLength(); i++)
-        {
-            final Element operationProvider = (Element) operationProviders.item(i);
-            addOperationProvider(operationProvider);
-        }
-
-        // Add the default provider
-        final NodeList defProviders = config.getElementsByTagName("default-provider");
-        if (defProviders.getLength() > 0)
-        {
-            final Element provider = (Element) defProviders.item(0);
-            addProvider(provider, true);
-        }
-
-        // Add the mime-type maps
-        final NodeList mimeTypes = config.getElementsByTagName("mime-type-map");
-        for (int i = 0; i < mimeTypes.getLength(); i++)
-        {
-            final Element map = (Element) mimeTypes.item(i);
-            addMimeTypeMap(map);
-        }
-
-        // Add the extension maps
-        final NodeList extensions = config.getElementsByTagName("extension-map");
-        for (int i = 0; i < extensions.getLength(); i++)
-        {
-            final Element map = (Element) extensions.item(i);
-            addExtensionMap(map);
-        }
-    }
-
-    /**
-     * Adds an extension map.
-     *
-     * @param map containing the Elements.
-     */
-    private void addExtensionMap(final Element map)
-    {
-        final String extension = map.getAttribute("extension");
-        final String scheme = map.getAttribute("scheme");
-        if (scheme != null && scheme.length() > 0)
-        {
-            addExtensionMap(extension, scheme);
-        }
-    }
-
-    /**
-     * Adds a mime-type map.
-     *
-     * @param map containing the Elements.
-     */
-    private void addMimeTypeMap(final Element map)
-    {
-        final String mimeType = map.getAttribute("mime-type");
-        final String scheme = map.getAttribute("scheme");
-        addMimeTypeMap(mimeType, scheme);
-    }
-
-    /**
-     * Adds a provider from a provider definition.
-     *
-     * @param providerDef the provider definition
-     * @param isDefault true if the default should be used.
-     * @throws FileSystemException if an error occurs.
-     */
-    private void addProvider(final Element providerDef, final boolean isDefault)
-        throws FileSystemException
-    {
-        final String classname = providerDef.getAttribute("class-name");
-
-        // Make sure all required schemes are available
-        final String[] requiredSchemes = getRequiredSchemes(providerDef);
-        for (final String requiredScheme : requiredSchemes)
-        {
-            if (!hasProvider(requiredScheme))
-            {
-                final String msg = Messages.getString("vfs.impl/skipping-provider-scheme.debug",
-                    classname, requiredScheme);
-                VfsLog.debug(getLogger(), getLogger(), msg);
-                return;
-            }
-        }
-
-        // Make sure all required classes are in classpath
-        final String[] requiredClasses = getRequiredClasses(providerDef);
-        for (final String requiredClass : requiredClasses)
-        {
-            if (!findClass(requiredClass))
-            {
-                final String msg = Messages.getString("vfs.impl/skipping-provider.debug",
-                    classname, requiredClass);
-                VfsLog.debug(getLogger(), getLogger(), msg);
-                return;
-            }
-        }
-
-        // Create and register the provider
-        final FileProvider provider = (FileProvider) createInstance(classname);
-        final String[] schemas = getSchemas(providerDef);
-        if (schemas.length > 0)
-        {
-            addProvider(schemas, provider);
-        }
-
-        // Set as default, if required
-        if (isDefault)
-        {
-            setDefaultProvider(provider);
-        }
-    }
-
-    /**
-     * Adds a operationProvider from a operationProvider definition.
-     */
-    private void addOperationProvider(final Element providerDef) throws FileSystemException
-    {
-        final String classname = providerDef.getAttribute("class-name");
-
-        // Attach only to available schemas
-        final String[] schemas = getSchemas(providerDef);
-        for (final String schema : schemas)
-        {
-            if (hasProvider(schema))
-            {
-                final FileOperationProvider operationProvider = (FileOperationProvider) createInstance(classname);
-                addOperationProvider(schema, operationProvider);
-            }
-        }
-    }
-
-    /**
-     * Tests if a class is available.
-     */
-    private boolean findClass(final String className)
-    {
-        try
-        {
-            loadClass(className);
-            return true;
-        }
-        catch (final ClassNotFoundException e)
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Extracts the required classes from a provider definition.
-     */
-    private String[] getRequiredClasses(final Element providerDef)
-    {
-        final ArrayList<String> classes = new ArrayList<String>();
-        final NodeList deps = providerDef.getElementsByTagName("if-available");
-        final int count = deps.getLength();
-        for (int i = 0; i < count; i++)
-        {
-            final Element dep = (Element) deps.item(i);
-            final String className = dep.getAttribute("class-name");
-            if (className != null && className.length() > 0)
-            {
-                classes.add(className);
-            }
-        }
-        return classes.toArray(new String[classes.size()]);
-    }
-
-    /**
-     * Extracts the required schemes from a provider definition.
-     */
-    private String[] getRequiredSchemes(final Element providerDef)
-    {
-        final ArrayList<String> schemes = new ArrayList<String>();
-        final NodeList deps = providerDef.getElementsByTagName("if-available");
-        final int count = deps.getLength();
-        for (int i = 0; i < count; i++)
-        {
-            final Element dep = (Element) deps.item(i);
-            final String scheme = dep.getAttribute("scheme");
-            if (scheme != null && scheme.length() > 0)
-            {
-                schemes.add(scheme);
-            }
-        }
-        return schemes.toArray(new String[schemes.size()]);
-    }
-
-    /**
-     * Extracts the schema names from a provider definition.
-     */
-    private String[] getSchemas(final Element provider)
-    {
-        final ArrayList<String> schemas = new ArrayList<String>();
-        final NodeList schemaElements = provider.getElementsByTagName("scheme");
-        final int count = schemaElements.getLength();
-        for (int i = 0; i < count; i++)
-        {
-            final Element scheme = (Element) schemaElements.item(i);
-            schemas.add(scheme.getAttribute("name"));
-        }
-        return schemas.toArray(new String[schemas.size()]);
-    }
-
-    /**
-     * Creates a provider.
-     */
-    private Object createInstance(final String className)
-        throws FileSystemException
-    {
-        try
-        {
-            Class<?> clazz = loadClass(className);
-            return clazz.newInstance();
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.impl/create-provider.error", className, e);
-        }
-    }
-
-    /**
-     * Load a class from different class loaders.
-     * @throws ClassNotFoundException if last {@code loadClass} failed.
-     * @see #findClassLoader()
-     */
-    private Class< ? > loadClass(String className) throws ClassNotFoundException
-    {
-        try
-        {
-            return findClassLoader().loadClass(className);
-        }
-        catch (final ClassNotFoundException e)
-        {
-            return getClass().getClassLoader().loadClass(className);
-        }
-    }
-
-    /**
-     * Resolve resources from different class loaders.
-     * @throws IOException if {@code getResource} failed.
-     * @see #findClassLoader()
-     */
-    private Enumeration<URL> loadResources(String name) throws IOException
-    {
-        Enumeration<URL> res = findClassLoader().getResources(name);
-        if (res == null || !res.hasMoreElements())
-        {
-            res = getClass().getClassLoader().getResources(name);
-        }
-        return res;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/SynchronizedFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/SynchronizedFileObject.java
deleted file mode 100644
index a65023f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/SynchronizedFileObject.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.impl;
-
-import java.util.List;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.NameScope;
-
-/**
- * This decorator synchronize all access to the FileObject.
- */
-public class SynchronizedFileObject extends DecoratedFileObject
-{
-    public SynchronizedFileObject(final FileObject fileObject)
-    {
-        super(fileObject);
-    }
-
-    @Override
-    public void close() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            super.close();
-        }
-    }
-
-    @Override
-    public void copyFrom(final FileObject srcFile, final FileSelector selector) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            super.copyFrom(srcFile, selector);
-        }
-    }
-
-    @Override
-    public void createFile() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            super.createFile();
-        }
-    }
-
-    @Override
-    public void createFolder() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            super.createFolder();
-        }
-    }
-
-    @Override
-    public boolean delete() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.delete();
-        }
-    }
-
-    @Override
-    public int delete(final FileSelector selector) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.delete(selector);
-        }
-    }
-
-    @Override
-    public boolean exists() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.exists();
-        }
-    }
-
-    @Override
-    public void findFiles(final FileSelector selector, final boolean depthwise, final List<FileObject> selected)
-            throws FileSystemException
-    {
-        synchronized (this)
-        {
-            super.findFiles(selector, depthwise, selected);
-        }
-    }
-
-    @Override
-    public FileObject[] findFiles(final FileSelector selector) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.findFiles(selector);
-        }
-    }
-
-    @Override
-    public FileObject getChild(final String name) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.getChild(name);
-        }
-    }
-
-    @Override
-    public FileObject[] getChildren() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.getChildren();
-        }
-    }
-
-    @Override
-    public FileContent getContent() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.getContent();
-        }
-    }
-
-    @Override
-    public FileType getType() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.getType();
-        }
-    }
-
-    @Override
-    public boolean isHidden() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.isHidden();
-        }
-    }
-
-    @Override
-    public boolean isReadable() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.isReadable();
-        }
-    }
-
-    @Override
-    public boolean isWriteable() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.isWriteable();
-        }
-    }
-
-    @Override
-    public boolean isExecutable() throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.isExecutable();
-        }
-    }
-
-    @Override
-    public boolean setReadable(final boolean readable, final boolean ownerOnly) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.setReadable(readable, ownerOnly);
-        }
-    }
-
-    @Override
-    public boolean setWritable(final boolean writable, final boolean ownerOnly) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.setWritable(writable, ownerOnly);
-        }
-    }
-
-    @Override
-    public boolean setExecutable(final boolean executable, final boolean ownerOnly) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.setExecutable(executable, ownerOnly);
-        }
-    }
-
-    @Override
-    public void moveTo(final FileObject destFile) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            super.moveTo(destFile);
-        }
-    }
-
-    @Override
-    public FileObject resolveFile(final String name, final NameScope scope) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.resolveFile(name, scope);
-        }
-    }
-
-    @Override
-    public FileObject resolveFile(final String path) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            return super.resolveFile(path);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/URLStreamHandlerProxy.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/URLStreamHandlerProxy.java
deleted file mode 100644
index ded84b4..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/URLStreamHandlerProxy.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.commons.vfs2.impl;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-/**
- * A proxy for URLs that are supported by the standard stream handler factory.
- */
-class URLStreamHandlerProxy
-    extends URLStreamHandler
-{
-    @Override
-    protected URLConnection openConnection(final URL url)
-        throws IOException
-    {
-        final URL proxyURL = new URL(url.toExternalForm());
-        return proxyURL.openConnection();
-    }
-
-    @Override
-    protected void parseURL(final URL u,
-                            final String spec,
-                            final int start,
-                            final int limit)
-    {
-        try
-        {
-            final URL url = new URL(u, spec);
-            setURL(u, url.getProtocol(), url.getHost(),
-                url.getPort(), url.getAuthority(), url.getUserInfo(),
-                url.getFile(), url.getQuery(), url.getRef());
-        }
-        catch (final MalformedURLException mue)
-        {
-            //We retrow this as a simple runtime exception.
-            //It is retrown in URL as a MalformedURLException anyway.
-            throw new RuntimeException(mue.getMessage());
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VFSClassLoader.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VFSClassLoader.java
deleted file mode 100644
index e5e07dc..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VFSClassLoader.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.impl;
-
-import java.io.IOException;
-import java.net.URL;
-import java.security.CodeSource;
-import java.security.Permission;
-import java.security.PermissionCollection;
-import java.security.Permissions;
-import java.security.SecureClassLoader;
-import java.security.cert.Certificate;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.jar.Attributes;
-import java.util.jar.Attributes.Name;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.NameScope;
-
-
-/**
- * A class loader that can load classes and resources from a search path.
- * <p>
- * The search path can consist of VFS FileObjects referring both to folders
- * and JAR files. Any FileObject of type FileType.FILE is assumed to be a JAR and
- * is opened by creating a layered file system with the "jar" scheme.
- * <p>
- * TODO - Test this with signed Jars and a SecurityManager.
- *
- * @see FileSystemManager#createFileSystem
- */
-public class VFSClassLoader extends SecureClassLoader
-{
-    private final ArrayList<FileObject> resources = new ArrayList<FileObject>();
-
-    /**
-     * Constructors a new VFSClassLoader for the given file.
-     *
-     * @param file    the file to load the classes and resources from.
-     * @param manager the FileManager to use when trying create a layered Jar file
-     *                system.
-     * @throws FileSystemException if an error occurs.
-     */
-    public VFSClassLoader(final FileObject file,
-                          final FileSystemManager manager)
-        throws FileSystemException
-    {
-        this(new FileObject[]{file}, manager, null);
-    }
-
-    /**
-     * Constructors a new VFSClassLoader for the given file.
-     *
-     * @param file    the file to load the classes and resources from.
-     * @param manager the FileManager to use when trying create a layered Jar file
-     *                system.
-     * @param parent  the parent class loader for delegation.
-     * @throws FileSystemException if an error occurs.
-     */
-    public VFSClassLoader(final FileObject file,
-                          final FileSystemManager manager,
-                          final ClassLoader parent)
-        throws FileSystemException
-    {
-        this(new FileObject[]{file}, manager, parent);
-    }
-
-    /**
-     * Constructors a new VFSClassLoader for the given files.  The files will
-     * be searched in the order specified.
-     *
-     * @param files   the files to load the classes and resources from.
-     * @param manager the FileManager to use when trying create a layered Jar file
-     *                system.
-     * @throws FileSystemException if an error occurs.
-     */
-    public VFSClassLoader(final FileObject[] files,
-                          final FileSystemManager manager)
-        throws FileSystemException
-    {
-        this(files, manager, null);
-    }
-
-    /**
-     * Constructors a new VFSClassLoader for the given FileObjects.
-     * The FileObjects will be searched in the order specified.
-     *
-     * @param files   the FileObjects to load the classes and resources from.
-     * @param manager the FileManager to use when trying create a layered Jar file
-     *                system.
-     * @param parent  the parent class loader for delegation.
-     * @throws FileSystemException if an error occurs.
-     */
-    public VFSClassLoader(final FileObject[] files,
-                          final FileSystemManager manager,
-                          final ClassLoader parent) throws FileSystemException
-    {
-        super(parent);
-        addFileObjects(manager, files);
-    }
-
-    /**
-     * Provide access to the file objects this class loader represents.
-     *
-     * @return An array of FileObjects.
-     * @since 2.0
-     */
-    public FileObject[] getFileObjects()
-    {
-        return resources.toArray(new FileObject[resources.size()]);
-    }
-
-    /**
-     * Appends the specified FileObjects to the list of FileObjects to search
-     * for classes and resources.
-     *
-     * @param manager The FileSystemManager.
-     * @param files the FileObjects to append to the search path.
-     * @throws FileSystemException if an error occurs.
-     */
-    private void addFileObjects(final FileSystemManager manager,
-                                final FileObject[] files) throws FileSystemException
-    {
-        for (FileObject file : files)
-        {
-            if (!file.exists())
-            {
-                // Does not exist - skip
-                continue;
-            }
-
-            // TODO - use federation instead
-            if (manager.canCreateFileSystem(file))
-            {
-                // Use contents of the file
-                file = manager.createFileSystem(file);
-            }
-
-            resources.add(file);
-        }
-    }
-
-    /**
-     * Finds and loads the class with the specified name from the search
-     * path.
-     *
-     * @throws ClassNotFoundException if the class is not found.
-     */
-    @Override
-    protected Class<?> findClass(final String name) throws ClassNotFoundException
-    {
-        try
-        {
-            final String path = name.replace('.', '/').concat(".class");
-            final Resource res = loadResource(path);
-            if (res == null)
-            {
-                throw new ClassNotFoundException(name);
-            }
-            return defineClass(name, res);
-        }
-        catch (final IOException ioe)
-        {
-            throw new ClassNotFoundException(name, ioe);
-        }
-    }
-
-    /**
-     * Loads and verifies the class with name and located with res.
-     */
-    private Class<?> defineClass(final String name, final Resource res)
-        throws IOException
-    {
-        final URL url = res.getCodeSourceURL();
-        final String pkgName = res.getPackageName();
-        if (pkgName != null)
-        {
-            final Package pkg = getPackage(pkgName);
-            if (pkg != null)
-            {
-                if (pkg.isSealed())
-                {
-                    if (!pkg.isSealed(url))
-                    {
-                        throw new FileSystemException("vfs.impl/pkg-sealed-other-url", pkgName);
-                    }
-                }
-                else
-                {
-                    if (isSealed(res))
-                    {
-                        throw new FileSystemException("vfs.impl/pkg-sealing-unsealed", pkgName);
-                    }
-                }
-            }
-            else
-            {
-                definePackage(pkgName, res);
-            }
-        }
-
-        final byte[] bytes = res.getBytes();
-        final Certificate[] certs =
-            res.getFileObject().getContent().getCertificates();
-        final CodeSource cs = new CodeSource(url, certs);
-        return defineClass(name, bytes, 0, bytes.length, cs);
-    }
-
-    /**
-     * Returns true if the we should seal the package where res resides.
-     */
-    private boolean isSealed(final Resource res)
-        throws FileSystemException
-    {
-        final String sealed = res.getPackageAttribute(Attributes.Name.SEALED);
-        return "true".equalsIgnoreCase(sealed);
-    }
-
-    /**
-     * Reads attributes for the package and defines it.
-     */
-    private Package definePackage(final String name,
-                                  final Resource res)
-        throws FileSystemException
-    {
-        // TODO - check for MANIFEST_ATTRIBUTES capability first
-        final String specTitle = res.getPackageAttribute(Name.SPECIFICATION_TITLE);
-        final String specVendor = res.getPackageAttribute(Attributes.Name.SPECIFICATION_VENDOR);
-        final String specVersion = res.getPackageAttribute(Name.SPECIFICATION_VERSION);
-        final String implTitle = res.getPackageAttribute(Name.IMPLEMENTATION_TITLE);
-        final String implVendor = res.getPackageAttribute(Name.IMPLEMENTATION_VENDOR);
-        final String implVersion = res.getPackageAttribute(Name.IMPLEMENTATION_VERSION);
-
-        final URL sealBase;
-        if (isSealed(res))
-        {
-            sealBase = res.getCodeSourceURL();
-        }
-        else
-        {
-            sealBase = null;
-        }
-
-        return definePackage(name, specTitle, specVersion, specVendor,
-            implTitle, implVersion, implVendor, sealBase);
-    }
-
-    /**
-     * Calls super.getPermissions both for the code source and also
-     * adds the permissions granted to the parent layers.
-     * @param cs the CodeSource.
-     * @return The PermissionCollections.
-     */
-    @Override
-    protected PermissionCollection getPermissions(final CodeSource cs)
-    {
-        try
-        {
-            final String url = cs.getLocation().toString();
-            final FileObject file = lookupFileObject(url);
-            if (file == null)
-            {
-                return super.getPermissions(cs);
-            }
-
-            final FileObject parentLayer = file.getFileSystem().getParentLayer();
-            if (parentLayer == null)
-            {
-                return super.getPermissions(cs);
-            }
-
-            final Permissions combi = new Permissions();
-            PermissionCollection permCollect = super.getPermissions(cs);
-            copyPermissions(permCollect, combi);
-
-            for (FileObject parent = parentLayer;
-                 parent != null;
-                 parent = parent.getFileSystem().getParentLayer())
-            {
-                final CodeSource parentcs =
-                    new CodeSource(parent.getURL(),
-                        parent.getContent().getCertificates());
-                permCollect = super.getPermissions(parentcs);
-                copyPermissions(permCollect, combi);
-            }
-
-            return combi;
-        }
-        catch (final FileSystemException fse)
-        {
-            throw new SecurityException(fse.getMessage());
-        }
-    }
-
-    /**
-     * Copies the permissions from src to dest.
-     * @param src The source PermissionCollection.
-     * @param dest The destination PermissionCollection.
-     */
-    protected void copyPermissions(final PermissionCollection src,
-                                   final PermissionCollection dest)
-    {
-        for (final Enumeration<Permission> elem = src.elements(); elem.hasMoreElements();)
-        {
-            final Permission permission = elem.nextElement();
-            dest.add(permission);
-        }
-    }
-
-    /**
-     * Does a reverse lookup to find the FileObject when we only have the
-     * URL.
-     */
-    private FileObject lookupFileObject(final String name)
-    {
-        final Iterator<FileObject> it = resources.iterator();
-        while (it.hasNext())
-        {
-            final FileObject object = it.next();
-            if (name.equals(object.getName().getURI()))
-            {
-                return object;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Finds the resource with the specified name from the search path.
-     * This returns null if the resource is not found.
-     * @param name The resource name.
-     * @return The URL that matches the resource.
-     */
-    @Override
-    protected URL findResource(final String name)
-    {
-        try
-        {
-            final Resource res = loadResource(name);
-            if (res != null)
-            {
-                return res.getURL();
-            }
-            return null;
-        }
-        catch (final Exception ignored)
-        {
-            return null; // TODO: report?
-        }
-    }
-
-    /**
-     * Returns an Enumeration of all the resources in the search path
-     * with the specified name.
-     * <p>
-     * Gets called from {@link ClassLoader#getResources(String)} after
-     * parent class loader was questioned.
-     *
-     * @param name The resources to find.
-     * @return An Enumeration of the resources associated with the name.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    protected Enumeration<URL> findResources(final String name) throws IOException
-    {
-        final List<URL> result = new ArrayList<URL>(2);
-
-        for (FileObject baseFile : resources)
-        {
-            final FileObject file = baseFile.resolveFile(name, NameScope.DESCENDENT_OR_SELF);
-            if (file.exists())
-            {
-                result.add(new Resource(name, baseFile, file).getURL());
-            }
-        }
-
-        return Collections.enumeration(result);
-    }
-
-    /**
-     * Searches through the search path of for the first class or resource
-     * with specified name.
-     * @param name The resource to load.
-     * @return The Resource.
-     * @throws FileSystemException if an error occurs.
-     */
-    private Resource loadResource(final String name) throws FileSystemException
-    {
-        for (final FileObject baseFile : resources)
-        {
-            final FileObject file = baseFile.resolveFile(name, NameScope.DESCENDENT_OR_SELF);
-            if (file.exists())
-            {
-                return new Resource(name, baseFile, file);
-            }
-        }
-        return null;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VirtualFileName.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VirtualFileName.java
deleted file mode 100644
index c3defbf..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VirtualFileName.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.commons.vfs2.impl;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-
-/**
- * A simple Filename to hold the scheme for to be created virtual filesytsem.
- */
-public class VirtualFileName extends AbstractFileName
-{
-    public VirtualFileName(final String scheme, final String absPath, final FileType type)
-    {
-        super(scheme, absPath, type);
-    }
-
-    @Override
-    public FileName createName(final String absPath, final FileType type)
-    {
-        return new VirtualFileName(getScheme(), absPath, type);
-    }
-
-    @Override
-    protected void appendRootUri(final StringBuilder buffer, final boolean addPassword)
-    {
-        buffer.append(getScheme());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VirtualFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VirtualFileProvider.java
deleted file mode 100644
index 3556b63..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VirtualFileProvider.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.commons.vfs2.impl;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.provider.AbstractVfsContainer;
-
-
-/**
- * A virtual filesystem provider.
- */
-public class VirtualFileProvider extends AbstractVfsContainer
-{
-    /**
-     * Creates a virtual file system, with the supplied file as its root.
-     *
-     * @param rootFile The root of the file system.
-     * @return A FileObject in the FileSystem.
-     * @throws FileSystemException if an error occurs.
-     */
-    public FileObject createFileSystem(final FileObject rootFile) throws FileSystemException
-    {
-        final AbstractFileName rootName = (AbstractFileName)
-            getContext().getFileSystemManager().resolveName(rootFile.getName(), FileName.ROOT_PATH);
-        final VirtualFileSystem fs = new VirtualFileSystem(rootName, rootFile.getFileSystem().getFileSystemOptions());
-        addComponent(fs);
-        fs.addJunction(FileName.ROOT_PATH, rootFile);
-        return fs.getRoot();
-    }
-
-    /**
-     * Creates an empty virtual file system.
-     *
-     * @param rootUri The root of the file system.
-     * @return A FileObject in the FileSystem.
-     * @throws FileSystemException if an error occurs.
-     */
-    public FileObject createFileSystem(final String rootUri) throws FileSystemException
-    {
-        final AbstractFileName rootName =
-            new VirtualFileName(rootUri, FileName.ROOT_PATH, FileType.FOLDER);
-        final VirtualFileSystem fs = new VirtualFileSystem(rootName, null);
-        addComponent(fs);
-        return fs.getRoot();
-    }
-
-    /**
-     * Close a VirtualFileSystem by removing it from the
-     * {@code #components} list of this provider.
-     * <p>
-     * This gets called from DefaultFileManager#_closeFileSystem.
-     *
-     * @param filesystem the file system remembered by this provider.
-     */
-    void closeFileSystem(final FileSystem filesystem)
-    {
-        final AbstractFileSystem fs = (AbstractFileSystem) filesystem;
-
-        removeComponent(fs);
-        fs.close();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VirtualFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VirtualFileSystem.java
deleted file mode 100644
index 22cc39a..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/VirtualFileSystem.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.impl;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.provider.DelegateFileObject;
-
-/**
- * A logical file system, made up of set of junctions, or links, to files from
- * other file systems.
- * <p>
- * TODO - Handle nested junctions.
- */
-public class VirtualFileSystem extends AbstractFileSystem
-{
-    private final Map<FileName, FileObject> junctions = new HashMap<FileName, FileObject>();
-
-    public VirtualFileSystem(final AbstractFileName rootName, final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, null, fileSystemOptions);
-    }
-
-    /**
-     * Adds the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        // TODO - this isn't really true
-        caps.add(Capability.ATTRIBUTES);
-        caps.add(Capability.CREATE);
-        caps.add(Capability.DELETE);
-        caps.add(Capability.GET_TYPE);
-        caps.add(Capability.JUNCTIONS);
-        caps.add(Capability.GET_LAST_MODIFIED);
-        caps.add(Capability.SET_LAST_MODIFIED_FILE);
-        caps.add(Capability.SET_LAST_MODIFIED_FOLDER);
-        caps.add(Capability.LIST_CHILDREN);
-        caps.add(Capability.READ_CONTENT);
-        caps.add(Capability.SIGNING);
-        caps.add(Capability.WRITE_CONTENT);
-        caps.add(Capability.APPEND_CONTENT);
-    }
-
-    /**
-     * Creates a file object.  This method is called only if the requested
-     * file is not cached.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws Exception
-    {
-        // Find the file that the name points to
-        final FileName junctionPoint = getJunctionForFile(name);
-        final FileObject file;
-        if (junctionPoint != null)
-        {
-            // Resolve the real file
-            final FileObject junctionFile = junctions.get(junctionPoint);
-            final String relName = junctionPoint.getRelativeName(name);
-            file = junctionFile.resolveFile(relName, NameScope.DESCENDENT_OR_SELF);
-        }
-        else
-        {
-            file = null;
-        }
-
-        // Return a wrapper around the file
-        return new DelegateFileObject(name, this, file);
-    }
-
-    /**
-     * Adds a junction to this file system.
-     * @param junctionPoint The location of the junction.
-     * @param targetFile The target file to base the junction on.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void addJunction(final String junctionPoint,
-                            final FileObject targetFile)
-        throws FileSystemException
-    {
-        final FileName junctionName = getFileSystemManager().resolveName(getRootName(), junctionPoint);
-
-        // Check for nested junction - these are not supported yet
-        if (getJunctionForFile(junctionName) != null)
-        {
-            throw new FileSystemException("vfs.impl/nested-junction.error", junctionName);
-        }
-
-        try
-        {
-            // Add to junction table
-            junctions.put(junctionName, targetFile);
-
-            // Attach to file
-            final DelegateFileObject junctionFile = (DelegateFileObject) getFileFromCache(junctionName);
-            if (junctionFile != null)
-            {
-                junctionFile.setFile(targetFile);
-            }
-
-            // Create ancestors of junction point
-            FileName childName = junctionName;
-            boolean done = false;
-            for (AbstractFileName parentName = (AbstractFileName) childName.getParent();
-                 !done && parentName != null;
-                 childName = parentName, parentName = (AbstractFileName) parentName.getParent())
-            {
-                DelegateFileObject file = (DelegateFileObject) getFileFromCache(parentName);
-                if (file == null)
-                {
-                    file = new DelegateFileObject(parentName, this, null);
-                    putFileToCache(file);
-                }
-                else
-                {
-                    done = file.exists();
-                }
-
-                // As this is the parent of our junction it has to be a folder
-                file.attachChild(childName, FileType.FOLDER);
-            }
-
-            // TODO - attach all cached children of the junction point to their real file
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.impl/create-junction.error", junctionName, e);
-        }
-    }
-
-    /**
-     * Removes a junction from this file system.
-     * @param junctionPoint The junction to remove.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void removeJunction(final String junctionPoint)
-        throws FileSystemException
-    {
-        final FileName junctionName = getFileSystemManager().resolveName(getRootName(), junctionPoint);
-        junctions.remove(junctionName);
-
-        // TODO - remove from parents of junction point
-        // TODO - detach all cached children of the junction point from their real file
-    }
-
-    /**
-     * Locates the junction point for the junction containing the given file.
-     * @param name The FileName.
-     * @return the FileName where the junction occurs.
-     */
-    private FileName getJunctionForFile(final FileName name)
-    {
-        if (junctions.containsKey(name))
-        {
-            // The name points to the junction point directly
-            return name;
-        }
-
-        // Find matching junction
-        for (final FileName junctionPoint : junctions.keySet())
-        {
-            if (junctionPoint.isDescendent(name))
-            {
-                return junctionPoint;
-            }
-        }
-
-        // None
-        return null;
-    }
-
-    @Override
-    public void close()
-    {
-        super.close();
-        junctions.clear();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/package.html
deleted file mode 100644
index 5fd7b1a..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/package.html
+++ /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.
--->
-<body>
-<p>The standard VFS implementation.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/providers.xml b/trunk/core/src/main/java/org/apache/commons/vfs2/impl/providers.xml
deleted file mode 100644
index f8d571c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/impl/providers.xml
+++ /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.
--->
-<providers>
-    <default-provider class-name="org.apache.commons.vfs2.provider.url.UrlFileProvider">
-    </default-provider>
-    <provider class-name="org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider">
-        <scheme name="file"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.zip.ZipFileProvider">
-        <scheme name="zip"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.tar.TarFileProvider">
-        <scheme name="tar"/>
-        <if-available class-name="org.apache.commons.compress.archivers.tar.TarArchiveOutputStream"/>
-    </provider>
-
-    <provider class-name="org.apache.commons.vfs2.provider.bzip2.Bzip2FileProvider">
-        <scheme name="bz2"/>
-        <if-available class-name="org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.gzip.GzipFileProvider">
-        <scheme name="gz"/>
-    </provider>
-
-    <provider class-name="org.apache.commons.vfs2.provider.jar.JarFileProvider">
-        <scheme name="jar"/>
-        <scheme name="sar"/>
-        <scheme name="ear"/>
-        <scheme name="par"/>
-        <scheme name="ejb3"/>
-        <scheme name="war"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.temp.TemporaryFileProvider">
-        <scheme name="tmp"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.ftp.FtpFileProvider">
-        <scheme name="ftp"/>
-        <if-available class-name="org.apache.commons.net.ftp.FTPFile"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.ftps.FtpsFileProvider">
-        <scheme name="ftps"/>
-        <if-available class-name="org.apache.commons.net.ftp.FTPFile"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.http.HttpFileProvider">
-        <scheme name="http"/>
-        <if-available class-name="org.apache.commons.httpclient.HttpClient"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.https.HttpsFileProvider">
-        <scheme name="https"/>
-        <if-available class-name="org.apache.commons.httpclient.HttpClient"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.sftp.SftpFileProvider">
-        <scheme name="sftp"/>
-        <if-available class-name="javax.crypto.Cipher"/>
-        <if-available class-name="com.jcraft.jsch.JSch"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.res.ResourceFileProvider">
-        <scheme name="res"/>
-    </provider>
-        <provider class-name="org.apache.commons.vfs2.provider.webdav.WebdavFileProvider">
-        <scheme name="webdav"/>
-        <if-available class-name="org.apache.commons.httpclient.HttpClient"/>
-        <if-available class-name="org.apache.jackrabbit.webdav.client.methods.DavMethod"/>
-    </provider>
-    <!--
-    <provider class-name="org.apache.commons.vfs2.provider.svn.SvnFileProvider">
-        <scheme name="svnhttps"/>
-    </provider>
-    -->
-    <!--
-        <provider class-name="org.apache.commons.vfs2.provider.tar.TgzFileProvider">
-            <scheme name="tgz"/>
-            <if-available scheme="gz"/>
-            <if-available scheme="tar"/>
-        </provider>
-        <provider class-name="org.apache.commons.vfs2.provider.tar.Tbz2FileProvider">
-            <scheme name="tbz2"/>
-            <if-available scheme="bz2"/>
-            <if-available scheme="tar"/>
-        </provider>
-    -->
-    <provider class-name="org.apache.commons.vfs2.provider.tar.TarFileProvider">
-        <scheme name="tgz"/>
-        <if-available scheme="gz"/>
-        <if-available scheme="tar"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.tar.TarFileProvider">
-        <scheme name="tbz2"/>
-        <if-available scheme="bz2"/>
-        <if-available scheme="tar"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.ram.RamFileProvider">
-        <scheme name="ram"/>
-    </provider>
-    <provider class-name="org.apache.commons.vfs2.provider.hdfs.HdfsFileProvider">
-        <scheme name="hdfs"/>
-        <if-available class-name="org.apache.hadoop.fs.FileSystem"/>
-    </provider>
-
-    <extension-map extension="zip" scheme="zip"/>
-    <extension-map extension="tar" scheme="tar"/>
-    <mime-type-map mime-type="application/zip" scheme="zip"/>
-    <mime-type-map mime-type="application/x-tar" scheme="tar"/>
-    <mime-type-map mime-type="application/x-gzip" scheme="gz"/>
-    <!--
-    <mime-type-map mime-type="application/x-tgz" scheme="tgz"/>
-    -->
-    <extension-map extension="jar" scheme="jar"/>
-    <extension-map extension="bz2" scheme="bz2"/>
-    <extension-map extension="gz" scheme="gz"/>
-    <!--
-    <extension-map extension="tgz" scheme="tgz"/>
-    <extension-map extension="tbz2" scheme="tbz2"/>
-    -->
-    <extension-map extension="tgz" scheme="tar"/>
-    <extension-map extension="tbz2" scheme="tar"/>
-
-    <!--
-    <filter-map class-name="org.apache.commons.vfs2.content.bzip2.Bzip2Compress">
-        <extension name="bz2"/>
-        <extension name="tbz2"/>
-        <if-available class-name="org.apache.commons.compress.bzip2.CBZip2InputStream"/>
-    </filter-map>
-    <filter-map class-name="org.apache.commons.vfs2.content.gzip.GzipCompress">
-        <extension name="gz"/>
-        <extension name="tgz"/>
-        <mime-type name="application/x-tgz" />
-    </filter-map>
-    -->
-</providers>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/AbstractFileOperation.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/AbstractFileOperation.java
deleted file mode 100644
index 41c3c04..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/AbstractFileOperation.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.commons.vfs2.operations;
-
-import org.apache.commons.vfs2.FileObject;
-
-/**
- *
- * @since 0.1
- */
-public abstract class AbstractFileOperation implements FileOperation
-{
-    /**
-     * FileObject which the FileOperation is operate on.
-     */
-    private final FileObject fileObject;
-
-    /**
-     * @param file The FileObject.
-     */
-    public AbstractFileOperation(final FileObject file)
-    {
-        fileObject = file;
-    }
-
-    /**
-     * @return an instance of FileObject which this FileOperation is operate on.
-     */
-    protected FileObject getFileObject()
-    {
-        return fileObject;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/AbstractFileOperationProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/AbstractFileOperationProvider.java
deleted file mode 100644
index 5707fa4..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/AbstractFileOperationProvider.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.commons.vfs2.operations;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-
-
-/**
- *
- * @since 0.1
- */
-public abstract class AbstractFileOperationProvider implements FileOperationProvider
-{
-
-    /**
-     * Available operations. Operations could be registered for different schemes.
-     * Some operations can work only for "file" scheme, other - for "svnhttp(s)",
-     * "svn", "svnssh", but not for "file", etc. The Map has scheme as a key and
-     * Collection of operations that are available for that scheme.
-     */
-    private final Collection<Class<? extends FileOperation>> operations =
-        new ArrayList<Class<? extends FileOperation>>();
-
-    /**
-     * Gather available operations for the specified FileObject and put them into
-     * specified operationsList.
-     *
-     * @param operationsList
-     *            the list of available operations for the specified FileObject.
-     *            The operationList contains classes of available operations, e.g.
-     *            Class objects.
-     * @param file
-     *            the FileObject for which we want to get the list of available
-     *            operations.
-     * @throws FileSystemException if list of operations cannot be retrieved.
-     */
-    @Override
-    public final void collectOperations(final Collection<Class<? extends FileOperation>> operationsList,
-            final FileObject file) throws FileSystemException
-    {
-        doCollectOperations(operations, operationsList, file);
-    }
-
-    /**
-     * Gather available operations for the specified FileObject and put them into
-     * specified operationsList.
-     *
-     * @param availableOperations
-     *            the list of available operations for the specified FileObject.
-     * @param resultList
-     *            List to be filled with applicable operations.
-     * @param file
-     *            the FileObject for which we want to get the list of available
-     *            operations.
-     * @throws FileSystemException if list of operations cannot be retrieved.
-     * @see #collectOperations(Collection operationsList, FileObject file)
-     */
-    protected abstract void doCollectOperations(
-            final Collection<Class<? extends FileOperation>> availableOperations,
-            final Collection<Class<? extends FileOperation>> resultList,
-            final FileObject file) throws FileSystemException;
-
-    /**
-     * @param file
-     *            the FileObject for which we need a operation.
-     * @param operationClass
-     *            the Class which instance we are needed.
-     * @return the required operation instance.
-     * @throws FileSystemException if operation cannot be retrieved.
-     */
-    @Override
-    public final FileOperation getOperation(final FileObject file, final Class<? extends FileOperation> operationClass)
-            throws FileSystemException
-    {
-        final Class<? extends FileOperation> implementation = lookupOperation(operationClass);
-
-        final FileOperation operationInstance = instantiateOperation(file, implementation);
-
-        return operationInstance;
-    }
-
-    /**
-     * Get operation instance for specified FileOperation subclass.
-     *
-     * @param file the file this operation should act on.
-     * @param operationClass the class of an file operation interface to instantiate.
-     * @return a new file operation
-     * @throws FileSystemException if operation cannot be instantiated.
-     */
-    protected abstract FileOperation instantiateOperation(final FileObject file,
-            final Class<? extends FileOperation> operationClass) throws FileSystemException;
-
-    /**
-     * Find class implementing a specific operation interface.
-     *
-     * @param operationClass the interface which is requested.
-     * @return never returns null
-     * @throws FileSystemException if operationClass is not a known FileOperation interface.
-     */
-    protected final Class<? extends FileOperation> lookupOperation(final Class<? extends FileOperation> operationClass)
-            throws FileSystemException
-    {
-        // check validity of passed class
-        if (!FileOperation.class.isAssignableFrom(operationClass))
-        {
-            throw new FileSystemException("vfs.operation/wrong-type.error", operationClass);
-        }
-
-        // find appropriate class
-        Class<? extends FileOperation> foundClass = null;
-        final Iterator<Class<? extends FileOperation>> iterator = operations.iterator();
-        while (iterator.hasNext())
-        {
-            final Class<? extends FileOperation> operation = iterator.next();
-            if (operationClass.isAssignableFrom(operation))
-            {
-                foundClass = operation;
-                break;
-            }
-        }
-
-        if (foundClass == null)
-        {
-            throw new FileSystemException("vfs.operation/not-found.error", operationClass);
-        }
-
-        return foundClass;
-    }
-
-    /**
-     * Add new FileOperation to list of known operations.
-     *
-     * @param operationClass a class implementing FileOperation.
-     * @throws FileSystemException if instances of the class cannot be assigned to FileOperation.
-     */
-    protected final void addOperation(final Class<? extends FileOperation> operationClass)
-            throws FileSystemException
-    {
-        // check validity of passed class
-        if (!FileOperation.class.isAssignableFrom(operationClass))
-        {
-            throw new FileSystemException("vfs.operation/cant-register.error", operationClass);
-        }
-
-        // ok, lets add it to the list
-        operations.add(operationClass);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/DefaultFileOperations.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/DefaultFileOperations.java
deleted file mode 100644
index c92c1c8..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/DefaultFileOperations.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.commons.vfs2.operations;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-
-/**
- *
- * @since 0.1
- */
-public class DefaultFileOperations implements FileOperations
-{
-    /**
-     */
-    private final FileSystemManager fsmanager;
-
-    /**
-     */
-    private final FileObject fileObject;
-
-    /**
-     *
-     * @param file The file.
-     */
-    public DefaultFileOperations(final FileObject file)
-    {
-        fileObject = file;
-
-        fsmanager = file.getFileSystem().getFileSystemManager();
-    }
-
-    /**
-     * @return The operation classes.
-     * @throws FileSystemException If an error occurs.
-     */
-    @Override
-    public Class<? extends FileOperation>[] getOperations() throws FileSystemException
-    {
-
-        final String scheme = fileObject.getURL().getProtocol();
-        final FileOperationProvider[] providers = fsmanager
-                .getOperationProviders(scheme);
-
-        if (providers == null)
-        {
-            return null;
-        }
-
-        final List<Class<? extends FileOperation>> operations = new ArrayList<Class<? extends FileOperation>>();
-
-        for (final FileOperationProvider provider : providers)
-        {
-            provider.collectOperations(operations, fileObject);
-        }
-
-        @SuppressWarnings("unchecked")
-        final
-        Class<? extends FileOperation>[] array =
-            (Class<? extends FileOperation>[]) operations.toArray(new Class<?>[] {});
-        return array;
-    }
-
-    /**
-     * @param operationClass The Class that performs the operation.
-     * @return The FileOperation.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileOperation getOperation(final Class<? extends FileOperation> operationClass)
-            throws FileSystemException
-    {
-
-        final String scheme = fileObject.getURL().getProtocol();
-        final FileOperationProvider[] providers = fsmanager
-                .getOperationProviders(scheme);
-
-        if (providers == null)
-        {
-            throw new FileSystemException(
-                    "vfs.operation/operation-not-supported.error", operationClass);
-        }
-
-        FileOperation resultOperation = null;
-
-        for (final FileOperationProvider provider : providers)
-        {
-            resultOperation = provider.getOperation(fileObject, operationClass);
-
-            if (resultOperation != null)
-            {
-                break;
-            }
-        }
-
-        if (resultOperation == null)
-        {
-            throw new FileSystemException(
-                    "vfs.operation/operation-not-supported.error", operationClass);
-        }
-
-        return resultOperation;
-    }
-
-    /**
-     * @param operationClass the operation's class.
-     * @return true if the operation of specified class is supported for current
-     *         FileObject and false otherwise.
-     *
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean hasOperation(final Class<? extends FileOperation> operationClass) throws FileSystemException
-    {
-        final Class<? extends FileOperation>[] operations = getOperations();
-        if (operations == null)
-        {
-            return false;
-        }
-
-        for (final Class<? extends FileOperation> operation : operations)
-        {
-            if (operationClass.isAssignableFrom(operation))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/FileOperation.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/FileOperation.java
deleted file mode 100644
index 2d4d883..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/FileOperation.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.commons.vfs2.operations;
-
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * <p>
- * A FileOperation is an object that brings an extra function to a FileObject.
- * The VFS provides the basic functionality to deal with FileObject's. That is
- * create, delete, rename, copy, and so on functions. However, if you are working with
- * FileSystem and its files are, for example, under Version Control System (VCS)
- * you might want to get an access to the versioning framework and to be able to
- * manage your files regarding VCS (e.g. commit them, update, get logs, etc.).
- * Such type of extended functionality is provided by FileOperation.
- * </p>
- * <p>
- * The FileOperation interface is a genetic interface that should not be
- * implemented directly. It rather should be extended by other interfaces that
- * provide some concrete functions.
- * </p>
- * <p>
- * FileOperation is provided by
- *
- * @see FileOperationProvider Especially the FileOperationProvider is responsible
- *      for looking up and instantiating any concrete FileOperation.
- *      </p>
- *
- * @since 0.1
- */
-public interface FileOperation
-{
-
-    /**
-     * Performs necessary actions that are related to the concrete
-     * implementation of a FileOperation.
-     *
-     * @throws FileSystemException if an error occurs
-     */
-    void process() throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/FileOperationProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/FileOperationProvider.java
deleted file mode 100644
index 70e1b97..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/FileOperationProvider.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.commons.vfs2.operations;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * FileOperationProvider is responsible for dealing with FileOperation's.
- *
- * @since 0.1
- */
-public interface FileOperationProvider
-{
-
-    /**
-     * Gather available operations for the specified FileObject and put them into
-     * specified operationsList.
-     *
-     * @param operationsList
-     *            the list of available operations for the specified FileObject.
-     *            The operationList contains classes of available operations, e.g.
-     *            Class objects.
-     * @param file
-     *            the FileObject for which we want to get the list of available
-     *            operations.
-     *
-     * @throws FileSystemException
-     *             if list of operations cannot be retrieved.
-     */
-    void collectOperations(final Collection<Class<? extends FileOperation>> operationsList, final FileObject file)
-            throws FileSystemException;
-
-    /**
-     * Get implementation for a given FileObject and FileOperation interface.
-     *
-     * @param file
-     *            the FileObject for which we need a operation.
-     * @param operationClass
-     *            the Class which instance we are needed.
-     * @return the required operation instance.
-     *
-     * @throws FileSystemException
-     *             if operation cannot be retrieved.
-     */
-    FileOperation getOperation(final FileObject file, final Class<? extends FileOperation> operationClass)
-            throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/FileOperations.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/FileOperations.java
deleted file mode 100644
index b0360cc..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/FileOperations.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.commons.vfs2.operations;
-
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * FileOperations interface provides API to work with operations.
- *
- * @see FileOperation on what a operation in the context of VFS is.
- *
- * @since 0.1
- */
-public interface FileOperations
-{
-    /**
-     * @return all operations associated with the fileObject
-     * @throws FileSystemException if an error occurs.
-     */
-    Class<? extends FileOperation>[] getOperations() throws FileSystemException;
-
-    /**
-     * @param operationClass the operation Class.
-     * @return a operation implementing the given {@code operationClass}
-     * @throws FileSystemException if an error occus.
-     */
-    FileOperation getOperation(Class<? extends FileOperation> operationClass) throws FileSystemException;
-
-    /**
-     * @param operationClass the operation Class.
-     * @return if a operation {@code operationClass} is available
-     * @throws FileSystemException if an error ocurs.
-     */
-    boolean hasOperation(Class<? extends FileOperation> operationClass) throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/package.html
deleted file mode 100644
index 242e71c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/package.html
+++ /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.
--->
-<body>
-<p>VFS Operations handling.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsAdd.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsAdd.java
deleted file mode 100644
index 0d67b79..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsAdd.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.commons.vfs2.operations.vcs;
-
-import org.apache.commons.vfs2.operations.FileOperation;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsAdd extends FileOperation
-{
-    /**
-     *
-     * @param makedir true if directories should be created, false otherwise.
-     */
-    void setMakedir(final boolean makedir);
-
-    /**
-     *
-     * @param recursive true if subdirectories should be processed.
-     */
-    void setRecursive(final boolean recursive);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsCheckout.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsCheckout.java
deleted file mode 100644
index 2936514..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsCheckout.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.commons.vfs2.operations.vcs;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.operations.FileOperation;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsCheckout extends FileOperation
-{
-    /**
-     *
-     * @param revision The revision number.
-     */
-    void setRevision(final long revision);
-
-    /**
-     *
-     * @param recursive true if directories should be traversed.
-     */
-    void setRecursive(final boolean recursive);
-
-    /**
-     *
-     * @param targetDir directory under which retrieved files should be placed.
-     */
-    void setTargetDirectory(final FileObject targetDir);
-
-    /**
-     * @param export
-     *            if true, administrative .svn directoies will not be created on
-     *            the retrieved tree. The checkout operation in this case is
-     *            equivalent to export function.
-     */
-    void setExport(final boolean export);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsCommit.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsCommit.java
deleted file mode 100644
index c470f80..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsCommit.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.commons.vfs2.operations.vcs;
-
-import org.apache.commons.vfs2.operations.FileOperation;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsCommit extends FileOperation
-{
-
-    /**
-     *
-     * @param isRecursive true if directories should be traversed.
-     */
-    void setRecursive(final boolean isRecursive);
-
-    /**
-     *
-     * @param message The message.
-     */
-    void setMessage(final String message);
-
-    /**
-     *
-     * @param listener Listener that is given control when a commit occurs.
-     */
-    void addCommitListener(final VcsCommitListener listener);
-
-    /**
-     *
-     * @param listener The Listener.
-     */
-    void removeCommitListener(final VcsCommitListener listener);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsCommitListener.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsCommitListener.java
deleted file mode 100644
index 6fca045..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsCommitListener.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.commons.vfs2.operations.vcs;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsCommitListener
-{
-    /**
-     *
-     * @param path The path.
-     * @param contentStatus The status;
-     */
-    void commited(final String path, final VcsStatus contentStatus);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsDelete.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsDelete.java
deleted file mode 100644
index a3682bb..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsDelete.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.commons.vfs2.operations.vcs;
-
-import org.apache.commons.vfs2.operations.FileOperation;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsDelete extends FileOperation
-{
-    /**
-     *
-     * @param force true if the delete should be unconditional.
-     */
-    void setForce(final boolean force);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsLog.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsLog.java
deleted file mode 100644
index f8d1be3..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsLog.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.commons.vfs2.operations.vcs;
-
-import org.apache.commons.vfs2.operations.FileOperation;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsLog extends FileOperation
-{
-    /**
-     *
-     * @param startRev The start revision.
-     */
-    void setStartRevision(final long startRev);
-
-    /**
-     *
-     * @param endRev The end revision.
-     */
-    void setEndRevision(final long endRev);
-
-    /**
-     *
-     * @param handler The LogEntry handler.
-     */
-    void setLogEntryHandler(final VcsLogEntryHandler handler);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsLogEntry.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsLogEntry.java
deleted file mode 100644
index 60dcea7..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsLogEntry.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.commons.vfs2.operations.vcs;
-
-import java.util.Calendar;
-
-/**
- *
- * @since 0.1
- */
-public class VcsLogEntry
-{
-    /**
-     */
-    private final String author;
-
-    /**
-     * Revision.
-     */
-    private final long revision;
-
-    /**
-     * Message.
-     */
-    private final String message;
-
-    /**
-     * Date.
-     */
-    private final Calendar date;
-
-    /**
-     * Path.
-     */
-    private final String path;
-
-    /**
-     *
-     * @param author The author.
-     * @param revision The revision.
-     * @param message The message.
-     * @param date The date.
-     * @param path The path.
-     */
-    public VcsLogEntry(final String author, final long revision,
-            final String message, final Calendar date, final String path)
-    {
-        this.author = author;
-        this.revision = revision;
-        this.message = message;
-        this.date = date;
-        this.path = path;
-    }
-
-    /**
-     *
-     * @return The author.
-     */
-    public String getAuthor()
-    {
-        return author;
-    }
-
-    /**
-     *
-     * @return The revision.
-     */
-    public long getRevision()
-    {
-        return revision;
-    }
-
-    /**
-     *
-     * @return The message.
-     */
-    public String getMessage()
-    {
-        return message;
-    }
-
-    /**
-     *
-     * @return The date.
-     */
-    public Calendar getDate()
-    {
-        return date;
-    }
-
-    /**
-     *
-     * @return The path.
-     */
-    public String getPath()
-    {
-        return path;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsLogEntryHandler.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsLogEntryHandler.java
deleted file mode 100644
index 74d8364..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsLogEntryHandler.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.commons.vfs2.operations.vcs;
-
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsLogEntryHandler
-{
-    /**
-     *
-     * @param entry The log entry.
-     * @throws FileSystemException if an error occurs.
-     */
-    void handleLogEntry(final VcsLogEntry entry) throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsModifyListener.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsModifyListener.java
deleted file mode 100644
index 1b800a2..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsModifyListener.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.commons.vfs2.operations.vcs;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsModifyListener
-{
-    /**
-     *
-     * @param path The path String.
-     * @param contentStatus The content status.
-     */
-    void modified(final String path, final VcsStatus contentStatus);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsRevert.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsRevert.java
deleted file mode 100644
index efe8229..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsRevert.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.commons.vfs2.operations.vcs;
-
-import org.apache.commons.vfs2.operations.FileOperation;
-
-/**
- * <p>
- * Restores pristine working copy file and cancels all local modifications. In
- * other words, VcsRevert replaces working copy file with the latest version
- * from the repository.
- * </p>
- *
- * @since 0.1
- */
-public interface VcsRevert extends FileOperation
-{
-    /**
-     *
-     * @param recursive true if children should be processed.
-     */
-    void setRecursive(final boolean recursive);
-
-    /**
-     *
-     * @param listener The Listener to add.
-     */
-    void addModifyListener(final VcsModifyListener listener);
-
-    /**
-     *
-     * @param listener The Listener to remove.
-     */
-    void removeModifyListener(final VcsModifyListener listener);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsStatus.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsStatus.java
deleted file mode 100644
index f4e1f22..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsStatus.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.commons.vfs2.operations.vcs;
-
-/**
- *
- * @since 0.1
- */
-public enum VcsStatus
-{
-    UNKNOWN(-1),
-    NOT_MODIFIED(0),
-    ADDED(1),
-    CONFLICTED(2),
-    DELETED(3),
-    MERGED(4),
-    IGNORED(5),
-    MODIFIED(6),
-    REPLACED(7),
-    UNVERSIONED(8),
-    MISSING(9),
-    OBSTRUCTED(10),
-    REVERTED(11),
-    RESOLVED(12),
-    COPIED(13),
-    MOVED(14),
-    RESTORED(15),
-    UPDATED(16),
-    EXTERNAL(18),
-    CORRUPTED(19),
-    NOT_REVERTED(20);
-
-    private int status;
-
-
-    private VcsStatus(final int status)
-    {
-        this.status = status;
-    }
-
-    /**
-     *
-     * @return the status of FileObject
-     */
-    public int getStatus()
-    {
-        return status;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsUpdate.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsUpdate.java
deleted file mode 100644
index 3508ab6..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsUpdate.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.commons.vfs2.operations.vcs;
-
-import org.apache.commons.vfs2.operations.FileOperation;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsUpdate extends FileOperation
-{
-    /**
-     *
-     * @param revision The revision number.
-     */
-    void setRevision(final long revision);
-
-    /**
-     *
-     * @param isRecursive true if recursive.
-     */
-    void setRecursive(final boolean isRecursive);
-
-    /**
-     *
-     * @param listener The UpdateListener.
-     */
-    void addUpdateListener(final VcsUpdateListener listener);
-
-    /**
-     *
-     * @param listener The UpdateListener.
-     */
-    void removeUpdateListener(final VcsUpdateListener listener);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsUpdateListener.java b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsUpdateListener.java
deleted file mode 100644
index 32eaa66..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/VcsUpdateListener.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.commons.vfs2.operations.vcs;
-
-/**
- *
- * @since 0.1
- */
-public interface VcsUpdateListener
-{
-    /**
-     *
-     * @param path The path.
-     * @param revision The revision number.
-     * @param contentStatus The status.
-     */
-    void updated(final String path, final long revision, final VcsStatus contentStatus);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/package.html
deleted file mode 100644
index 73d29c0..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/package.html
+++ /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.
--->
-<body>
-<p>VFS version control operations.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/readme.html b/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/readme.html
deleted file mode 100644
index 817da81..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/operations/vcs/readme.html
+++ /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.
--->
-<html>
-    <body>
-        <p>
-        This package contains common interfaces for Version Control Systems such as
-        SVN, CVS, etc. <br />
-        The implementation of that interfaces it a system-specific deal and all
-        implementations are located in the corresponding packages for those concrete
-        systems.           
-        </p>
-    </body>
-</html>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/package.html
deleted file mode 100644
index fc34de6..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/package.html
+++ /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.
--->
-<body>
-<p>The public VFS API.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileName.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileName.java
deleted file mode 100644
index 13ed821..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileName.java
+++ /dev/null
@@ -1,575 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.VFS;
-
-/**
- * A default file name implementation.
- */
-public abstract class AbstractFileName implements FileName
-{
-
-    private final String scheme;
-    private final String absPath;
-    private FileType type;
-
-    // Cached stuff
-    private String uri;
-    private String baseName;
-    private String rootUri;
-    private String extension;
-    private String decodedAbsPath;
-
-    private String key = null;
-
-    public AbstractFileName(final String scheme, final String absPath, final FileType type)
-    {
-        this.rootUri = null;
-        this.scheme = scheme;
-        this.type = type;
-        if (absPath != null && absPath.length() > 0)
-        {
-            if (absPath.length() > 1 && absPath.endsWith("/"))
-            {
-                this.absPath = absPath.substring(0, absPath.length() - 1);
-            }
-            else
-            {
-                this.absPath = absPath;
-            }
-        }
-        else
-        {
-            this.absPath = ROOT_PATH;
-        }
-    }
-
-    @Override
-    public boolean equals(final Object o)
-    {
-        if (this == o)
-        {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass())
-        {
-            return false;
-        }
-
-        final AbstractFileName that = (AbstractFileName) o;
-
-        return getKey().equals(that.getKey());
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return getKey().hashCode();
-    }
-
-    /**
-     * Implement Comparable.
-     *
-     * @param obj another abstract filename
-     * @return negative number if less than, 0 if equal, positive if greater than.
-     */
-    @Override
-    public int compareTo(final FileName obj)
-    {
-        final AbstractFileName name = (AbstractFileName) obj;
-        return getKey().compareTo(name.getKey());
-    }
-
-    /**
-     * Returns the URI of the file.
-     * @return the FileName as a URI.
-     */
-    @Override
-    public String toString()
-    {
-        return getURI();
-    }
-
-    /**
-     * Factory method for creating name instances.
-     * @param absPath The absolute path.
-     * @param type The FileType.
-     * @return The FileName.
-     */
-    public abstract FileName createName(String absPath, FileType type);
-
-    /**
-     * Builds the root URI for this file name.  Note that the root URI must not
-     * end with a separator character.
-     * @param buffer A StringBuilder to use to construct the URI.
-     * @param addPassword true if the password should be added, false otherwise.
-     */
-    protected abstract void appendRootUri(StringBuilder buffer, boolean addPassword);
-
-    /**
-     * Returns the base name of the file.
-     * @return The base name of the file.
-     */
-    @Override
-    public String getBaseName()
-    {
-        if (baseName == null)
-        {
-            final int idx = getPath().lastIndexOf(SEPARATOR_CHAR);
-            if (idx == -1)
-            {
-                baseName = getPath();
-            }
-            else
-            {
-                baseName = getPath().substring(idx + 1);
-            }
-        }
-
-        return baseName;
-    }
-
-    /**
-     * Returns the absolute path of the file, relative to the root of the
-     * file system that the file belongs to.
-     * @return The path String.
-     */
-    @Override
-    public String getPath()
-    {
-        if (VFS.isUriStyle())
-        {
-            return absPath + getUriTrailer();
-        }
-        return absPath;
-    }
-
-    protected String getUriTrailer()
-    {
-        return getType().hasChildren() ? "/" : "";
-    }
-
-    /**
-     * Returns the decoded path.
-     * @return The decoded path String.
-     * @throws FileSystemException If an error occurs.
-     */
-    @Override
-    public String getPathDecoded() throws FileSystemException
-    {
-        if (decodedAbsPath == null)
-        {
-            decodedAbsPath = UriParser.decode(getPath());
-        }
-
-        return decodedAbsPath;
-    }
-
-    /**
-     * Returns the name of the parent of the file.
-     * @return the FileName of the parent.
-     */
-    @Override
-    public FileName getParent()
-    {
-        final String parentPath;
-        final int idx = getPath().lastIndexOf(SEPARATOR_CHAR);
-        if (idx == -1 || idx == getPath().length() - 1)
-        {
-            // No parent
-            return null;
-        }
-        else if (idx == 0)
-        {
-            // Root is the parent
-            parentPath = SEPARATOR;
-        }
-        else
-        {
-            parentPath = getPath().substring(0, idx);
-        }
-        return createName(parentPath, FileType.FOLDER);
-    }
-
-    /**
-     * find the root of the filesystem.
-     * @return The root FileName.
-     */
-    @Override
-    public FileName getRoot()
-    {
-        FileName root = this;
-        while (root.getParent() != null)
-        {
-            root = root.getParent();
-        }
-
-        return root;
-    }
-
-    /**
-     * Returns the URI scheme of this file.
-     * @return The protocol used to access the file.
-     */
-    @Override
-    public String getScheme()
-    {
-        return scheme;
-    }
-
-    /**
-     * Returns the absolute URI of the file.
-     * @return The absolute URI of the file.
-     */
-    @Override
-    public String getURI()
-    {
-        if (uri == null)
-        {
-            uri = createURI();
-        }
-        return uri;
-    }
-
-    protected String createURI()
-    {
-        return createURI(false, true);
-    }
-
-    /**
-     * Create a path that does not use the FileType since that field is not immutable.
-     * @return The key.
-     */
-    private String getKey()
-    {
-        if (key == null)
-        {
-            key = getURI();
-        }
-        return key;
-    }
-
-    /**
-     * Returns the URI without a password.
-     *
-     * @return Returns the URI without a password.
-     */
-    @Override
-    public String getFriendlyURI()
-    {
-        return createURI(false, false);
-    }
-
-    private String createURI(final boolean useAbsolutePath, final boolean usePassword)
-    {
-        final StringBuilder buffer = new StringBuilder();
-        appendRootUri(buffer, usePassword);
-        buffer.append(useAbsolutePath ? absPath : getPath());
-        return buffer.toString();
-    }
-
-
-    /**
-     * Converts a file name to a relative name, relative to this file name.
-     * @param name The FileName.
-     * @return The relative path to the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public String getRelativeName(final FileName name) throws FileSystemException
-    {
-        final String path = name.getPath();
-
-        // Calculate the common prefix
-        final int basePathLen = getPath().length();
-        final int pathLen = path.length();
-
-        // Deal with root
-        if (basePathLen == 1 && pathLen == 1)
-        {
-            return ".";
-        }
-        else if (basePathLen == 1)
-        {
-            return path.substring(1);
-        }
-
-        final int maxlen = Math.min(basePathLen, pathLen);
-        int pos = 0;
-        for (; pos < maxlen && getPath().charAt(pos) == path.charAt(pos); pos++)
-        {
-        }
-
-        if (pos == basePathLen && pos == pathLen)
-        {
-            // Same names
-            return ".";
-        }
-        else if (pos == basePathLen && pos < pathLen && path.charAt(pos) == SEPARATOR_CHAR)
-        {
-            // A descendent of the base path
-            return path.substring(pos + 1);
-        }
-
-        // Strip the common prefix off the path
-        final StringBuilder buffer = new StringBuilder();
-        if (pathLen > 1 && (pos < pathLen || getPath().charAt(pos) != SEPARATOR_CHAR))
-        {
-            // Not a direct ancestor, need to back up
-            pos = getPath().lastIndexOf(SEPARATOR_CHAR, pos);
-            buffer.append(path.substring(pos));
-        }
-
-        // Prepend a '../' for each element in the base path past the common
-        // prefix
-        buffer.insert(0, "..");
-        pos = getPath().indexOf(SEPARATOR_CHAR, pos + 1);
-        while (pos != -1)
-        {
-            buffer.insert(0, "../");
-            pos = getPath().indexOf(SEPARATOR_CHAR, pos + 1);
-        }
-
-        return buffer.toString();
-    }
-
-    /**
-     * Returns the root URI of the file system this file belongs to.
-     * @return The URI of the root.
-     */
-    @Override
-    public String getRootURI()
-    {
-        if (rootUri == null)
-        {
-            final StringBuilder buffer = new StringBuilder();
-            appendRootUri(buffer, true);
-            buffer.append(SEPARATOR_CHAR);
-            rootUri = buffer.toString().intern();
-        }
-        return rootUri;
-    }
-
-    /**
-     * Returns the depth of this file name, within its file system.
-     * @return The depth of the file name.
-     */
-    @Override
-    public int getDepth()
-    {
-        final int len = getPath().length();
-        if (len == 0 || len == 1 && getPath().charAt(0) == SEPARATOR_CHAR)
-        {
-            return 0;
-        }
-        int depth = 1;
-        for (int pos = 0; pos > -1 && pos < len; depth++)
-        {
-            pos = getPath().indexOf(SEPARATOR_CHAR, pos + 1);
-        }
-        return depth;
-    }
-
-    /**
-     * Returns the extension of this file name.
-     * @return The file extension.
-     */
-    @Override
-    public String getExtension()
-    {
-        if (extension == null)
-        {
-            getBaseName();
-            final int pos = baseName.lastIndexOf('.');
-            // if ((pos == -1) || (pos == baseName.length() - 1))
-            // imario@ops.co.at: Review of patch from adagoubard@chello.nl
-            // do not treat filenames like
-            // .bashrc c:\windows\.java c:\windows\.javaws c:\windows\.jedit c:\windows\.appletviewer
-            // as extension
-            if (pos < 1 || pos == baseName.length() - 1)
-            {
-                // No extension
-                extension = "";
-            }
-            else
-            {
-                extension = baseName.substring(pos + 1).intern();
-            }
-        }
-        return extension;
-    }
-
-    /**
-     * Determines if another file name is an ancestor of this file name.
-     * @param ancestor The FileName to check.
-     * @return true if the FileName is an ancestor, false otherwise.
-     */
-    @Override
-    public boolean isAncestor(final FileName ancestor)
-    {
-        if (!ancestor.getRootURI().equals(getRootURI()))
-        {
-            return false;
-        }
-        return checkName(ancestor.getPath(), getPath(), NameScope.DESCENDENT);
-    }
-
-    /**
-     * Determines if another file name is a descendent of this file name.
-     * @param descendent The FileName to check.
-     * @return true if the FileName is a descendent, false otherwise.
-     */
-    @Override
-    public boolean isDescendent(final FileName descendent)
-    {
-        return isDescendent(descendent, NameScope.DESCENDENT);
-    }
-
-    /**
-     * Determines if another file name is a descendent of this file name.
-     * @param descendent The FileName to check.
-     * @param scope The NameScope.
-     * @return true if the FileName is a descendent, false otherwise.
-     */
-    @Override
-    public boolean isDescendent(final FileName descendent,
-                                final NameScope scope)
-    {
-        if (!descendent.getRootURI().equals(getRootURI()))
-        {
-            return false;
-        }
-        return checkName(getPath(), descendent.getPath(), scope);
-    }
-
-    /**
-     * Checks if this file name is a name for a regular file by using its type.
-     *
-     * @return true if this file is a regular file.
-     * @throws FileSystemException may be thrown by subclasses.
-     * @see #getType()
-     * @see FileType#FILE
-     */
-    @Override
-    public boolean isFile() throws FileSystemException
-    {
-        // Use equals instead of == to avoid any class loader worries.
-        return FileType.FILE.equals(this.getType());
-    }
-
-    /**
-     * Returns the requested or current type of this name.
-     * <p>
-     * The "requested" type is the one determined during resolving the name.
-     *  n this case the name is a {@link FileType#FOLDER} if it ends with an "/" else
-     * it will be a {@link FileType#FILE}.
-     * <p>
-     * Once attached it will be changed to reflect the real type of this resource.
-     *
-     * @return {@link FileType#FOLDER} or {@link FileType#FILE}
-     */
-    @Override
-    public FileType getType()
-    {
-        return type;
-    }
-
-    /**
-     * Sets the type of this file e.g. when it will be attached.
-     *
-     * @param type {@link FileType#FOLDER} or {@link FileType#FILE}
-     * @throws FileSystemException if an error occurs.
-     */
-    void setType(final FileType type) throws FileSystemException
-    {
-        if (type != FileType.FOLDER && type != FileType.FILE && type != FileType.FILE_OR_FOLDER)
-        {
-            throw new FileSystemException("vfs.provider/filename-type.error");
-        }
-
-        this.type = type;
-    }
-
-    /**
-     * Checks whether a path fits in a particular scope of another path.
-     *
-     * @param basePath An absolute, normalised path.
-     * @param path   An absolute, normalised path.
-     * @param scope The NameScope.
-     * @return true if the path fits in the scope, false otherwise.
-     */
-    public static boolean checkName(final String basePath,
-                                    final String path,
-                                    final NameScope scope)
-    {
-        if (scope == NameScope.FILE_SYSTEM)
-        {
-            // All good
-            return true;
-        }
-
-        if (!path.startsWith(basePath))
-        {
-            return false;
-        }
-
-        int baseLen = basePath.length();
-        if (VFS.isUriStyle())
-        {
-            // strip the trailing "/"
-            baseLen--;
-        }
-
-        if (scope == NameScope.CHILD)
-        {
-            if (path.length() == baseLen
-                || baseLen > 1 && path.charAt(baseLen) != SEPARATOR_CHAR
-                || path.indexOf(SEPARATOR_CHAR, baseLen + 1) != -1)
-            {
-                return false;
-            }
-        }
-        else if (scope == NameScope.DESCENDENT)
-        {
-            if (path.length() == baseLen
-                || baseLen > 1 && path.charAt(baseLen) != SEPARATOR_CHAR)
-            {
-                return false;
-            }
-        }
-        else if (scope == NameScope.DESCENDENT_OR_SELF)
-        {
-            if (baseLen > 1
-                && path.length() > baseLen
-                && path.charAt(baseLen) != SEPARATOR_CHAR)
-            {
-                return false;
-            }
-        }
-        else if (scope != NameScope.FILE_SYSTEM)
-        {
-            throw new IllegalArgumentException();
-        }
-
-        return true;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileNameParser.java
deleted file mode 100644
index b7815b5..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileNameParser.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.commons.vfs2.provider;
-
-/**
- * Provides methods to parse a filename into a {@link org.apache.commons.vfs2.FileName}.
- */
-public abstract class AbstractFileNameParser implements FileNameParser
-{
-    @Override
-    public boolean encodeCharacter(final char ch)
-    {
-        return ch == '%';
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileObject.java
deleted file mode 100644
index db7542f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileObject.java
+++ /dev/null
@@ -1,2125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider;
-
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.security.cert.Certificate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileNotFolderException;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.FileUtil;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.operations.DefaultFileOperations;
-import org.apache.commons.vfs2.operations.FileOperations;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * A partial file object implementation.
- *
- * @param <AFS> An AbstractFileSystem subclass
- */
-public abstract class AbstractFileObject<AFS extends AbstractFileSystem> implements FileObject
-{
-    /*
-     * TODO - Chop this class up - move all the protected methods to several
-     * interfaces, so that structure and content can be separately overridden.
-     *
-     * TODO - Check caps in methods like getChildren(), etc, and give better error messages
-     * (eg 'this file type does not support listing children', vs 'this is not a folder')
-     */
-
-    private static final FileName[] EMPTY_FILE_ARRAY = {};
-
-    private static final int INITIAL_LIST_SIZE = 5;
-
-    private final AbstractFileName fileName;
-    private final AFS fs;
-
-    private FileContent content;
-    // Cached info
-    private boolean attached;
-    private FileType type;
-
-    private FileObject parent;
-    // Changed to hold only the name of the children and let the object
-    // go into the global files cache
-    // private FileObject[] children;
-    private FileName[] children;
-
-    private List<Object> objects;
-
-    /**
-     * FileServices instance.
-     */
-    private FileOperations operations;
-
-    /**
-     *
-     * @param name the file name - muse be an instance of {@link AbstractFileName}
-     * @param fs the file system
-     * @throws ClassCastException if {@code name} is not an instance of {@link AbstractFileName}
-     */
-    protected AbstractFileObject(final AbstractFileName name,
-                                 final AFS fs)
-    {
-        this.fileName = name;
-        this.fs = fs;
-        fs.fileObjectHanded(this);
-    }
-
-    /**
-     * Traverses a file.
-     */
-    private static void traverse(final DefaultFileSelectorInfo fileInfo,
-                                 final FileSelector selector,
-                                 final boolean depthwise,
-                                 final List<FileObject> selected)
-        throws Exception
-    {
-        // Check the file itself
-        final FileObject file = fileInfo.getFile();
-        final int index = selected.size();
-
-        // If the file is a folder, traverse it
-        if (file.getType().hasChildren() && selector.traverseDescendents(fileInfo))
-        {
-            final int curDepth = fileInfo.getDepth();
-            fileInfo.setDepth(curDepth + 1);
-
-            // Traverse the children
-            final FileObject[] children = file.getChildren();
-            for (final FileObject child : children)
-            {
-                fileInfo.setFile(child);
-                traverse(fileInfo, selector, depthwise, selected);
-            }
-
-            fileInfo.setFile(file);
-            fileInfo.setDepth(curDepth);
-        }
-
-        // Add the file if doing depthwise traversal
-        if (selector.includeFile(fileInfo))
-        {
-            if (depthwise)
-            {
-                // Add this file after its descendants
-                selected.add(file);
-            }
-            else
-            {
-                // Add this file before its descendants
-                selected.add(index, file);
-            }
-        }
-    }
-
-    /**
-     * Attaches to the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    private void attach() throws FileSystemException
-    {
-        synchronized (fs)
-        {
-            if (attached)
-            {
-                return;
-            }
-
-            try
-            {
-                // Attach and determine the file type
-                doAttach();
-                attached = true;
-                // now the type could already be injected by doAttach (e.g from parent to child)
-
-                /* VFS-210: determine the type when really asked fore
-                if (type == null)
-                {
-                    setFileType(doGetType());
-                }
-                if (type == null)
-                {
-                    setFileType(FileType.IMAGINARY);
-                }
-                */
-            }
-            catch (final Exception exc)
-            {
-                throw new FileSystemException("vfs.provider/get-type.error", exc, fileName);
-            }
-
-            // fs.fileAttached(this);
-        }
-    }
-
-    /**
-     * Queries the object if a simple rename to the filename of {@code newfile}
-     * is possible.
-     *
-     * @param newfile the new filename
-     * @return true if rename is possible
-     */
-    @Override
-    public boolean canRenameTo(final FileObject newfile)
-    {
-        return fs == newfile.getFileSystem();
-    }
-
-    /**
-     * Notifies the file that its children have changed.
-     * @param childName The name of the child.
-     * @param newType The type of the child.
-     * @throws Exception if an error occurs.
-     */
-    protected void childrenChanged(final FileName childName, final FileType newType) throws Exception
-    {
-        // TODO - this may be called when not attached
-
-        if (children != null && childName != null && newType != null)
-        {
-            // TODO - figure out if children[] can be replaced by list
-            final ArrayList<FileName> list = new ArrayList<FileName>(Arrays.asList(children));
-            if (newType.equals(FileType.IMAGINARY))
-            {
-                list.remove(childName);
-            }
-            else
-            {
-                list.add(childName);
-            }
-            children = new FileName[list.size()];
-            list.toArray(children);
-        }
-
-        // removeChildrenCache();
-        onChildrenChanged(childName, newType);
-    }
-
-    /**
-     * Closes this file, and its content.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void close() throws FileSystemException
-    {
-        FileSystemException exc = null;
-
-        // Close the content
-        if (content != null)
-        {
-            try
-            {
-                content.close();
-                content = null;
-            }
-            catch (final FileSystemException e)
-            {
-                exc = e;
-            }
-        }
-
-        // Detach from the file
-        try
-        {
-            detach();
-        }
-        catch (final Exception e)
-        {
-            exc = new FileSystemException("vfs.provider/close.error", fileName, e);
-        }
-
-        if (exc != null)
-        {
-            throw exc;
-        }
-    }
-
-    /**
-     * Compares two FileObjects (ignores case).
-     *
-     * @param file
-     *            the object to compare.
-     * @return a negative integer, zero, or a positive integer when this object is less than, equal to, or greater than
-     *         the given object.
-     */
-    @Override
-    public int compareTo(final FileObject file)
-    {
-        if (file == null)
-        {
-            return 1;
-        }
-        return this.toString().compareToIgnoreCase(file.toString());
-    }
-
-    /**
-     * Copies another file to this file.
-     *
-     * @param file The FileObject to copy.
-     * @param selector The FileSelector.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void copyFrom(final FileObject file, final FileSelector selector)
-        throws FileSystemException
-    {
-        if (!file.exists())
-        {
-            throw new FileSystemException("vfs.provider/copy-missing-file.error", file);
-        }
-
-        // Locate the files to copy across
-        final ArrayList<FileObject> files = new ArrayList<FileObject>();
-        file.findFiles(selector, false, files);
-
-        // Copy everything across
-        for (final FileObject srcFile : files)
-        {
-            // Determine the destination file
-            final String relPath = file.getName().getRelativeName(srcFile.getName());
-            final FileObject destFile = resolveFile(relPath, NameScope.DESCENDENT_OR_SELF);
-
-            // Clean up the destination file, if necessary
-            if (destFile.exists() && destFile.getType() != srcFile.getType())
-            {
-                // The destination file exists, and is not of the same type,
-                // so delete it
-                // TODO - add a pluggable policy for deleting and overwriting existing files
-                destFile.deleteAll();
-            }
-
-            // Copy across
-            try
-            {
-                if (srcFile.getType().hasContent())
-                {
-                    FileUtil.copyContent(srcFile, destFile);
-                }
-                else if (srcFile.getType().hasChildren())
-                {
-                    destFile.createFolder();
-                }
-            }
-            catch (final IOException e)
-            {
-                throw new FileSystemException("vfs.provider/copy-file.error", e, srcFile, destFile);
-            }
-        }
-    }
-
-    /**
-     * Creates this file, if it does not exist.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void createFile() throws FileSystemException
-    {
-        synchronized (fs)
-        {
-            try
-            {
-                // VFS-210: We do not want to trunc any existing file, checking for its existence is
-                // still required
-                if (exists() && !isFile())
-                {
-                    throw new FileSystemException("vfs.provider/create-file.error", fileName);
-                }
-
-                if (!exists())
-                {
-                    getOutputStream().close();
-                    endOutput();
-                }
-            }
-            catch (final RuntimeException re)
-            {
-                throw re;
-            }
-            catch (final Exception e)
-            {
-                throw new FileSystemException("vfs.provider/create-file.error", fileName, e);
-            }
-        }
-    }
-
-    /**
-     * Creates this folder, if it does not exist.  Also creates any ancestor
-     * files which do not exist.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void createFolder() throws FileSystemException
-    {
-        synchronized (fs)
-        {
-            // VFS-210: we create a folder only if it does not already exist. So this check should be safe.
-            if (getType().hasChildren())
-            {
-                // Already exists as correct type
-                return;
-            }
-            if (getType() != FileType.IMAGINARY)
-            {
-                throw new FileSystemException("vfs.provider/create-folder-mismatched-type.error", fileName);
-            }
-            /* VFS-210: checking for writeable is not always possible as the security constraint might
-               be more complex
-            if (!isWriteable())
-            {
-                throw new FileSystemException("vfs.provider/create-folder-read-only.error", name);
-            }
-            */
-
-            // Traverse up the hierarchy and make sure everything is a folder
-            final FileObject parent = getParent();
-            if (parent != null)
-            {
-                parent.createFolder();
-            }
-
-            try
-            {
-                // Create the folder
-                doCreateFolder();
-
-                // Update cached info
-                handleCreate(FileType.FOLDER);
-            }
-            catch (final RuntimeException re)
-            {
-                throw re;
-            }
-            catch (final Exception exc)
-            {
-                throw new FileSystemException("vfs.provider/create-folder.error", fileName, exc);
-            }
-        }
-    }
-
-    /**
-     * Deletes this file.
-     * <p>
-     * TODO - This will not fail if this is a non-empty folder.
-     *
-     * @return true if this object has been deleted
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean delete() throws FileSystemException
-    {
-        return delete(Selectors.SELECT_SELF) > 0;
-    }
-
-    /**
-     * Deletes this file, and all children matching the {@code selector}.
-     *
-     * @param selector The FileSelector.
-     * @return the number of deleted files.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public int delete(final FileSelector selector) throws FileSystemException
-    {
-        int nuofDeleted = 0;
-
-        /* VFS-210
-        if (getType() == FileType.IMAGINARY)
-        {
-            // File does not exist
-            return nuofDeleted;
-        }
-        */
-
-        // Locate all the files to delete
-        final ArrayList<FileObject> files = new ArrayList<FileObject>();
-        findFiles(selector, true, files);
-
-        // Delete 'em
-        final int count = files.size();
-        for (int i = 0; i < count; i++)
-        {
-            final AbstractFileObject file = FileObjectUtils.getAbstractFileObject(files.get(i));
-            // file.attach();
-
-            // VFS-210: It seems impossible to me that findFiles will return a list with hidden files/directories
-            // in it, else it would not be hidden. Checking for the file-type seems ok in this case
-            // If the file is a folder, make sure all its children have been deleted
-            if (file.getType().hasChildren() && file.getChildren().length != 0)
-            {
-                // Skip - as the selector forced us not to delete all files
-                continue;
-            }
-
-            // Delete the file
-            if (file.deleteSelf())
-            {
-                nuofDeleted++;
-            }
-        }
-
-        return nuofDeleted;
-    }
-
-    /**
-     * Deletes this file and all children. Shorthand for {@code delete(Selectors.SELECT_ALL)}
-     *
-     * @return the number of deleted files.
-     * @throws FileSystemException if an error occurs.
-     * @see #delete(FileSelector)
-     * @see Selectors#SELECT_ALL
-     */
-    @Override
-    public int deleteAll() throws FileSystemException
-    {
-        return this.delete(Selectors.SELECT_ALL);
-    }
-
-    /**
-     * Deletes this file, once all its children have been deleted
-     *
-     * @return true if this file has been deleted
-     * @throws FileSystemException if an error occurs.
-     */
-    private boolean deleteSelf() throws FileSystemException
-    {
-        synchronized (fs)
-        {
-            //Its possible to delete a read-only file if you have write-execute access to the directory
-
-            /* VFS-210
-            if (getType() == FileType.IMAGINARY)
-            {
-                // File does not exist
-                return false;
-            }
-            */
-
-            try
-            {
-                // Delete the file
-                doDelete();
-
-                // Update cached info
-                handleDelete();
-            }
-            catch (final RuntimeException re)
-            {
-                throw re;
-            }
-            catch (final Exception exc)
-            {
-                throw new FileSystemException("vfs.provider/delete.error", exc, fileName);
-            }
-
-            return true;
-        }
-    }
-
-    /**
-     * Detaches this file, invalidating all cached info.  This will force
-     * a call to {@link #doAttach} next time this file is used.
-     * @throws Exception if an error occurs.
-     */
-    private void detach() throws Exception
-    {
-        synchronized (fs)
-        {
-            if (attached)
-            {
-                try
-                {
-                    doDetach();
-                }
-                finally
-                {
-                    attached = false;
-                    setFileType(null);
-                    parent = null;
-
-                    // fs.fileDetached(this);
-
-                    removeChildrenCache();
-                    // children = null;
-                }
-            }
-        }
-    }
-
-    /**
-     * Attaches this file object to its file resource.
-     * <p>
-     * This method is called before any of the doBlah() or onBlah() methods.
-     * Sub-classes can use this method to perform lazy initialisation.
-     * <p>
-     * This implementation does nothing.
-     *
-     * @throws Exception if an error occurs.
-     */
-    protected void doAttach() throws Exception
-    {
-    }
-
-    /**
-     * Create a FileContent implementation.
-     * @return The FileContent.
-     * @throws FileSystemException if an error occurs.
-     * @since 2.0
-     */
-    protected FileContent doCreateFileContent() throws FileSystemException
-    {
-        return new DefaultFileContent(this, getFileContentInfoFactory());
-    }
-
-    /**
-     * Creates this file as a folder.  Is only called when:
-     * <ul>
-     * <li>{@link #doGetType} returns {@link FileType#IMAGINARY}.</li>
-     * <li>The parent folder exists and is writeable, or this file is the
-     * root of the file system.</li>
-     * </ul>
-     * This implementation throws an exception.
-     *
-     * @throws Exception if an error occurs.
-     */
-    protected void doCreateFolder() throws Exception
-    {
-        throw new FileSystemException("vfs.provider/create-folder-not-supported.error");
-    }
-
-    /**
-     * Deletes the file.  Is only called when:
-     * <ul>
-     * <li>{@link #doGetType} does not return {@link FileType#IMAGINARY}.</li>
-     * <li>{@link #doIsWriteable} returns true.</li>
-     * <li>This file has no children, if a folder.</li>
-     * </ul>
-     * This implementation throws an exception.
-
-     * @throws Exception if an error occurs.
-     */
-    protected void doDelete() throws Exception
-    {
-        throw new FileSystemException("vfs.provider/delete-not-supported.error");
-    }
-
-    /**
-     * Detaches this file object from its file resource.
-     * <p>
-     * Called when this file is closed.  Note that the file object may be
-     * reused later, so should be able to be reattached.
-     * <p>
-     * This implementation does nothing.
-     *
-     * @throws Exception if an error occurs.
-     */
-    protected void doDetach() throws Exception
-    {
-    }
-
-    /**
-     * Returns the attributes of this file.  Is only called if {@link #doGetType}
-     * does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation always returns an empty map.
-     *
-     * @return The attributes of the file.
-     * @throws Exception if an error occurs.
-     */
-    protected Map<String, Object> doGetAttributes() throws Exception
-    {
-        return Collections.emptyMap();
-    }
-
-    /**
-     * Returns the certificates used to sign this file.  Is only called if
-     * {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation always returns null.
-     *
-     * @return The certificates used to sign the file.
-     * @throws Exception if an error occurs.
-     */
-    protected Certificate[] doGetCertificates() throws Exception
-    {
-        return null;
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).  Is only called if
-     * {@link #doGetType} returns {@link FileType#FILE}.
-     * @return The size of the file in bytes.
-     * @throws Exception if an error occurs.
-     */
-    protected abstract long doGetContentSize() throws Exception;
-
-    /**
-     * Creates an input stream to read the file content from.  Is only called
-     * if {@link #doGetType} returns {@link FileType#FILE}.
-     * <p>
-     * It is guaranteed that there are no open output streams for this file
-     * when this method is called.
-     * <p>
-     * The returned stream does not have to be buffered.
-     *
-     * @return An InputStream to read the file content.
-     * @throws Exception if an error occurs.
-     */
-    protected abstract InputStream doGetInputStream() throws Exception;
-
-    /**
-     * Returns the last modified time of this file.  Is only called if
-     * {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation throws an exception.
-     *
-     * @return The last modification time.
-     * @throws Exception if an error occurs.
-     */
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        throw new FileSystemException("vfs.provider/get-last-modified-not-supported.error");
-    }
-
-    /**
-     * Creates an output stream to write the file content to.  Is only
-     * called if:
-     * <ul>
-     * <li>{@link #doIsWriteable} returns true.
-     * <li>{@link #doGetType} returns {@link FileType#FILE}, or
-     * {@link #doGetType} returns {@link FileType#IMAGINARY}, and the file's
-     * parent exists and is a folder.
-     * </ul>
-     * It is guaranteed that there are no open stream (input or output) for
-     * this file when this method is called.
-     * <p>
-     * The returned stream does not have to be buffered.
-     * <p>
-     * This implementation throws an exception.
-     *
-     * @param bAppend true if the file should be appended to, false if it should be overwritten.
-     * @return An OutputStream to write to the file.
-     * @throws Exception if an error occurs.
-     */
-    protected OutputStream doGetOutputStream(final boolean bAppend) throws Exception
-    {
-        throw new FileSystemException("vfs.provider/write-not-supported.error");
-    }
-
-    /**
-     * Creates access to the file for random i/o.  Is only called
-     * if {@link #doGetType} returns {@link FileType#FILE}.
-     * <p>
-     * It is guaranteed that there are no open output streams for this file
-     * when this method is called.
-     *
-     * @param mode The mode to access the file.
-     * @return The RandomAccessContext.
-     * @throws Exception if an error occurs.
-     */
-    protected RandomAccessContent doGetRandomAccessContent(final RandomAccessMode mode) throws Exception
-    {
-        throw new FileSystemException("vfs.provider/random-access-not-supported.error");
-    }
-
-    /**
-     * Determines the type of this file.  Must not return null.  The return
-     * value of this method is cached, so the implementation can be expensive.
-     * @return the type of the file.
-     * @throws Exception if an error occurs.
-     */
-    protected abstract FileType doGetType() throws Exception;
-
-    /**
-     * Determines if this file is executable.  Is only called if {@link #doGetType}
-     * does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation always returns false.
-     *
-     * @return true if the file is executable, false otherwise.
-     * @throws Exception if an error occurs.
-     */
-    protected boolean doIsExecutable() throws Exception
-    {
-        return false;
-    }
-
-    /**
-     * Determines if this file is hidden.  Is only called if {@link #doGetType}
-     * does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation always returns false.
-     *
-     * @return true if the file is hidden, false otherwise.
-     * @throws Exception if an error occurs.
-     */
-    protected boolean doIsHidden() throws Exception
-    {
-        return false;
-    }
-
-    /**
-     * Determines if this file can be read.  Is only called if {@link #doGetType}
-     * does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation always returns true.
-     *
-     * @return true if the file is readable, false otherwise.
-     * @throws Exception if an error occurs.
-     */
-    protected boolean doIsReadable() throws Exception
-    {
-        return true;
-    }
-
-    /**
-     * Checks if this fileObject is the same file as {@code destFile} just with a different
-     * name. E.g. for case insensitive filesystems like windows.
-     *
-     * @param destFile The file to compare to.
-     * @return true if the FileObjects are the same.
-     * @throws FileSystemException if an error occurs.
-     */
-    protected boolean doIsSameFile(final FileObject destFile) throws FileSystemException
-    {
-        return false;
-    }
-
-    /**
-     * Determines if this file can be written to.  Is only called if
-     * {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation always returns true.
-     *
-     * @return true if the file is writable.
-     * @throws Exception if an error occurs.
-     */
-    protected boolean doIsWriteable() throws Exception
-    {
-        return true;
-    }
-
-    /**
-     * Lists the children of this file. Is only called if {@link #doGetType}
-     * returns {@link FileType#FOLDER}. The return value of this method
-     * is cached, so the implementation can be expensive.
-     *
-     * @return a possible empty String array if the file is a directory or null or an exception if the
-     * file is not a directory or can't be read.
-     * @throws Exception if an error occurs.
-     */
-    protected abstract String[] doListChildren() throws Exception;
-
-    /**
-     * Lists the children of this file.
-     * <p>
-     * Is only called if {@link #doGetType} returns {@link FileType#FOLDER}.
-     * <p>
-     * The return value of this method is cached, so the implementation can be expensive.<br>
-     * Other than {@code doListChildren} you could return FileObject's to e.g. reinitialize the
-     * type of the file.
-     * <p>
-     * (Introduced for Webdav: "permission denied on resource" during getType())
-     *
-     * @return The children of this FileObject.
-     * @throws Exception if an error occurs.
-     */
-    protected FileObject[] doListChildrenResolved() throws Exception
-    {
-        return null;
-    }
-
-    /**
-     * Removes an attribute of this file.
-     * <p>
-     * Is only called if {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation throws an exception.
-     *
-     * @param attrName The name of the attribute to remove.
-     * @throws Exception if an error occurs.
-     * @since 2.0
-     */
-    protected void doRemoveAttribute(final String attrName) throws Exception
-    {
-        throw new FileSystemException("vfs.provider/remove-attribute-not-supported.error");
-    }
-
-    /**
-     * Renames the file.
-     * <p>
-     * Is only called when:
-     * <ul>
-     * <li>{@link #doIsWriteable} returns true.</li>
-     * </ul>
-     * <p>
-     * This implementation throws an exception.
-     *
-     * @param newFile A FileObject with the new file name.
-     * @throws Exception if an error occurs.
-     */
-    protected void doRename(final FileObject newFile) throws Exception
-    {
-        throw new FileSystemException("vfs.provider/rename-not-supported.error");
-    }
-
-    /**
-     * Sets an attribute of this file.
-     * <p>
-     * Is only called if {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation throws an exception.
-     *
-     * @param attrName The attribute name.
-     * @param value The value to be associated with the attribute name.
-     * @throws Exception if an error occurs.
-     */
-    protected void doSetAttribute(final String attrName, final Object value) throws Exception
-    {
-        throw new FileSystemException("vfs.provider/set-attribute-not-supported.error");
-    }
-
-    /**
-     * Make the file executable.
-     * <p>
-     * Only called if {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation returns false.
-     *
-     * @param executable True to allow access, false to disallow.
-     * @param ownerOnly If {@code true}, the permission applies only to the owner; otherwise, it applies to everybody.
-     * @return true if the operation succeeded.
-     * @throws Exception Any Exception thrown is wrapped in FileSystemException.
-     * @see #setExecutable(boolean, boolean)
-     * @since 2.1
-     */
-    protected boolean doSetExecutable(final boolean executable, final boolean ownerOnly) throws Exception
-    {
-        return false;
-    }
-
-    /**
-     * Sets the last modified time of this file.
-     * <p>
-     * Is only called if {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation throws an exception.
-     *
-     * @param modtime The last modification time.
-     * @return true if the time was set.
-     * @throws Exception Any Exception thrown is wrapped in FileSystemException.
-     */
-    protected boolean doSetLastModifiedTime(final long modtime) throws Exception
-    {
-        throw new FileSystemException("vfs.provider/set-last-modified-not-supported.error");
-    }
-
-    /**
-     * Make the file or folder readable.
-     * <p>
-     * Only called if {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation returns false.
-     *
-     * @param readable
-     *            True to allow access, false to disallow
-     * @param ownerOnly
-     *            If {@code true}, the permission applies only to the owner; otherwise, it applies to everybody.
-     * @return true if the operation succeeded
-     * @throws Exception Any Exception thrown is wrapped in FileSystemException.
-     * @see #setReadable(boolean, boolean)
-     * @since 2.1
-     */
-    protected boolean doSetReadable(final boolean readable, final boolean ownerOnly) throws Exception
-    {
-        return false;
-    }
-
-    /**
-     * Make the file or folder writeable.
-     * <p>
-     * Only called if {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     *
-     * @param writable True to allow access, false to disallow
-     * @param ownerOnly If {@code true}, the permission applies only to the owner; otherwise, it applies to everybody.
-     * @return true if the operation succeeded
-     * @throws Exception Any Exception thrown is wrapped in FileSystemException.
-     * @see #setWritable(boolean, boolean)
-     * @since 2.1
-     */
-    protected boolean doSetWritable(final boolean writable, final boolean ownerOnly) throws Exception
-    {
-        return false;
-    }
-
-    /**
-     * Called when the output stream for this file is closed.
-     * @throws Exception if an error occurs.
-     */
-    protected void endOutput() throws Exception
-    {
-        if (getType() == FileType.IMAGINARY)
-        {
-            // File was created
-            handleCreate(FileType.FILE);
-        }
-        else
-        {
-            // File has changed
-            onChange();
-        }
-    }
-
-    /**
-     * Determines if the file exists.
-     * @return true if the file exists, false otherwise,
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean exists() throws FileSystemException
-    {
-        return getType() != FileType.IMAGINARY;
-    }
-
-    private FileName[] extractNames(final FileObject[] objects)
-    {
-        if (objects == null)
-        {
-            return null;
-        }
-
-        final FileName[] names = new FileName[objects.length];
-        for (int iterObjects = 0; iterObjects < objects.length; iterObjects++)
-        {
-            names[iterObjects] = objects[iterObjects].getName();
-        }
-
-        return names;
-    }
-
-    @Override
-    protected void finalize() throws Throwable
-    {
-        fs.fileObjectDestroyed(this);
-
-        super.finalize();
-    }
-
-
-    /**
-     * Finds the set of matching descendants of this file, in depthwise
-     * order.
-     *
-     * @param selector The FileSelector.
-     * @return list of files or null if the base file (this object) do not exist
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject[] findFiles(final FileSelector selector) throws FileSystemException
-    {
-        final List<FileObject> list = this.listFiles(selector);
-        return list == null ? null : list.toArray(new FileObject[list.size()]);
-    }
-
-    /**
-     * Traverses the descendants of this file, and builds a list of selected
-     * files.
-     * @param selector The FileSelector.
-     * @param depthwise if true files are added after their descendants, before otherwise.
-     * @param selected A List of the located FileObjects.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void findFiles(final FileSelector selector,
-                          final boolean depthwise,
-                          final List<FileObject> selected) throws FileSystemException
-    {
-        try
-        {
-            if (exists())
-            {
-                // Traverse starting at this file
-                final DefaultFileSelectorInfo info = new DefaultFileSelectorInfo();
-                info.setBaseFolder(this);
-                info.setDepth(0);
-                info.setFile(this);
-                traverse(info, selector, depthwise, selected);
-            }
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider/find-files.error", fileName, e);
-        }
-    }
-
-    /**
-     * Returns the file system this file belongs to.
-     * @return The FileSystem this file is associated with.
-     */
-    protected AFS getAbstractFileSystem()
-    {
-        return fs;
-    }
-
-    /**
-     * Returns a child of this file.
-     * @param name The name of the child to locate.
-     * @return The FileObject for the file or null if the child does not exist.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject getChild(final String name) throws FileSystemException
-    {
-        // TODO - use a hashtable when there are a large number of children
-        final FileObject[] children = getChildren();
-        for (final FileObject element : children)
-        {
-            final FileName child = element.getName();
-            // TODO - use a comparator to compare names
-            if (child.getBaseName().equals(name))
-            {
-                return resolveFile(child);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns the children of the file.
-     * @return an array of FileObjects, one per child.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject[] getChildren() throws FileSystemException
-    {
-        synchronized (fs)
-        {
-            // VFS-210
-            if (!fs.hasCapability(Capability.LIST_CHILDREN))
-            {
-                throw new FileNotFolderException(fileName);
-            }
-
-            /* VFS-210
-            if (!getType().hasChildren())
-            {
-                throw new FileSystemException("vfs.provider/list-children-not-folder.error", name);
-            }
-            */
-            attach();
-
-            // Use cached info, if present
-            if (children != null)
-            {
-                return resolveFiles(children);
-            }
-
-            // allow the filesystem to return resolved children. e.g. prefill type for webdav
-            FileObject[] childrenObjects;
-            try
-            {
-                childrenObjects = doListChildrenResolved();
-                children = extractNames(childrenObjects);
-            }
-            catch (final FileSystemException exc)
-            {
-                // VFS-210
-                throw exc;
-            }
-            catch (final Exception exc)
-            {
-                throw new FileSystemException("vfs.provider/list-children.error", exc, fileName);
-            }
-
-            if (childrenObjects != null)
-            {
-                return childrenObjects;
-            }
-
-            // List the children
-            final String[] files;
-            try
-            {
-                files = doListChildren();
-            }
-            catch (final FileSystemException exc)
-            {
-                // VFS-210
-                throw exc;
-            }
-            catch (final Exception exc)
-            {
-                throw new FileSystemException("vfs.provider/list-children.error", exc, fileName);
-            }
-
-            if (files == null)
-            {
-                // VFS-210
-                // honor the new doListChildren contract
-                // return null;
-                throw new FileNotFolderException(fileName);
-            }
-            else if (files.length == 0)
-            {
-                // No children
-                children = EMPTY_FILE_ARRAY;
-            }
-            else
-            {
-                // Create file objects for the children
-                final FileName[] cache = new FileName[files.length];
-                for (int i = 0; i < files.length; i++)
-                {
-                    final String file = files[i];
-                    cache[i] = fs.getFileSystemManager().resolveName(fileName, file, NameScope.CHILD);
-                }
-                // VFS-285: only assign the children filenames after all of them have been
-                // resolved successfully to prevent an inconsistent internal state
-                children = cache;
-            }
-
-            return resolveFiles(children);
-        }
-    }
-
-    /**
-     * Returns the file's content.
-     * @return the FileContent for this FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileContent getContent() throws FileSystemException
-    {
-        synchronized (fs)
-        {
-            attach();
-            if (content == null)
-            {
-                content = doCreateFileContent();
-            }
-            return content;
-        }
-    }
-
-    /**
-     * create the filecontentinfo implementation.
-     * @return The FileContentInfoFactory.
-     */
-    protected FileContentInfoFactory getFileContentInfoFactory()
-    {
-        return fs.getFileSystemManager().getFileContentInfoFactory();
-    }
-
-    /**
-     * @return FileOperations interface that provides access to the operations
-     *         API.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileOperations getFileOperations() throws FileSystemException
-    {
-        if (operations == null)
-        {
-            operations = new DefaultFileOperations(this);
-        }
-
-        return operations;
-    }
-
-    /**
-     * Returns the file system this file belongs to.
-     * @return The FileSystem this file is associated with.
-     */
-    @Override
-    public FileSystem getFileSystem()
-    {
-        return fs;
-    }
-
-    /**
-     * Returns an input stream to use to read the content of the file.
-     * @return The InputStream to access this file's content.
-     * @throws FileSystemException if an error occurs.
-     */
-    public InputStream getInputStream() throws FileSystemException
-    {
-        /* VFS-210
-        if (!getType().hasContent())
-        {
-            throw new FileSystemException("vfs.provider/read-not-file.error", name);
-        }
-        if (!isReadable())
-        {
-            throw new FileSystemException("vfs.provider/read-not-readable.error", name);
-        }
-        */
-
-        // Get the raw input stream
-        try
-        {
-            return doGetInputStream();
-        }
-        catch (final org.apache.commons.vfs2.FileNotFoundException exc)
-        {
-            throw new org.apache.commons.vfs2.FileNotFoundException(fileName, exc);
-        }
-        catch (final FileNotFoundException exc)
-        {
-            throw new org.apache.commons.vfs2.FileNotFoundException(fileName, exc);
-        }
-        catch (final FileSystemException exc)
-        {
-            throw exc;
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/read.error", fileName, exc);
-        }
-    }
-
-    /**
-     * Returns the name of the file.
-     *
-     * @return The FileName, never {@code null}.
-     */
-    @Override
-    public FileName getName()
-    {
-        return fileName;
-    }
-
-    /**
-     * Returns the receiver as a URI String for public display, like, without a
-     * password.
-     *
-     * @return A URI String without a password, never {@code null}.
-     */
-    @Override
-    public String getPublicURIString()
-    {
-        return fileName.getFriendlyURI();
-    }
-
-    /**
-     * Prepares this file for writing.  Makes sure it is either a file,
-     * or its parent folder exists.  Returns an output stream to use to
-     * write the content of the file to.
-     * @return An OutputStream where the new contents of the file can be written.
-     * @throws FileSystemException if an error occurs.
-     */
-    public OutputStream getOutputStream() throws FileSystemException
-    {
-        return getOutputStream(false);
-    }
-
-    /**
-     * Prepares this file for writing.  Makes sure it is either a file,
-     * or its parent folder exists.  Returns an output stream to use to
-     * write the content of the file to.<br>
-     *
-     * @param bAppend true when append to the file.<br>
-     *                Note: If the underlying filesystem does not support appending,
-     *                a FileSystemException is thrown.
-     * @return An OutputStream where the new contents of the file can be written.
-     * @throws FileSystemException if an error occurs; for example:<br>
-     *         bAppend is true, and the underlying FileSystem does not support it
-     */
-    public OutputStream getOutputStream(final boolean bAppend) throws FileSystemException
-    {
-        /* VFS-210
-        if (getType() != FileType.IMAGINARY && !getType().hasContent())
-        {
-            throw new FileSystemException("vfs.provider/write-not-file.error", name);
-        }
-        if (!isWriteable())
-        {
-            throw new FileSystemException("vfs.provider/write-read-only.error", name);
-        }
-        */
-
-        if (bAppend && !fs.hasCapability(Capability.APPEND_CONTENT))
-        {
-            throw new FileSystemException("vfs.provider/write-append-not-supported.error", fileName);
-        }
-
-        if (getType() == FileType.IMAGINARY)
-        {
-// Does not exist - make sure parent does
-            final FileObject parent = getParent();
-            if (parent != null)
-            {
-                parent.createFolder();
-            }
-        }
-
-// Get the raw output stream
-        try
-        {
-            return doGetOutputStream(bAppend);
-        }
-        catch (final RuntimeException re)
-        {
-            throw re;
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/write.error", exc, fileName);
-        }
-    }
-
-    /**
-     * Returns the parent of the file.
-     * @return the parent FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject getParent() throws FileSystemException
-    {
-        if (this.compareTo(fs.getRoot()) == 0) // equals is not implemented :-/
-        {
-            if (fs.getParentLayer() == null)
-            {
-                // Root file has no parent
-                return null;
-            }
-            else
-            {
-                // Return the parent of the parent layer
-                return fs.getParentLayer().getParent();
-            }
-        }
-
-        synchronized (fs)
-        {
-            // Locate the parent of this file
-            if (parent == null)
-            {
-                FileName name = fileName.getParent();
-                if (name == null)
-                {
-                    return null;
-                }
-                parent = fs.resolveFile(name);
-            }
-            return parent;
-        }
-    }
-
-    /**
-     * Returns an input/output stream to use to read and write the content of the file in and
-     * random manner.
-     * @param mode The RandomAccessMode.
-     * @return The RandomAccessContent.
-     * @throws FileSystemException if an error occurs.
-     */
-    public RandomAccessContent getRandomAccessContent(final RandomAccessMode mode) throws FileSystemException
-    {
-        /* VFS-210
-        if (!getType().hasContent())
-        {
-            throw new FileSystemException("vfs.provider/read-not-file.error", name);
-        }
-        */
-
-        if (mode.requestRead())
-        {
-            if (!fs.hasCapability(Capability.RANDOM_ACCESS_READ))
-            {
-                throw new FileSystemException("vfs.provider/random-access-read-not-supported.error");
-            }
-            if (!isReadable())
-            {
-                throw new FileSystemException("vfs.provider/read-not-readable.error", fileName);
-            }
-        }
-
-        if (mode.requestWrite())
-        {
-            if (!fs.hasCapability(Capability.RANDOM_ACCESS_WRITE))
-            {
-                throw new FileSystemException("vfs.provider/random-access-write-not-supported.error");
-            }
-            if (!isWriteable())
-            {
-                throw new FileSystemException("vfs.provider/write-read-only.error", fileName);
-            }
-        }
-
-        // Get the raw input stream
-        try
-        {
-            return doGetRandomAccessContent(mode);
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/random-access.error", fileName, exc);
-        }
-    }
-
-    /**
-     * Returns the file's type.
-     * @return The FileType.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileType getType() throws FileSystemException
-    {
-        synchronized (fs)
-        {
-            attach();
-
-            // VFS-210: get the type only if requested for
-            try
-            {
-                if (type == null)
-                {
-                    setFileType(doGetType());
-                }
-                if (type == null)
-                {
-                    setFileType(FileType.IMAGINARY);
-                }
-            }
-            catch (final Exception e)
-            {
-                throw new FileSystemException("vfs.provider/get-type.error", e, fileName);
-            }
-
-            return type;
-        }
-    }
-
-    /**
-     * Returns a URL representation of the file.
-     * @return The URL representation of the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public URL getURL() throws FileSystemException
-    {
-        try
-        {
-            return AccessController.doPrivileged(new PrivilegedExceptionAction<URL>()
-            {
-                @Override
-                public URL run() throws MalformedURLException
-                {
-                    final StringBuilder buf = new StringBuilder();
-                    final String scheme = UriParser.extractScheme(fileName.getURI(), buf);
-                    return new URL(scheme, "", -1,
-                        buf.toString(), new DefaultURLStreamHandler(fs.getContext(), fs.getFileSystemOptions()));
-                }
-            });
-        }
-        catch (final PrivilegedActionException e)
-        {
-            throw new FileSystemException("vfs.provider/get-url.error", fileName, e.getException());
-        }
-    }
-
-    /**
-     * Called when this file is changed.
-     * <p>
-     * This will only happen if you monitor the file using {@link org.apache.commons.vfs2.FileMonitor}.
-     *
-     * @throws Exception if an error occurs.
-     */
-    protected void handleChanged() throws Exception
-    {
-        // Notify the file system
-        fs.fireFileChanged(this);
-    }
-
-    /**
-     * Called when this file is created. Updates cached info and notifies
-     * the parent and file system.
-     *
-     * @param newType The type of the file.
-     * @throws Exception if an error occurs.
-     */
-    protected void handleCreate(final FileType newType) throws Exception
-    {
-        synchronized (fs)
-        {
-            if (attached)
-            {
-                // Fix up state
-                injectType(newType);
-
-                removeChildrenCache();
-
-                // Notify subclass
-                onChange();
-            }
-
-            // Notify parent that its child list may no longer be valid
-            notifyParent(this.getName(), newType);
-
-            // Notify the file system
-            fs.fireFileCreated(this);
-        }
-    }
-
-    /**
-     * Called when this file is deleted.  Updates cached info and notifies
-     * subclasses, parent and file system.
-     * @throws Exception if an error occurs.
-     */
-    protected void handleDelete() throws Exception
-    {
-        synchronized (fs)
-        {
-            if (attached)
-            {
-                // Fix up state
-                injectType(FileType.IMAGINARY);
-                removeChildrenCache();
-
-                // Notify subclass
-                onChange();
-            }
-
-            // Notify parent that its child list may no longer be valid
-            notifyParent(this.getName(), FileType.IMAGINARY);
-
-            // Notify the file system
-            fs.fireFileDeleted(this);
-        }
-    }
-
-    /**
-     * This method is meant to add an object where this object holds a strong reference then.
-     * E.g. a archive-filesystem creates a list of all children and they shouldn't get
-     * garbage collected until the container is garbage collected
-     *
-     * @param strongRef The Object to add.
-     */
-    // TODO should this be a FileObject?
-    public void holdObject(final Object strongRef)
-    {
-        if (objects == null)
-        {
-            objects = new ArrayList<Object>(INITIAL_LIST_SIZE);
-        }
-        objects.add(strongRef);
-    }
-
-    protected void injectType(final FileType fileType)
-    {
-        setFileType(fileType);
-    }
-
-    /**
-     * Check if the internal state is "attached".
-     *
-     * @return true if this is the case
-     */
-    @Override
-    public boolean isAttached()
-    {
-        return attached;
-    }
-
-    /**
-     * Check if the content stream is open.
-     *
-     * @return true if this is the case
-     */
-    @Override
-    public boolean isContentOpen()
-    {
-        if (content == null)
-        {
-            return false;
-        }
-
-        return content.isOpen();
-    }
-
-    /**
-     * Determines if this file is executable.
-     *
-     * @return {@code true} if this file is executable, {@code false} if not.
-     * @throws FileSystemException On error determining if this file exists.
-     */
-    @Override
-    public boolean isExecutable() throws FileSystemException
-    {
-        try
-        {
-            return exists() ? doIsExecutable() : false;
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/check-is-executable.error", fileName, exc);
-        }
-    }
-
-    /**
-     * Checks if this file is a regular file by using its file type.
-     *
-     * @return true if this file is a regular file.
-     * @throws FileSystemException if an error occurs.
-     * @see #getType()
-     * @see FileType#FILE
-     */
-    @Override
-    public boolean isFile() throws FileSystemException
-    {
-        // Use equals instead of == to avoid any class loader worries.
-        return FileType.FILE.equals(this.getType());
-    }
-
-    /**
-     * Checks if this file is a folder by using its file type.
-     *
-     * @return true if this file is a regular file.
-     * @throws FileSystemException if an error occurs.
-     * @see #getType()
-     * @see FileType#FOLDER
-     */
-    @Override
-    public boolean isFolder() throws FileSystemException
-    {
-        // Use equals instead of == to avoid any class loader worries.
-        return FileType.FOLDER.equals(this.getType());
-    }
-
-    /**
-     * Determines if this file can be read.
-     * @return true if the file is a hidden file, false otherwise.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean isHidden() throws FileSystemException
-    {
-        try
-        {
-            return exists() ? doIsHidden() : false;
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/check-is-hidden.error", fileName, exc);
-        }
-    }
-
-    /**
-     * Determines if this file can be read.
-     * @return true if the file can be read, false otherwise.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean isReadable() throws FileSystemException
-    {
-        try
-        {
-            return exists() ? doIsReadable() : false;
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/check-is-readable.error", fileName, exc);
-        }
-    }
-
-    /**
-     * Checks if this fileObject is the same file as {@code destFile} just with a different
-     * name. E.g. for case insensitive filesystems like windows.
-     *
-     * @param destFile The file to compare to.
-     * @return true if the FileObjects are the same.
-     * @throws FileSystemException if an error occurs.
-     */
-    protected boolean isSameFile(final FileObject destFile) throws FileSystemException
-    {
-        attach();
-        return doIsSameFile(destFile);
-    }
-
-    /**
-     * Determines if this file can be written to.
-     * @return true if the file can be written to, false otherwise.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean isWriteable() throws FileSystemException
-    {
-        try
-        {
-            if (exists())
-            {
-                return doIsWriteable();
-            }
-            else
-            {
-                final FileObject parent = getParent();
-                if (parent != null)
-                {
-                    return parent.isWriteable();
-                }
-                return true;
-            }
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/check-is-writeable.error", fileName, exc);
-        }
-    }
-
-    /**
-     * Returns an iterator over a set of all FileObject in this file object.
-     *
-     * @return an Iterator.
-     */
-    @Override
-    public Iterator<FileObject> iterator()
-    {
-        try
-        {
-            return listFiles(Selectors.SELECT_ALL).iterator();
-        }
-        catch (final FileSystemException e)
-        {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    /**
-     * Lists the set of matching descendants of this file, in depthwise
-     * order.
-     *
-     * @param selector The FileSelector.
-     * @return list of files or null if the base file (this object) do not exist or the {@code selector} is null
-     * @throws FileSystemException if an error occurs.
-     */
-    public List<FileObject> listFiles(final FileSelector selector) throws FileSystemException
-    {
-        if (!exists() || selector == null)
-        {
-            return null;
-        }
-
-        final ArrayList<FileObject> list = new ArrayList<FileObject>();
-        this.findFiles(selector, true, list);
-        return list;
-    }
-
-    /**
-     * Moves (rename) the file to another one.
-     * @param destFile The target FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void moveTo(final FileObject destFile) throws FileSystemException
-    {
-        if (canRenameTo(destFile))
-        {
-            if (!getParent().isWriteable())
-            {
-                throw new FileSystemException("vfs.provider/rename-parent-read-only.error",
-                        getName(),
-                        getParent().getName());
-            }
-        }
-        else
-        {
-            if (!isWriteable())
-            {
-                throw new FileSystemException("vfs.provider/rename-read-only.error", getName());
-            }
-        }
-
-        if (destFile.exists() && !isSameFile(destFile))
-        {
-            destFile.deleteAll();
-            // throw new FileSystemException("vfs.provider/rename-dest-exists.error", destFile.getName());
-        }
-
-        if (canRenameTo(destFile))
-        {
-            // issue rename on same filesystem
-            try
-            {
-                attach();
-                // remember type to avoid attach
-                FileType srcType = getType();
-
-                doRename(destFile);
-
-                FileObjectUtils.getAbstractFileObject(destFile).handleCreate(srcType);
-                destFile.close(); // now the destFile is no longer imaginary. force reattach.
-
-                handleDelete(); // fire delete-events. This file-object (src) is like deleted.
-            }
-            catch (final RuntimeException re)
-            {
-                throw re;
-            }
-            catch (final Exception exc)
-            {
-                throw new FileSystemException("vfs.provider/rename.error",  exc,
-                        getName(),
-                        destFile.getName());
-            }
-        }
-        else
-        {
-            // different fs - do the copy/delete stuff
-
-            destFile.copyFrom(this, Selectors.SELECT_SELF);
-
-            if ((destFile.getType().hasContent()
-                    && destFile.getFileSystem().hasCapability(Capability.SET_LAST_MODIFIED_FILE)
-                  || destFile.getType().hasChildren()
-                    && destFile.getFileSystem().hasCapability(Capability.SET_LAST_MODIFIED_FOLDER))
-                    && fs.hasCapability(Capability.GET_LAST_MODIFIED))
-            {
-                destFile.getContent().setLastModifiedTime(this.getContent().getLastModifiedTime());
-            }
-
-            deleteSelf();
-        }
-
-    }
-
-    /**
-     * will be called after this file-object closed all its streams.
-     */
-    protected void notifyAllStreamsClosed()
-    {
-    }
-
-    /**
-     * Notify the parent of a change to its children, when a child is created
-     * or deleted.
-     * @param childName The name of the child.
-     * @param newType The type of the child.
-     * @throws Exception if an error occurs.
-     */
-    private void notifyParent(final FileName childName, final FileType newType) throws Exception
-    {
-        if (parent == null)
-        {
-            final FileName parentName = fileName.getParent();
-            if (parentName != null)
-            {
-                // Locate the parent, if it is cached
-                parent = fs.getFileFromCache(parentName);
-            }
-        }
-
-        if (parent != null)
-        {
-            FileObjectUtils.getAbstractFileObject(parent).childrenChanged(childName, newType);
-        }
-    }
-
-    /**
-     * Called when the type or content of this file changes.
-     * <p>
-     * This implementation does nothing.
-     *
-     * @throws Exception if an error occurs.
-     */
-    protected void onChange() throws Exception
-    {
-    }
-
-    /**
-     * Called when the children of this file change.  Allows subclasses to
-     * refresh any cached information about the children of this file.
-     * <p>
-     * This implementation does nothing.
-     *
-     * @param child The name of the child that changed.
-     * @param newType The type of the file.
-     * @throws Exception if an error occurs.
-     */
-    protected void onChildrenChanged(final FileName child, final FileType newType) throws Exception
-    {
-    }
-
-    /**
-     * This will prepare the fileObject to get resynchronized with the underlying filesystem if required.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void refresh() throws FileSystemException
-    {
-        // Detach from the file
-        try
-        {
-            detach();
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider/resync.error", fileName, e);
-        }
-    }
-
-    private void removeChildrenCache()
-    {
-        children = null;
-    }
-
-    private FileObject resolveFile(final FileName child) throws FileSystemException
-    {
-        return fs.resolveFile(child);
-    }
-
-    /**
-     * Finds a file, relative to this file.
-     *
-     * @param path The path of the file to locate.  Can either be a relative
-     *             path, which is resolved relative to this file, or an
-     *             absolute path, which is resolved relative to the file system
-     *             that contains this file.
-     * @return The FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject resolveFile(final String path) throws FileSystemException
-    {
-        final FileName otherName = fs.getFileSystemManager().resolveName(fileName, path);
-        return fs.resolveFile(otherName);
-    }
-
-    /**
-     * Returns a child by name.
-     * @param name The name of the child to locate.
-     * @param scope the NameScope.
-     * @return The FileObject for the file or null if the child does not exist.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject resolveFile(final String name, final NameScope scope)
-        throws FileSystemException
-    {
-        // return fs.resolveFile(this.name.resolveName(name, scope));
-        return fs.resolveFile(fs.getFileSystemManager().resolveName(this.fileName, name, scope));
-    }
-
-    private FileObject[] resolveFiles(final FileName[] children) throws FileSystemException
-    {
-        if (children == null)
-        {
-            return null;
-        }
-
-        final FileObject[] objects = new FileObject[children.length];
-        for (int iterChildren = 0; iterChildren < children.length; iterChildren++)
-        {
-            objects[iterChildren] = resolveFile(children[iterChildren]);
-        }
-
-        return objects;
-    }
-
-    @Override
-    public boolean setExecutable(final boolean readable, final boolean ownerOnly) throws FileSystemException
-    {
-        try
-        {
-            return exists() ? doSetExecutable(readable, ownerOnly) : false;
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/set-executable.error", fileName, exc);
-        }
-    }
-
-    private void setFileType(final FileType type)
-    {
-        if (type != null && type != FileType.IMAGINARY)
-        {
-            try
-            {
-                fileName.setType(type);
-            }
-            catch (final FileSystemException e)
-            {
-                throw new RuntimeException(e.getMessage());
-            }
-        }
-        this.type = type;
-    }
-
-    @Override
-    public boolean setReadable(final boolean readable, final boolean ownerOnly) throws FileSystemException
-    {
-        try
-        {
-            return exists() ? doSetReadable(readable, ownerOnly) : false;
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/set-readable.error", fileName, exc);
-        }
-    }
-
-    // --- OPERATIONS ---
-
-    @Override
-    public boolean setWritable(final boolean readable, final boolean ownerOnly) throws FileSystemException
-    {
-        try
-        {
-            return exists() ? doSetWritable(readable, ownerOnly) : false;
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/set-writeable.error", fileName, exc);
-        }
-    }
-
-    /**
-     * Returns the URI as a String.
-     *
-     * @return Returns the URI as a String.
-     */
-    @Override
-    public String toString()
-    {
-        return fileName.getURI();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileProvider.java
deleted file mode 100644
index dfd5597..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileProvider.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.commons.vfs2.provider;
-
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.local.GenericFileNameParser;
-
-/**
- * A partial {@link FileProvider} implementation.  Takes care of managing the
- * file systems created by the provider.
- */
-public abstract class AbstractFileProvider
-    extends AbstractVfsContainer
-    implements FileProvider
-{
-    private static final AbstractFileSystem[] EMPTY_ABSTRACTFILESYSTEMS = new AbstractFileSystem[0];
-
-    /**
-     * The cached file systems.
-     * <p>
-     * This is a mapping from {@link FileSystemKey} (root URI and options)
-     * to {@link FileSystem}.
-     */
-    private final Map<FileSystemKey, FileSystem> fileSystems
-            = new TreeMap<FileSystemKey, FileSystem>(); // @GuardedBy("self")
-
-    private FileNameParser parser;
-
-    public AbstractFileProvider()
-    {
-        parser = GenericFileNameParser.getInstance();
-    }
-
-    protected FileNameParser getFileNameParser()
-    {
-        return parser;
-    }
-
-    protected void setFileNameParser(final FileNameParser parser)
-    {
-        this.parser = parser;
-    }
-
-    /**
-     * Closes the file systems created by this provider.
-     */
-    @Override
-    public void close()
-    {
-        synchronized (fileSystems)
-        {
-            fileSystems.clear();
-        }
-
-        super.close();
-    }
-
-    /**
-     * Creates a layered file system.  This method throws a 'not supported' exception.
-     * @param scheme The protocol to use to access the file.
-     * @param file a FileObject.
-     * @param properties Options to the file system.
-     * @return A FileObject associated with the new FileSystem.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject createFileSystem(final String scheme, final FileObject file, final FileSystemOptions properties)
-        throws FileSystemException
-    {
-        // Can't create a layered file system
-        throw new FileSystemException("vfs.provider/not-layered-fs.error", scheme);
-    }
-
-    /**
-     * Adds a file system to those cached by this provider.
-     * <p>
-     * The file system may implement {@link VfsComponent}, in which case it is initialised.
-     * @param key The root file of the file system, part of the cache key.
-     * @param fs the file system to add.
-     * @throws FileSystemException if any error occurs.
-     */
-    protected void addFileSystem(final Comparable<?> key, final FileSystem fs)
-        throws FileSystemException
-    {
-        // Add to the container and initialize
-        addComponent(fs);
-
-        final FileSystemKey treeKey = new FileSystemKey(key, fs.getFileSystemOptions());
-        ((AbstractFileSystem) fs).setCacheKey(treeKey);
-
-        synchronized (fileSystems)
-        {
-            fileSystems.put(treeKey, fs);
-        }
-    }
-
-    /**
-     * Locates a cached file system.
-     *
-     * @param key The root file of the file system, part of the cache key.
-     * @param fileSystemProps file system options the file system instance must have.
-     * @return The file system instance, or null if it is not cached.
-     */
-    protected FileSystem findFileSystem(final Comparable<?> key, final FileSystemOptions fileSystemProps)
-    {
-        final FileSystemKey treeKey = new FileSystemKey(key, fileSystemProps);
-
-        synchronized (fileSystems)
-        {
-            return fileSystems.get(treeKey);
-        }
-    }
-
-    /**
-     * Returns the FileSystemConfigBuidler.
-     * @return the FileSystemConfigBuilder.
-     */
-    @Override
-    public FileSystemConfigBuilder getConfigBuilder()
-    {
-        return null;
-    }
-
-    /**
-     * Free unused resources.
-     */
-    public void freeUnusedResources()
-    {
-        AbstractFileSystem[] abstractFileSystems;
-        synchronized (fileSystems)
-        {
-            // create snapshot under lock
-            abstractFileSystems = fileSystems.values().toArray(EMPTY_ABSTRACTFILESYSTEMS);
-        }
-
-        // process snapshot outside lock
-        for (final AbstractFileSystem fs : abstractFileSystems)
-        {
-            if (fs.isReleaseable())
-            {
-                fs.closeCommunicationLink();
-            }
-        }
-    }
-
-    /**
-     * Close the FileSystem.
-     * @param filesystem The FileSystem to close.
-     */
-    public void closeFileSystem(final FileSystem filesystem)
-    {
-        final AbstractFileSystem fs = (AbstractFileSystem) filesystem;
-
-        final FileSystemKey key = fs.getCacheKey();
-        if (key != null)
-        {
-            synchronized (fileSystems)
-            {
-                fileSystems.remove(key);
-            }
-        }
-
-        removeComponent(fs);
-        fs.close();
-    }
-
-    /**
-     * Parses an absolute URI.
-     *
-     * @param base The base file - if null the {@code uri} needs to be absolute
-     * @param uri The URI to parse.
-     * @return The FileName.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileName parseUri(final FileName base, final String uri) throws FileSystemException
-    {
-        if (getFileNameParser() != null)
-        {
-            return getFileNameParser().parseUri(getContext(), base, uri);
-        }
-
-        throw new FileSystemException("vfs.provider/filename-parser-missing.error");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
deleted file mode 100644
index b46bcf8..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
+++ /dev/null
@@ -1,683 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider;
-
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.CacheStrategy;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FilesCache;
-import org.apache.commons.vfs2.VfsLog;
-import org.apache.commons.vfs2.cache.OnCallRefreshFileObject;
-import org.apache.commons.vfs2.events.AbstractFileChangeEvent;
-import org.apache.commons.vfs2.events.ChangedEvent;
-import org.apache.commons.vfs2.events.CreateEvent;
-import org.apache.commons.vfs2.events.DeleteEvent;
-import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;
-import org.apache.commons.vfs2.util.Messages;
-
-/**
- * A partial {@link org.apache.commons.vfs2.FileSystem} implementation.
- */
-public abstract class AbstractFileSystem
-    extends AbstractVfsComponent
-    implements FileSystem
-{
-    private static final Log LOG = LogFactory.getLog(AbstractFileSystem.class);
-
-    /**
-     * The "root" of the file system. This is always "/" so it isn't always the "real"
-     * root.
-     */
-    private final FileName rootName;
-
-    /**
-     * The root URI of the file system. The base path specified as a file system option
-     * when the file system was created.
-     */
-    private final String rootURI;
-
-    private final Collection<Capability> caps = new HashSet<Capability>();
-
-    private FileObject parentLayer;
-
-    /**
-     * Map from FileName to an ArrayList of listeners for that file.
-     */
-    private final Map<FileName, ArrayList<FileListener>> listenerMap = new HashMap<FileName, ArrayList<FileListener>>();
-
-    /**
-     * FileSystemOptions used for configuration
-     */
-    private final FileSystemOptions fileSystemOptions;
-
-    /**
-     * How many fileObjects are handed out
-     */
-    private final AtomicLong useCount = new AtomicLong(0);
-
-
-    private FileSystemKey cacheKey;
-
-    /**
-     * open streams counter for this filesystem
-     */
-    private final AtomicInteger openStreams = new AtomicInteger(0);
-
-    protected AbstractFileSystem(final FileName rootName,
-                                 final FileObject parentLayer,
-                                 final FileSystemOptions fileSystemOptions)
-    {
-        this.parentLayer = parentLayer;
-        this.rootName = rootName;
-        this.fileSystemOptions = fileSystemOptions;
-        final FileSystemConfigBuilder builder = DefaultFileSystemConfigBuilder.getInstance();
-        String uri = builder.getRootURI(fileSystemOptions);
-        if (uri == null)
-        {
-            uri = rootName.getURI();
-        }
-        this.rootURI = uri;
-    }
-
-    /**
-     * Initializes this component.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void init() throws FileSystemException
-    {
-        addCapabilities(caps);
-    }
-
-    /**
-     * Closes this component.
-     */
-    @Override
-    public void close()
-    {
-        closeCommunicationLink();
-
-        parentLayer = null;
-    }
-
-    /**
-     * Close the underlying link used to access the files.
-     */
-    public void closeCommunicationLink()
-    {
-        synchronized (this)
-        {
-            doCloseCommunicationLink();
-        }
-    }
-
-    /**
-     * Close the underlying link used to access the files
-     */
-    protected void doCloseCommunicationLink()
-    {
-    }
-
-    /**
-     * Creates a file object.
-     * <p>
-     * This method is called only if the requested file is not cached.
-     *
-     * @param name name referencing the new file.
-     * @return new created FileObject.
-     * @throws Exception might throw an Exception, which is then wrapped in FileSystemException.
-     */
-    protected abstract FileObject createFile(final AbstractFileName name) throws Exception;
-
-    /**
-     * Adds the capabilities of this file system.
-     *
-     * @param caps collections of Capabilities, can be immutable.
-     */
-    protected abstract void addCapabilities(Collection<Capability> caps);
-
-    /**
-     * Returns the name of the root of this file system.
-     * @return the root FileName.
-     */
-    @Override
-    public FileName getRootName()
-    {
-        return rootName;
-    }
-
-    /**
-     * Returns the root URI specified for this file System.
-     * @return The root URI used in this file system.
-     * @since 2.0
-     */
-    @Override
-    public String getRootURI()
-    {
-        return rootURI;
-    }
-
-    /**
-     * Adds a file object to the cache.
-     * @param file the file to add.
-     */
-    protected void putFileToCache(final FileObject file)
-    {
-        getCache().putFile(file);
-    }
-
-    private FilesCache getCache()
-    {
-        FilesCache files;
-        files = getContext().getFileSystemManager().getFilesCache();
-        if (files == null)
-        {
-            throw new RuntimeException(Messages.getString("vfs.provider/files-cache-missing.error"));
-        }
-
-        return files;
-    }
-
-    /**
-     * Returns a cached file.
-     * @param name name to search for.
-     * @return file object or null if not found.
-     */
-    protected FileObject getFileFromCache(final FileName name)
-    {
-        return getCache().getFile(this, name);
-    }
-
-    /**
-     * Remove a cached file.
-     * @param name The file name to remove.
-     */
-    protected void removeFileFromCache(final FileName name)
-    {
-        getCache().removeFile(this, name);
-    }
-
-    /**
-     * Determines if this file system has a particular capability.
-     * @param capability the Capability to check for.
-     * @return true if the FileSystem has the Capability, false otherwise.
-     */
-    @Override
-    public boolean hasCapability(final Capability capability)
-    {
-        return caps.contains(capability);
-    }
-
-    /**
-     * Retrieves the attribute with the specified name. The default
-     * implementation simply throws an exception.
-     * @param attrName The name of the attribute.
-     * @return the Object associated with the attribute or null if no object is.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public Object getAttribute(final String attrName) throws FileSystemException
-    {
-        throw new FileSystemException("vfs.provider/get-attribute-not-supported.error");
-    }
-
-    /**
-     * Sets the attribute with the specified name. The default
-     * implementation simply throws an exception.
-     * @param attrName the attribute name.
-     * @param value The object to associate with the attribute.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void setAttribute(final String attrName, final Object value)
-        throws FileSystemException
-    {
-        throw new FileSystemException("vfs.provider/set-attribute-not-supported.error");
-    }
-
-    /**
-     * Returns the parent layer if this is a layered file system.
-     * @return The FileObject for the parent layer.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject getParentLayer() throws FileSystemException
-    {
-        return parentLayer;
-    }
-
-    /**
-     * Returns the root file of this file system.
-     * @return The root FileObject of the FileSystem
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject getRoot() throws FileSystemException
-    {
-        return resolveFile(rootName);
-    }
-
-    /**
-     * Finds a file in this file system.
-     * @param nameStr The name of the file to resolve.
-     * @return The located FileObject or null if none could be located.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject resolveFile(final String nameStr) throws FileSystemException
-    {
-        // Resolve the name, and create the file
-        final FileName name = getFileSystemManager().resolveName(rootName, nameStr);
-        return resolveFile(name);
-    }
-
-    /**
-     * Finds a file in this file system.
-     * @param name The name of the file to locate.
-     * @return The located FileObject or null if none could be located.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject resolveFile(final FileName name) throws FileSystemException
-    {
-        return resolveFile(name, true);
-    }
-
-    private synchronized FileObject resolveFile(final FileName name, final boolean useCache) throws FileSystemException
-    {
-        if (!rootName.getRootURI().equals(name.getRootURI()))
-        {
-            throw new FileSystemException("vfs.provider/mismatched-fs-for-name.error",
-                    name, rootName, name.getRootURI());
-        }
-
-        // imario@apache.org ==> use getFileFromCache
-        FileObject file;
-        if (useCache)
-        {
-            file = getFileFromCache(name);
-        }
-        else
-        {
-            file = null;
-        }
-
-        if (file == null)
-        {
-            try
-            {
-                file = createFile((AbstractFileName) name);
-            }
-            catch (final Exception e)
-            {
-                throw new FileSystemException("vfs.provider/resolve-file.error", name, e);
-            }
-
-            file = decorateFileObject(file);
-
-            // imario@apache.org ==> use putFileToCache
-            if (useCache)
-            {
-                putFileToCache(file);
-            }
-        }
-
-        /**
-         * resync the file information if requested
-         */
-        if (getFileSystemManager().getCacheStrategy().equals(CacheStrategy.ON_RESOLVE))
-        {
-            file.refresh();
-        }
-        return file;
-    }
-
-    protected FileObject decorateFileObject(FileObject file)  throws FileSystemException
-    {
-        if (getFileSystemManager().getCacheStrategy().equals(CacheStrategy.ON_CALL))
-        {
-            file = new OnCallRefreshFileObject(file);
-        }
-
-        if (getFileSystemManager().getFileObjectDecoratorConst() != null)
-        {
-            try
-            {
-                file = (FileObject) getFileSystemManager().getFileObjectDecoratorConst().
-                        newInstance(new Object[]{file});
-            }
-            catch (final InstantiationException e)
-            {
-                throw new FileSystemException("vfs.impl/invalid-decorator.error",
-                        getFileSystemManager().getFileObjectDecorator().getName(), e);
-            }
-            catch (final IllegalAccessException e)
-            {
-                throw new FileSystemException("vfs.impl/invalid-decorator.error",
-                        getFileSystemManager().getFileObjectDecorator().getName(), e);
-            }
-            catch (final InvocationTargetException e)
-            {
-                throw new FileSystemException("vfs.impl/invalid-decorator.error",
-                        getFileSystemManager().getFileObjectDecorator().getName(), e);
-            }
-        }
-
-        return file;
-    }
-
-    /**
-     * Creates a temporary local copy of a file and its descendants.
-     * @param file The FileObject to replicate.
-     * @param selector The FileSelector.
-     * @return The replicated File.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public File replicateFile(final FileObject file,
-                              final FileSelector selector)
-        throws FileSystemException
-    {
-        if (!file.exists())
-        {
-            throw new FileSystemException("vfs.provider/replicate-missing-file.error", file.getName());
-        }
-
-        try
-        {
-            return doReplicateFile(file, selector);
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider/replicate-file.error", file.getName(), e);
-        }
-    }
-
-    /**
-     * Return the FileSystemOptions used to instantiate this filesystem.
-     * @return the FileSystemOptions.
-     */
-    @Override
-    public FileSystemOptions getFileSystemOptions()
-    {
-        return fileSystemOptions;
-    }
-
-    /**
-     * Return the FileSystemManager used to instantiate this filesystem.
-     * @return the FileSystemManager.
-     */
-    @Override
-    public FileSystemManager getFileSystemManager()
-    {
-        return getContext().getFileSystemManager();
-    }
-
-    /**
-     * Returns the accuracy of the last modification time.
-     *
-     * @return ms 0 perfectly accurate, {@literal >0} might be off by this value e.g. sftp 1000ms
-     */
-    @Override
-    public double getLastModTimeAccuracy()
-    {
-        return 0;
-    }
-
-    /**
-     * Creates a temporary local copy of a file and its descendants.
-     *
-     * @param file the start of the tree.
-     * @param selector selection what to do with childs.
-     * @return replicated root file.
-     * @throws Exception any Exception is wrapped as FileSystemException.
-     */
-    protected File doReplicateFile(final FileObject file,
-                                   final FileSelector selector)
-        throws Exception
-    {
-        return getContext().getReplicator().replicateFile(file, selector);
-    }
-
-    /**
-     * Adds a junction to this file system.
-     * @param junctionPoint The junction point.
-     * @param targetFile The target to add.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void addJunction(final String junctionPoint,
-                            final FileObject targetFile)
-        throws FileSystemException
-    {
-        throw new FileSystemException("vfs.provider/junctions-not-supported.error", rootName);
-    }
-
-    /**
-     * Removes a junction from this file system.
-     * @param junctionPoint The junction point.
-     * @throws FileSystemException if an error occurs
-     */
-    @Override
-    public void removeJunction(final String junctionPoint) throws FileSystemException
-    {
-        throw new FileSystemException("vfs.provider/junctions-not-supported.error", rootName);
-    }
-
-    /**
-     * Adds a listener on a file in this file system.
-     * @param file The FileObject to be monitored.
-     * @param listener The FileListener
-     */
-    @Override
-    public void addListener(final FileObject file,
-                            final FileListener listener)
-    {
-        synchronized (listenerMap)
-        {
-            ArrayList<FileListener> listeners = listenerMap.get(file.getName());
-            if (listeners == null)
-            {
-                listeners = new ArrayList<FileListener>();
-                listenerMap.put(file.getName(), listeners);
-            }
-            listeners.add(listener);
-        }
-    }
-
-    /**
-     * Removes a listener from a file in this file system.
-     * @param file The FileObject to be monitored.
-     * @param listener The FileListener
-     */
-    @Override
-    public void removeListener(final FileObject file,
-                               final FileListener listener)
-    {
-        synchronized (listenerMap)
-        {
-            final ArrayList<?> listeners = listenerMap.get(file.getName());
-            if (listeners != null)
-            {
-                listeners.remove(listener);
-                if (listeners.isEmpty())
-                {
-                    listenerMap.remove(file.getName());
-                }
-            }
-        }
-    }
-
-    /**
-     * Fires a file create event.
-     * @param file The FileObject that was created.
-     */
-    public void fireFileCreated(final FileObject file)
-    {
-        fireEvent(new CreateEvent(file));
-    }
-
-    /**
-     * Fires a file delete event.
-     * @param file The FileObject that was deleted.
-     */
-    public void fireFileDeleted(final FileObject file)
-    {
-        fireEvent(new DeleteEvent(file));
-    }
-
-    /**
-     * Fires a file changed event.
-     * <p>
-     * This will only happen if you monitor the file using {@link org.apache.commons.vfs2.FileMonitor}.
-     *
-     * @param file The FileObject that changed.
-     */
-    public void fireFileChanged(final FileObject file)
-    {
-        fireEvent(new ChangedEvent(file));
-    }
-
-    /**
-     * Returns true if no file is using this filesystem.
-     *
-     * @return true if no file is using this FileSystem.
-     */
-    public boolean isReleaseable()
-    {
-        return useCount.get() < 1;
-    }
-
-    void freeResources()
-    {
-    }
-
-    /**
-     * Fires an event.
-     */
-    private void fireEvent(final AbstractFileChangeEvent event)
-    {
-        FileListener[] fileListeners = null;
-        final FileObject file = event.getFile();
-
-        synchronized (listenerMap)
-        {
-            final ArrayList<?> listeners = listenerMap.get(file.getName());
-            if (listeners != null)
-            {
-                fileListeners = listeners.toArray(new FileListener[listeners.size()]);
-            }
-        }
-
-        if (fileListeners != null)
-        {
-            for (final FileListener fileListener : fileListeners)
-            {
-                try
-                {
-                    event.notify(fileListener);
-                }
-                catch (final Exception e)
-                {
-                    final String message = Messages.getString("vfs.provider/notify-listener.warn", file);
-                    // getLogger().warn(message, e);
-                    VfsLog.warn(getLogger(), LOG, message, e);
-                }
-            }
-        }
-    }
-
-    void fileObjectHanded(final FileObject fileObject)
-    {
-        useCount.incrementAndGet();
-    }
-
-    void fileObjectDestroyed(final FileObject fileObject)
-    {
-        useCount.decrementAndGet();
-    }
-
-    void setCacheKey(final FileSystemKey cacheKey)
-    {
-        this.cacheKey = cacheKey;
-    }
-
-    FileSystemKey getCacheKey()
-    {
-        return this.cacheKey;
-    }
-
-    void streamOpened()
-    {
-        openStreams.incrementAndGet();
-    }
-
-    void streamClosed()
-    {
-        int count;
-
-        do
-        {
-            count = openStreams.get();
-            if (count < 1)
-            {
-                return;
-            }
-        } while(openStreams.compareAndSet(count, count - 1));
-
-        if (count == 1)
-        {
-            notifyAllStreamsClosed();
-        }
-    }
-
-    /**
-     * will be called after all file-objects closed their streams.
-     */
-    protected void notifyAllStreamsClosed()
-    {
-    }
-
-    /**
-     * check if this filesystem has open streams.
-     * @return true if the FileSystem has open streams.
-     */
-    public boolean isOpen()
-    {
-        return openStreams.get() > 0;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractLayeredFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractLayeredFileProvider.java
deleted file mode 100644
index e2bea71..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractLayeredFileProvider.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * A {@link FileProvider} that is layered on top of another, such as the
- * contents of a zip or tar file.
- */
-public abstract class AbstractLayeredFileProvider
-    extends AbstractFileProvider
-{
-    public AbstractLayeredFileProvider()
-    {
-        super();
-        setFileNameParser(LayeredFileNameParser.getInstance());
-    }
-
-    /**
-     * Locates a file object, by absolute URI.
-     * @param baseFile The base FileObject.
-     * @param uri The name of the file to locate.
-     * @param fileSystemOptions The FileSystemOptions.
-     * @return The FileObject if it is located, null otherwise.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject findFile(final FileObject baseFile,
-                               final String uri,
-                               final FileSystemOptions fileSystemOptions) throws FileSystemException
-    {
-        // Split the URI up into its parts
-        final LayeredFileName name = (LayeredFileName) parseUri(baseFile != null ? baseFile.getName() : null, uri);
-
-        // Make the URI canonical
-
-        // Resolve the outer file name
-        final FileName fileName = name.getOuterName();
-        final FileObject file = getContext().resolveFile(baseFile, fileName.getURI(), fileSystemOptions);
-
-        // Create the file system
-        final FileObject rootFile = createFileSystem(name.getScheme(), file, fileSystemOptions);
-
-        // Resolve the file
-        return rootFile.resolveFile(name.getPath());
-    }
-
-    /**
-     * Creates a layered file system.
-     * @param scheme The protocol to use.
-     * @param file a FileObject.
-     * @param fileSystemOptions Options to access the FileSystem.
-     * @return A FileObject associated with the new FileSystem.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public synchronized FileObject createFileSystem(final String scheme,
-                                                    final FileObject file,
-                                                    final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        // Check if cached
-        final FileName rootName = file.getName();
-        FileSystem fs = findFileSystem(rootName, fileSystemOptions);
-        if (fs == null)
-        {
-            // Create the file system
-            fs = doCreateFileSystem(scheme, file, fileSystemOptions);
-            addFileSystem(rootName, fs);
-        }
-        return fs.getRoot();
-    }
-
-    /**
-     * Creates a layered file system.
-     * <p>
-     * This method is called if the file system is not cached.
-     *
-     * @param scheme The URI scheme.
-     * @param file   The file to create the file system on top of.
-     * @param fileSystemOptions options for new and underlying file systems.
-     * @return The file system, never null. Might implement {@link VfsComponent}.
-     * @throws FileSystemException if the file system cannot be created.
-     */
-    protected abstract FileSystem doCreateFileSystem(final String scheme,
-                                                     final FileObject file,
-                                                     final FileSystemOptions fileSystemOptions)
-        throws FileSystemException;
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractOriginatingFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractOriginatingFileProvider.java
deleted file mode 100644
index 216641b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractOriginatingFileProvider.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * A {@link FileProvider} that handles physical files, such as the files in a
- * local fs, or on an FTP server.  An originating file system cannot be
- * layered on top of another file system.
- */
-public abstract class AbstractOriginatingFileProvider
-    extends AbstractFileProvider
-{
-    public AbstractOriginatingFileProvider()
-    {
-        super();
-    }
-
-    /**
-     * Locates a file object, by absolute URI.
-     *
-     * @param baseFile The base file object.
-     * @param uri The URI of the file to locate
-     * @param fileSystemOptions The FileSystem options.
-     * @return The located FileObject
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject findFile(final FileObject baseFile,
-                               final String uri,
-                               final FileSystemOptions fileSystemOptions) throws FileSystemException
-    {
-        // Parse the URI
-        final FileName name;
-        try
-        {
-            name = parseUri(baseFile != null ? baseFile.getName() : null, uri);
-        }
-        catch (final FileSystemException exc)
-        {
-            throw new FileSystemException("vfs.provider/invalid-absolute-uri.error", uri, exc);
-        }
-
-        // Locate the file
-        return findFile(name, fileSystemOptions);
-    }
-
-    /**
-     * Locates a file from its parsed URI.
-     * @param name The file name.
-     * @param fileSystemOptions FileSystem options.
-     * @return A FileObject associated with the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    protected FileObject findFile(final FileName name, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        // Check in the cache for the file system
-        final FileName rootName = getContext().getFileSystemManager().resolveName(name, FileName.ROOT_PATH);
-
-        final FileSystem fs = getFileSystem(rootName, fileSystemOptions);
-
-        // Locate the file
-        // return fs.resolveFile(name.getPath());
-        return fs.resolveFile(name);
-    }
-
-    /**
-     * Returns the FileSystem associated with the specified root.
-     * @param rootName The root path.
-     * @param fileSystemOptions The FileSystem options.
-     * @return The FileSystem.
-     * @throws FileSystemException if an error occurs.
-     * @since 2.0
-     */
-    protected synchronized FileSystem getFileSystem(final FileName rootName, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        FileSystem fs = findFileSystem(rootName, fileSystemOptions);
-        if (fs == null)
-        {
-            // Need to create the file system, and cache it
-            fs = doCreateFileSystem(rootName, fileSystemOptions);
-            addFileSystem(rootName, fs);
-        }
-        return fs;
-    }
-
-
-
-    /**
-     * Creates a {@link FileSystem}.  If the returned FileSystem implements
-     * {@link VfsComponent}, it will be initialised.
-     *
-     * @param rootName The name of the root file of the file system to create.
-     * @param fileSystemOptions The FileSystem options.
-     * @return The FileSystem.
-     * @throws FileSystemException if an error occurs.
-     */
-    protected abstract FileSystem doCreateFileSystem(final FileName rootName, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractRandomAccessContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractRandomAccessContent.java
deleted file mode 100644
index 1da7477..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractRandomAccessContent.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.commons.vfs2.provider;
-
-import java.io.IOException;
-
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * Implements the {@link java.io.DataOutput} part of the {@link RandomAccessContent} interface and throws
- * {@link UnsupportedOperationException} when one of these methods are called. For read-only random access
- * implementations.
- */
-public abstract class AbstractRandomAccessContent implements RandomAccessContent
-{
-    protected AbstractRandomAccessContent(final RandomAccessMode mode)
-    {
-    }
-
-    /**
-     * @deprecated see {@link java.io.DataInputStream#readLine()} This method will be removed when it is removed from
-     *             the DataInput interface this class implements (which will probably never happen).
-     * @return The line as a String.
-     * @throws IOException
-     *             if an error occurs.
-     */
-    @Override
-    @Deprecated
-    public String readLine() throws IOException
-    {
-        throw new UnsupportedOperationException("deprecated");
-    }
-
-    @Override
-    public void write(final byte[] b) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void write(final byte[] b, final int off, final int len) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void write(final int b) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeBoolean(final boolean v) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeByte(final int v) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeBytes(final String s) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeChar(final int v) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeChars(final String s) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeDouble(final double v) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeFloat(final float v) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeInt(final int v) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeLong(final long v) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeShort(final int v) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void writeUTF(final String str) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractRandomAccessStreamContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractRandomAccessStreamContent.java
deleted file mode 100644
index db1fd25..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractRandomAccessStreamContent.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.commons.vfs2.provider;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * Implements the part usable for all stream-based random access.
- */
-public abstract class AbstractRandomAccessStreamContent extends AbstractRandomAccessContent
-{
-    protected AbstractRandomAccessStreamContent(final RandomAccessMode mode)
-    {
-        super(mode);
-    }
-
-    protected abstract DataInputStream getDataInputStream() throws IOException;
-
-    @Override
-    public byte readByte() throws IOException
-    {
-        return getDataInputStream().readByte();
-    }
-
-    @Override
-    public char readChar() throws IOException
-    {
-        return getDataInputStream().readChar();
-    }
-
-    @Override
-    public double readDouble() throws IOException
-    {
-        return getDataInputStream().readDouble();
-    }
-
-    @Override
-    public float readFloat() throws IOException
-    {
-        return getDataInputStream().readFloat();
-    }
-
-    @Override
-    public int readInt() throws IOException
-    {
-        return getDataInputStream().readInt();
-    }
-
-    @Override
-    public int readUnsignedByte() throws IOException
-    {
-        return getDataInputStream().readUnsignedByte();
-    }
-
-    @Override
-    public int readUnsignedShort() throws IOException
-    {
-        return getDataInputStream().readUnsignedShort();
-    }
-
-    @Override
-    public long readLong() throws IOException
-    {
-        return getDataInputStream().readLong();
-    }
-
-    @Override
-    public short readShort() throws IOException
-    {
-        return getDataInputStream().readShort();
-    }
-
-    @Override
-    public boolean readBoolean() throws IOException
-    {
-        return getDataInputStream().readBoolean();
-    }
-
-    @Override
-    public int skipBytes(final int n) throws IOException
-    {
-        return getDataInputStream().skipBytes(n);
-    }
-
-    @Override
-    public void readFully(final byte[] b) throws IOException
-    {
-        getDataInputStream().readFully(b);
-    }
-
-    @Override
-    public void readFully(final byte[] b, final int off, final int len) throws IOException
-    {
-        getDataInputStream().readFully(b, off, len);
-    }
-
-    @Override
-    public String readUTF() throws IOException
-    {
-        return getDataInputStream().readUTF();
-    }
-
-    @Override
-    public InputStream getInputStream() throws IOException
-    {
-        return getDataInputStream();
-    }
-
-    @Override
-    public void setLength(final long newLength) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractVfsComponent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractVfsComponent.java
deleted file mode 100644
index 4311aff..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractVfsComponent.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.commons.vfs2.provider;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * A partial {@link VfsComponent} implementation.
- */
-public abstract class AbstractVfsComponent
-    implements VfsComponent
-{
-    private VfsComponentContext context;
-    private Log log;
-
-    /**
-     * Sets the Logger to use for the component.
-     * @param log The Log to use.
-     */
-    @Override
-    public final void setLogger(final Log log)
-    {
-        this.log = log;
-    }
-
-    /**
-     * Sets the context for this file system provider.
-     * @param context The VfsComponentContext.
-     */
-    @Override
-    public final void setContext(final VfsComponentContext context)
-    {
-        this.context = context;
-    }
-
-    /**
-     * Initializes the component.  This implementation does nothing.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void init() throws FileSystemException
-    {
-    }
-
-    /**
-     * Closes the provider.  This implementation does nothing.
-     */
-    @Override
-    public void close()
-    {
-    }
-
-    /**
-     * Returns the logger for this file system to use.
-     * @return logger for this file system
-     */
-    protected final Log getLogger()
-    {
-        return log;
-    }
-
-    /**
-     * Returns the context for this provider.
-     * @return provider context
-     */
-    protected final VfsComponentContext getContext()
-    {
-        return context;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractVfsContainer.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractVfsContainer.java
deleted file mode 100644
index 1156709..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractVfsContainer.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.commons.vfs2.provider;
-
-import java.util.ArrayList;
-
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * A {@link VfsComponent} that contains a set of sub-components.
- */
-public abstract class AbstractVfsContainer
-    extends AbstractVfsComponent
-{
-    /**
-     * The components contained by this component.
-     */
-    private final ArrayList<Object> components
-            = new ArrayList<Object>(); // @GuardedBy("self")
-
-    /**
-     * Adds a sub-component to this component.
-     * <p>
-     * If the sub-component implements {@link VfsComponent}, it is initialised.
-     * All sub-components are closed when this component is closed.
-     * @param component the component to add.
-     * @throws FileSystemException if any error occurs.
-     */
-    protected void addComponent(final Object component)
-        throws FileSystemException
-    {
-        synchronized (components)
-        {
-            if (!components.contains(component))
-            {
-                // Initialise
-                if (component instanceof VfsComponent)
-                {
-                    final VfsComponent vfsComponent = (VfsComponent) component;
-                    vfsComponent.setLogger(getLogger());
-                    vfsComponent.setContext(getContext());
-                    vfsComponent.init();
-                }
-
-                // Keep track of component, to close it later
-                components.add(component);
-            }
-        } // synchronized
-    }
-
-    /**
-     * Removes a sub-component from this component.
-     *
-     * @param component the component to remove.
-     */
-    protected void removeComponent(final Object component)
-    {
-        synchronized (components)
-        {
-            // multiple instances should not happen
-            components.remove(component);
-        }
-    }
-
-    /**
-     * Closes the sub-components of this component.
-     */
-    @Override
-    public void close()
-    {
-        final Object[] toclose;
-        synchronized (components)
-        {
-            toclose = components.toArray();
-            components.clear();
-        }
-  
-        // Close all components
-        for (Object component : toclose)
-        {
-            if (component instanceof VfsComponent)
-            {
-                final VfsComponent vfsComponent = (VfsComponent) component;
-                vfsComponent.close();
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/CompositeFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/CompositeFileProvider.java
deleted file mode 100644
index 9eb2bfb..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/CompositeFileProvider.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * Description.
- */
-public abstract class CompositeFileProvider extends AbstractFileProvider
-{
-    private static final int INITIAL_BUFSZ = 80;
-
-    public CompositeFileProvider()
-    {
-        super();
-    }
-
-    /**
-     * The schemes known.
-     * @return Array of supported schemes.
-     */
-    protected abstract String[] getSchemes();
-
-    /**
-     * Locates a file object, by absolute URI.
-     * @param baseFile The base FileObject.
-     * @param uri The file to find.
-     * @param fileSystemOptions The options for the FileSystem.
-     * @return A FileObject for the located file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject findFile(final FileObject baseFile,
-                               final String uri,
-                               final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final StringBuilder buf = new StringBuilder(INITIAL_BUFSZ);
-
-        UriParser.extractScheme(uri, buf);
-
-        final String[] schemes = getSchemes();
-        for (final String scheme : schemes)
-        {
-            buf.insert(0, ":");
-            buf.insert(0, scheme);
-        }
-
-        final FileObject fo = getContext().getFileSystemManager().resolveFile(buf.toString(), fileSystemOptions);
-        return fo;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultFileContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultFileContent.java
deleted file mode 100644
index 11aab2e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultFileContent.java
+++ /dev/null
@@ -1,902 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.cert.Certificate;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileContentInfo;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.util.MonitorInputStream;
-import org.apache.commons.vfs2.util.MonitorOutputStream;
-import org.apache.commons.vfs2.util.MonitorRandomAccessContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * The content of a file.
- */
-public final class DefaultFileContent implements FileContent
-{
-    /*
-    static final int STATE_NONE = 0;
-    static final int STATE_READING = 1;
-    static final int STATE_WRITING = 2;
-    static final int STATE_RANDOM_ACCESS = 3;
-    */
-
-    static final int STATE_CLOSED = 0;
-    static final int STATE_OPENED = 1;
-
-    /**
-     * The default buffer size for {@link #write(OutputStream)}
-     */
-    private static final int WRITE_BUFFER_SIZE = 4096;
-
-    private final AbstractFileObject fileObject;
-    private Map<String, Object> attrs;
-    private Map<String, Object> roAttrs;
-    private FileContentInfo fileContentInfo;
-    private final FileContentInfoFactory fileContentInfoFactory;
-
-    private final ThreadLocal<FileContentThreadData> threadData = new ThreadLocal<FileContentThreadData>();
-    private boolean resetAttributes;
-
-    /**
-     * open streams counter for this file
-     */
-    private int openStreams;
-
-    public DefaultFileContent(final AbstractFileObject file, final FileContentInfoFactory fileContentInfoFactory)
-    {
-        this.fileObject = file;
-        this.fileContentInfoFactory = fileContentInfoFactory;
-    }
-
-    private FileContentThreadData getOrCreateThreadData()
-    {
-        FileContentThreadData data = this.threadData.get();
-        if (data == null)
-        {
-            data = new FileContentThreadData();
-            this.threadData.set(data);
-        }
-        return data;
-    }
-
-    void streamOpened()
-    {
-        synchronized (this)
-        {
-            openStreams++;
-        }
-        ((AbstractFileSystem) fileObject.getFileSystem()).streamOpened();
-    }
-
-    void streamClosed()
-    {
-        synchronized (this)
-        {
-            if (openStreams > 0)
-            {
-                openStreams--;
-                if (openStreams < 1)
-                {
-                    fileObject.notifyAllStreamsClosed();
-                }
-            }
-        }
-        ((AbstractFileSystem) fileObject.getFileSystem()).streamClosed();
-    }
-
-    /**
-     * Returns the file that this is the content of.
-     * @return the FileObject.
-     */
-    @Override
-    public FileObject getFile()
-    {
-        return fileObject;
-    }
-
-    /**
-     * Returns the size of the content (in bytes).
-     * @return The size of the content (in bytes).
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public long getSize() throws FileSystemException
-    {
-        // Do some checking
-        if (!fileObject.getType().hasContent())
-        {
-            throw new FileSystemException("vfs.provider/get-size-not-file.error", fileObject);
-        }
-        /*
-        if (getThreadData().getState() == STATE_WRITING || getThreadData().getState() == STATE_RANDOM_ACCESS)
-        {
-            throw new FileSystemException("vfs.provider/get-size-write.error", file);
-        }
-        */
-
-        try
-        {
-            // Get the size
-            return fileObject.doGetContentSize();
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider/get-size.error", exc, fileObject);
-        }
-    }
-
-    /**
-     * Returns the last-modified timestamp.
-     * @return The last modified timestamp.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public long getLastModifiedTime() throws FileSystemException
-    {
-        /*
-        if (getThreadData().getState() == STATE_WRITING || getThreadData().getState() == STATE_RANDOM_ACCESS)
-        {
-            throw new FileSystemException("vfs.provider/get-last-modified-writing.error", file);
-        }
-        */
-        if (!fileObject.getType().hasAttributes())
-        {
-            throw new FileSystemException("vfs.provider/get-last-modified-no-exist.error", fileObject);
-        }
-        try
-        {
-            return fileObject.doGetLastModifiedTime();
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider/get-last-modified.error", fileObject, e);
-        }
-    }
-
-    /**
-     * Sets the last-modified timestamp.
-     * @param modTime The last modified timestamp.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void setLastModifiedTime(final long modTime) throws FileSystemException
-    {
-        /*
-        if (getThreadData().getState() == STATE_WRITING || getThreadData().getState() == STATE_RANDOM_ACCESS)
-        {
-            throw new FileSystemException("vfs.provider/set-last-modified-writing.error", file);
-        }
-        */
-        if (!fileObject.getType().hasAttributes())
-        {
-            throw new FileSystemException("vfs.provider/set-last-modified-no-exist.error", fileObject);
-        }
-        try
-        {
-            if (!fileObject.doSetLastModifiedTime(modTime))
-            {
-                throw new FileSystemException("vfs.provider/set-last-modified.error", fileObject);
-            }
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider/set-last-modified.error", fileObject, e);
-        }
-    }
-
-    /**
-     * Checks if an attribute exists.
-     * @param attrName The name of the attribute to check.
-     * @return true if the attribute is associated with the file.
-     * @throws FileSystemException if an error occurs.
-     * @since 2.0
-     */
-    @Override
-    public boolean hasAttribute(final String attrName) throws FileSystemException
-    {
-        if (!fileObject.getType().hasAttributes())
-        {
-            throw new FileSystemException("vfs.provider/exists-attributes-no-exist.error", fileObject);
-        }
-        getAttributes();
-        return attrs.containsKey(attrName);
-    }
-
-    /**
-     * Returns a read-only map of this file's attributes.
-     * @return a Map of the file's attributes.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public Map<String, Object> getAttributes() throws FileSystemException
-    {
-        if (!fileObject.getType().hasAttributes())
-        {
-            throw new FileSystemException("vfs.provider/get-attributes-no-exist.error", fileObject);
-        }
-        if (resetAttributes || roAttrs == null)
-        {
-            try
-            {
-                synchronized (this)
-                {
-                    attrs = fileObject.doGetAttributes();
-                    roAttrs = Collections.unmodifiableMap(attrs);
-                    resetAttributes = false;
-                }
-            }
-            catch (final Exception e)
-            {
-                throw new FileSystemException("vfs.provider/get-attributes.error", fileObject, e);
-            }
-        }
-        return roAttrs;
-    }
-
-    /**
-     * Used internally to flag situations where the file attributes should be
-     * reretrieved.
-     * @since 2.0
-     */
-    public void resetAttributes()
-    {
-        resetAttributes = true;
-    }
-
-    /**
-     * Lists the attributes of this file.
-     * @return An array of attribute names.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public String[] getAttributeNames() throws FileSystemException
-    {
-        getAttributes();
-        final Set<String> names = attrs.keySet();
-        return names.toArray(new String[names.size()]);
-    }
-
-    /**
-     * Gets the value of an attribute.
-     * @param attrName The attribute name.
-     * @return The value of the attribute or null.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public Object getAttribute(final String attrName)
-        throws FileSystemException
-    {
-        getAttributes();
-        return attrs.get(attrName);
-    }
-
-    /**
-     * Sets the value of an attribute.
-     * @param attrName The name of the attribute to add.
-     * @param value The value of the attribute.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void setAttribute(final String attrName, final Object value)
-        throws FileSystemException
-    {
-        if (!fileObject.getType().hasAttributes())
-        {
-            throw new FileSystemException("vfs.provider/set-attribute-no-exist.error", attrName, fileObject);
-        }
-        try
-        {
-            fileObject.doSetAttribute(attrName, value);
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider/set-attribute.error", e, attrName, fileObject);
-        }
-
-        if (attrs != null)
-        {
-            attrs.put(attrName, value);
-        }
-    }
-
-    /**
-     * Removes an attribute.
-     * @param attrName The name of the attribute to remove.
-     * @throws FileSystemException if an error occurs.
-     * @since 2.0
-     */
-    @Override
-    public void removeAttribute(final String attrName) throws FileSystemException
-    {
-        if (!fileObject.getType().hasAttributes())
-        {
-            throw new FileSystemException("vfs.provider/remove-attribute-no-exist.error", fileObject);
-        }
-
-        try
-        {
-            fileObject.doRemoveAttribute(attrName);
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider/remove-attribute.error", e, attrName, fileObject);
-        }
-
-        if (attrs != null)
-        {
-            attrs.remove(attrName);
-        }
-    }
-
-    /**
-     * Returns the certificates used to sign this file.
-     * @return An array of Certificates.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public Certificate[] getCertificates() throws FileSystemException
-    {
-        if (!fileObject.exists())
-        {
-            throw new FileSystemException("vfs.provider/get-certificates-no-exist.error", fileObject);
-        }
-        /*
-        if (getThreadData().getState() == STATE_WRITING || getThreadData().getState() == STATE_RANDOM_ACCESS)
-        {
-            throw new FileSystemException("vfs.provider/get-certificates-writing.error", file);
-        }
-        */
-
-        try
-        {
-            final Certificate[] certs = fileObject.doGetCertificates();
-            if (certs != null)
-            {
-                return certs;
-            }
-            else
-            {
-                return new Certificate[0];
-            }
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider/get-certificates.error", fileObject, e);
-        }
-    }
-
-    /**
-     * Returns an input stream for reading the content.
-     * @return The InputStream
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public InputStream getInputStream() throws FileSystemException
-    {
-        /*
-        if (getThreadData().getState() == STATE_WRITING || getThreadData().getState() == STATE_RANDOM_ACCESS)
-        {
-            throw new FileSystemException("vfs.provider/read-in-use.error", file);
-        }
-        */
-
-        // Get the raw input stream
-        final InputStream instr = fileObject.getInputStream();
-
-        final InputStream wrappedInstr = new FileContentInputStream(fileObject, instr);
-
-        getOrCreateThreadData().addInstr(wrappedInstr);
-        streamOpened();
-
-        return wrappedInstr;
-    }
-
-    /**
-     * Returns an input/output stream to use to read and write the content of the file in an
-     * random manner.
-     * @param mode The RandomAccessMode.
-     * @return A RandomAccessContent object to access the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public RandomAccessContent getRandomAccessContent(final RandomAccessMode mode) throws FileSystemException
-    {
-        /*
-        if (getThreadData().getState() != STATE_NONE)
-        {
-            throw new FileSystemException("vfs.provider/read-in-use.error", file);
-        }
-        */
-
-        // Get the content
-        final RandomAccessContent rastr = fileObject.getRandomAccessContent(mode);
-
-        final FileRandomAccessContent rac = new FileRandomAccessContent(fileObject, rastr);
-
-        getOrCreateThreadData().addRastr(rac);
-        streamOpened();
-
-        return rac;
-    }
-
-    /**
-     * Returns an output stream for writing the content.
-     * @return The OutputStream for the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public OutputStream getOutputStream() throws FileSystemException
-    {
-        return getOutputStream(false);
-    }
-
-    /**
-     * Returns an output stream for writing the content in append mode.
-     * @param bAppend true if the data written should be appended.
-     * @return The OutputStream for the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public OutputStream getOutputStream(final boolean bAppend) throws FileSystemException
-    {
-        /*
-        if (getThreadData().getState() != STATE_NONE)
-        */
-        FileContentThreadData streams = getOrCreateThreadData();
-        if (streams.getOutstr() != null)
-        {
-            throw new FileSystemException("vfs.provider/write-in-use.error", fileObject);
-        }
-
-        // Get the raw output stream
-        final OutputStream outstr = fileObject.getOutputStream(bAppend);
-
-        // Create and set wrapper
-        FileContentOutputStream wrapped = new FileContentOutputStream(fileObject, outstr);
-        streams.setOutstr(wrapped);
-        streamOpened();
-
-        return wrapped;
-    }
-
-    /**
-     * Closes all resources used by the content, including all streams, readers
-     * and writers.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void close() throws FileSystemException
-    {
-        FileSystemException caught = null;
-        try
-        {
-            final FileContentThreadData streams = getOrCreateThreadData();
-
-            // Close the input stream
-            while (streams.getInstrsSize() > 0)
-            {
-                final FileContentInputStream instr = (FileContentInputStream) streams.removeInstr(0);
-                try
-                {
-                    instr.close();
-                }
-                catch (final FileSystemException ex)
-                {
-                    caught = ex;
-
-                }
-            }
-
-            // Close the randomAccess stream
-            while (streams.getRastrsSize() > 0)
-            {
-                final FileRandomAccessContent ra = (FileRandomAccessContent) streams.removeRastr(0);
-                try
-                {
-                    ra.close();
-                }
-                catch (final FileSystemException ex)
-                {
-                    caught = ex;
-                }
-            }
-
-            // Close the output stream
-            final FileContentOutputStream outstr = streams.getOutstr();
-            if (outstr != null)
-            {
-                streams.setOutstr(null);
-                try
-                {
-                    outstr.close();
-                }
-                catch (final FileSystemException ex)
-                {
-                    caught = ex;
-                }
-            }
-        }
-        finally
-        {
-            threadData.remove();
-        }
-
-        // throw last error (out >> rac >> input) after all closes have been tried
-        if (caught != null)
-        {
-            throw caught;
-        }
-    }
-
-    /**
-     * Handles the end of input stream.
-     */
-    private void endInput(final FileContentInputStream instr)
-    {
-        FileContentThreadData streams = threadData.get();
-        if (streams != null)
-        {
-            streams.removeInstr(instr);
-        }
-        if (streams == null || !streams.hasStreams())
-        {
-            // remove even when no value is set to remove key
-            threadData.remove();
-        }
-        streamClosed();
-    }
-
-    /**
-     * Handles the end of random access.
-     */
-    private void endRandomAccess(final RandomAccessContent rac)
-    {
-        FileContentThreadData streams = threadData.get();
-        if (streams != null)
-        {
-            streams.removeRastr(rac);
-        }
-        if (streams == null || !streams.hasStreams())
-        {
-            // remove even when no value is set to remove key
-            threadData.remove();
-        }
-        streamClosed();
-    }
-
-    /**
-     * Handles the end of output stream.
-     */
-    private void endOutput() throws Exception
-    {
-        FileContentThreadData streams = threadData.get();
-        if (streams != null)
-        {
-            streams.setOutstr(null);
-        }
-        if (streams == null || !streams.hasStreams())
-        {
-            // remove even when no value is set to remove key
-            threadData.remove();
-        }
-        streamClosed();
-        fileObject.endOutput();
-    }
-
-    /**
-     * Check if a input and/or output stream is open.
-     * <p>
-     * This checks only the scope of the current thread.
-     *
-     * @return true if this is the case
-     */
-    @Override
-    public boolean isOpen()
-    {
-        FileContentThreadData streams = threadData.get();
-        if (streams != null && streams.hasStreams())
-        {
-            return true;
-        }
-        else
-        {
-            // threadData.get() created empty entry
-            threadData.remove();
-            return false;
-        }
-    }
-
-    /**
-     * Check if a input and/or output stream is open.
-     * This checks all threads.
-     *
-     * @return true if this is the case
-     */
-    public boolean isOpenGlobal()
-    {
-        synchronized (this)
-        {
-            return openStreams > 0;
-        }
-    }
-
-    /**
-     * An input stream for reading content.  Provides buffering, and
-     * end-of-stream monitoring.
-     */
-    private final class FileContentInputStream extends MonitorInputStream
-    {
-        // avoid gc
-        private final FileObject file;
-
-        FileContentInputStream(final FileObject file, final InputStream instr)
-        {
-            super(instr);
-            this.file = file;
-        }
-
-        /**
-         * Closes this input stream.
-         */
-        @Override
-        public void close() throws FileSystemException
-        {
-            try
-            {
-                super.close();
-            }
-            catch (final IOException e)
-            {
-                throw new FileSystemException("vfs.provider/close-instr.error", file, e);
-            }
-        }
-
-        /**
-         * Called after the stream has been closed.
-         */
-        @Override
-        protected void onClose() throws IOException
-        {
-            try
-            {
-                super.onClose();
-            }
-            finally
-            {
-                endInput(this);
-            }
-        }
-    }
-
-    /**
-     * An input/output stream for reading/writing content on random positions
-     */
-    private final class FileRandomAccessContent extends MonitorRandomAccessContent
-    {
-        // also avoids gc
-        private final FileObject file;
-
-        FileRandomAccessContent(final FileObject file, final RandomAccessContent content)
-        {
-            super(content);
-            this.file = file;
-        }
-
-        /**
-         * Called after the stream has been closed.
-         */
-        @Override
-        protected void onClose() throws IOException
-        {
-            try
-            {
-                super.onClose();
-            }
-            finally
-            {
-                endRandomAccess(this);
-            }
-        }
-
-        @Override
-        public void close() throws FileSystemException
-        {
-            try
-            {
-                super.close();
-            }
-            catch (final IOException e)
-            {
-                throw new FileSystemException("vfs.provider/close-rac.error", file, e);
-            }
-        }
-    }
-
-    /**
-     * An output stream for writing content.
-     */
-    final class FileContentOutputStream extends MonitorOutputStream
-    {
-        // avoid gc
-        private final FileObject file;
-
-        FileContentOutputStream(final FileObject file, final OutputStream outstr)
-        {
-            super(outstr);
-            this.file = file;
-        }
-
-        /**
-         * Closes this output stream.
-         */
-        @Override
-        public void close() throws FileSystemException
-        {
-            try
-            {
-                super.close();
-            }
-            catch (final IOException e)
-            {
-                throw new FileSystemException("vfs.provider/close-outstr.error", file, e);
-            }
-        }
-
-        /**
-         * Called after this stream is closed.
-         */
-        @Override
-        protected void onClose() throws IOException
-        {
-            try
-            {
-                super.onClose();
-            }
-            finally
-            {
-                try
-                {
-                    endOutput();
-                }
-                catch (final Exception e)
-                {
-                    throw new FileSystemException("vfs.provider/close-outstr.error", file, e);
-                }
-            }
-        }
-    }
-
-    /**
-     * get the content info. e.g. content-type, content-encoding
-     * @return The FileContentInfo.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileContentInfo getContentInfo() throws FileSystemException
-    {
-        if (fileContentInfo == null)
-        {
-            fileContentInfo = fileContentInfoFactory.create(this);
-        }
-
-        return fileContentInfo;
-    }
-
-    /**
-     * Writes this content to another FileContent.
-     *
-     * @param fileContent
-     *            The target FileContent.
-     * @return the total number of bytes written
-     * @throws IOException
-     *             if an error occurs writing the content.
-     * @since 2.1
-     */
-    @Override
-    public long write(final FileContent fileContent) throws IOException
-    {
-        final OutputStream output = fileContent.getOutputStream();
-        try
-        {
-            return this.write(output);
-        }
-        finally
-        {
-            output.close();
-        }
-    }
-
-    /**
-     * Writes this content to another FileObject.
-     *
-     * @param file
-     *            The target FileObject.
-     * @return the total number of bytes written
-     * @throws IOException
-     *             if an error occurs writing the content.
-     * @since 2.1
-     */
-    @Override
-    public long write(final FileObject file) throws IOException
-    {
-        return write(file.getContent());
-    }
-
-    /**
-     * Writes this content to an OutputStream.
-     *
-     * @param output
-     *            The target OutputStream.
-     * @return the total number of bytes written
-     * @throws IOException
-     *             if an error occurs writing the content.
-     * @since 2.1
-     */
-    @Override
-    public long write(final OutputStream output) throws IOException
-    {
-        return write(output, WRITE_BUFFER_SIZE);
-    }
-
-    /**
-     * Writes this content to an OutputStream.
-     *
-     * @param output
-     *            The target OutputStream.
-     * @param bufferSize
-     *            The buffer size to write data chunks.
-     * @return the total number of bytes written
-     * @throws IOException
-     *             if an error occurs writing the file.
-     * @since 2.1
-     */
-    @Override
-    public long write(final OutputStream output, final int bufferSize) throws IOException
-    {
-        final InputStream input = this.getInputStream();
-        long count = 0;
-        try
-        {
-            // This read/write code from Apache Commons IO
-            final byte[] buffer = new byte[bufferSize];
-            int n = 0;
-            while (-1 != (n = input.read(buffer)))
-            {
-                output.write(buffer, 0, n);
-                count += n;
-            }
-        }
-        finally
-        {
-            input.close();
-        }
-        return count;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultFileSelectorInfo.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultFileSelectorInfo.java
deleted file mode 100644
index c38fb3f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultFileSelectorInfo.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelectInfo;
-
-/**
- * A default {@link FileSelectInfo} implementation.
- */
-final class DefaultFileSelectorInfo
-    implements FileSelectInfo
-{
-    private FileObject baseFolder;
-    private FileObject file;
-    private int depth;
-
-    @Override
-    public FileObject getBaseFolder()
-    {
-        return baseFolder;
-    }
-
-    public void setBaseFolder(final FileObject baseFolder)
-    {
-        this.baseFolder = baseFolder;
-    }
-
-    @Override
-    public FileObject getFile()
-    {
-        return file;
-    }
-
-    public void setFile(final FileObject file)
-    {
-        this.file = file;
-    }
-
-    @Override
-    public int getDepth()
-    {
-        return depth;
-    }
-
-    public void setDepth(final int depth)
-    {
-        this.depth = depth;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultURLConnection.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultURLConnection.java
deleted file mode 100644
index a7ce5dd..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultURLConnection.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.commons.vfs2.provider;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.net.URLConnection;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * A default URL connection that will work for most file systems.
- */
-public final class DefaultURLConnection
-    extends URLConnection
-{
-    private final FileContent content;
-
-    public DefaultURLConnection(final URL url,
-                                final FileContent content)
-    {
-        super(url);
-        this.content = content;
-    }
-
-    @Override
-    public void connect()
-    {
-        connected = true;
-    }
-
-    @Override
-    public InputStream getInputStream()
-        throws IOException
-    {
-        return content.getInputStream();
-    }
-
-    @Override
-    public OutputStream getOutputStream()
-        throws IOException
-    {
-        return content.getOutputStream();
-    }
-
-
-    @Override
-    public long getLastModified()
-    {
-        try
-        {
-            return content.getLastModifiedTime();
-        }
-        catch (final FileSystemException ignored)
-        {
-            return -1; // TODO: report?
-        }
-    }
-
-    @Override
-    public int getContentLength()
-    {
-        try
-        {
-            return (int) content.getSize();
-        }
-        catch (final FileSystemException fse)
-        {
-            return -1; // TODO: report?
-        }
-    }
-
-    @Override
-    public String getContentType()
-    {
-        try
-        {
-            return content.getContentInfo().getContentType();
-        }
-        catch (final FileSystemException e)
-        {
-            throw new RuntimeException(e.getMessage());
-        }
-    }
-
-    @Override
-    public String getContentEncoding()
-    {
-        try
-        {
-            return content.getContentInfo().getContentEncoding();
-        }
-        catch (final FileSystemException e)
-        {
-            throw new RuntimeException(e.getMessage());
-        }
-    }
-
-    /*
-    public String getHeaderField(String name)
-    {
-        try
-        {
-            if (content.getFile().getFileSystem().hasCapability(Capability.ATTRIBUTES))
-            {
-                String value = (String) content.getAttribute(name);
-                if (value != null)
-                {
-                    return value;
-                }
-            }
-
-            return null;
-        }
-        catch (FileSystemException e)
-        {
-            throw new RuntimeException(e);
-        }
-    }
-    */
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultURLStreamHandler.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultURLStreamHandler.java
deleted file mode 100644
index 4c925c9..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DefaultURLStreamHandler.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.commons.vfs2.provider;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * A default URL stream handler that will work for most file systems.
- */
-public class DefaultURLStreamHandler
-    extends URLStreamHandler
-{
-    private final VfsComponentContext context;
-    private final FileSystemOptions fileSystemOptions;
-
-    public DefaultURLStreamHandler(final VfsComponentContext context)
-    {
-        this(context, null);
-    }
-
-    public DefaultURLStreamHandler(final VfsComponentContext context, final FileSystemOptions fileSystemOptions)
-    {
-        this.context = context;
-        this.fileSystemOptions = fileSystemOptions;
-    }
-
-    @Override
-    protected URLConnection openConnection(final URL url)
-        throws IOException
-    {
-        final FileObject entry = context.resolveFile(url.toExternalForm(), fileSystemOptions);
-        return new DefaultURLConnection(url, entry.getContent());
-    }
-
-    @Override
-    protected void parseURL(final URL u,
-                            final String spec,
-                            final int start,
-                            final int limit)
-    {
-        try
-        {
-            final FileObject old = context.resolveFile(u.toExternalForm(), fileSystemOptions);
-
-            FileObject newURL;
-            if (start > 0 && spec.charAt(start - 1) == ':')
-            {
-                newURL = context.resolveFile(old, spec, fileSystemOptions);
-            }
-            else
-            {
-                if (old.isFile() && old.getParent() != null)
-                {
-                    // for files we have to resolve relative
-                    newURL = old.getParent().resolveFile(spec);
-                }
-                else
-                {
-                    newURL = old.resolveFile(spec);
-                }
-            }
-
-            final String url = newURL.getName().getURI();
-            final StringBuilder filePart = new StringBuilder();
-            final String protocolPart = UriParser.extractScheme(url, filePart);
-
-            setURL(u, protocolPart, "", -1, null, null, filePart.toString(), null, null);
-        }
-        catch (final FileSystemException fse)
-        {
-            // This is rethrown to MalformedURLException in URL anyway
-            throw new RuntimeException(fse.getMessage());
-        }
-    }
-
-    @Override
-    protected String toExternalForm(final URL u)
-    {
-        return u.getProtocol() + ":" + u.getFile();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DelegateFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DelegateFileObject.java
deleted file mode 100644
index bb397e4..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/DelegateFileObject.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.commons.vfs2.provider;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.security.cert.Certificate;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.vfs2.FileChangeEvent;
-import org.apache.commons.vfs2.FileContentInfo;
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileNotFolderException;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-import org.apache.commons.vfs2.util.WeakRefFileListener;
-
-/**
- * A file backed by another file.
- * <p>
- * TODO - Extract subclass that overlays the children.
- *
- * @param <AFS>  A subclass of AbstractFileSystem.
- */
-public class DelegateFileObject<AFS extends AbstractFileSystem> extends AbstractFileObject<AFS> implements FileListener
-{
-    private FileObject file;
-    private final Set<String> children = new HashSet<String>();
-    private boolean ignoreEvent;
-
-    public DelegateFileObject(final AbstractFileName name,
-                              final AFS fileSystem,
-                              final FileObject file) throws FileSystemException
-    {
-        super(name, fileSystem);
-        this.file = file;
-        if (file != null)
-        {
-            WeakRefFileListener.installListener(file, this);
-        }
-    }
-
-    /**
-     * Get access to the delegated file.
-     * @return The FileObject.
-     * @since 2.0
-     */
-    public FileObject getDelegateFile()
-    {
-        return file;
-    }
-
-    /**
-     * Adds a child to this file.
-     * @param baseName The base FileName.
-     * @param type The FileType.
-     * @throws Exception if an error occurs.
-     */
-    public void attachChild(final FileName baseName, final FileType type) throws Exception
-    {
-        final FileType oldType = doGetType();
-        if (children.add(baseName.getBaseName()))
-        {
-            childrenChanged(baseName, type);
-        }
-        maybeTypeChanged(oldType);
-    }
-
-    /**
-     * Attaches or detaches the target file.
-     * @param file The FileObject.
-     * @throws Exception if an error occurs.
-     */
-    public void setFile(final FileObject file) throws Exception
-    {
-        final FileType oldType = doGetType();
-
-        if (file != null)
-        {
-            WeakRefFileListener.installListener(file, this);
-        }
-        this.file = file;
-        maybeTypeChanged(oldType);
-    }
-
-    /**
-     * Checks whether the file's type has changed, and fires the appropriate
-     * events.
-     * @param oldType The old FileType.
-     * @throws Exception if an error occurs.
-     */
-    private void maybeTypeChanged(final FileType oldType) throws Exception
-    {
-        final FileType newType = doGetType();
-        if (oldType == FileType.IMAGINARY && newType != FileType.IMAGINARY)
-        {
-            handleCreate(newType);
-        }
-        else if (oldType != FileType.IMAGINARY && newType == FileType.IMAGINARY)
-        {
-            handleDelete();
-        }
-    }
-
-    /**
-     * Determines the type of the file, returns null if the file does not
-     * exist.
-     */
-    @Override
-    protected FileType doGetType() throws FileSystemException
-    {
-        if (file != null)
-        {
-            return file.getType();
-        }
-        else if (children.size() > 0)
-        {
-            return FileType.FOLDER;
-        }
-        else
-        {
-            return FileType.IMAGINARY;
-        }
-    }
-
-    /**
-     * Determines if this file can be read.
-     */
-    @Override
-    protected boolean doIsReadable() throws FileSystemException
-    {
-        if (file != null)
-        {
-            return file.isReadable();
-        }
-        else
-        {
-            return true;
-        }
-    }
-
-    /**
-     * Determines if this file can be written to.
-     */
-    @Override
-    protected boolean doIsWriteable() throws FileSystemException
-    {
-        if (file != null)
-        {
-            return file.isWriteable();
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Determines if this file is executable.
-     */
-    @Override
-    protected boolean doIsExecutable() throws FileSystemException
-    {
-        if (file != null)
-        {
-            return file.isExecutable();
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Determines if this file is hidden.
-     */
-    @Override
-    protected boolean doIsHidden() throws FileSystemException
-    {
-        if (file != null)
-        {
-            return file.isHidden();
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Lists the children of the file.
-     */
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        if (file != null)
-        {
-            final FileObject[] children;
-
-            try
-            {
-                children = file.getChildren();
-            }
-            // VFS-210
-            catch (final FileNotFolderException e)
-            {
-                throw new FileNotFolderException(getName(), e);
-            }
-
-            final String[] childNames = new String[children.length];
-            for (int i = 0; i < children.length; i++)
-            {
-                childNames[i] = children[i].getName().getBaseName();
-            }
-            return childNames;
-        }
-        else
-        {
-            return children.toArray(new String[children.size()]);
-        }
-    }
-
-    /**
-     * Creates this file as a folder.
-     */
-    @Override
-    protected void doCreateFolder() throws Exception
-    {
-        ignoreEvent = true;
-        try
-        {
-            file.createFolder();
-        }
-        finally
-        {
-            ignoreEvent = false;
-        }
-    }
-
-    /**
-     * Deletes the file.
-     */
-    @Override
-    protected void doDelete() throws Exception
-    {
-        ignoreEvent = true;
-        try
-        {
-            file.delete();
-        }
-        finally
-        {
-            ignoreEvent = false;
-        }
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).  Is only called if
-     * {@link #doGetType} returns {@link FileType#FILE}.
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        return file.getContent().getSize();
-    }
-
-    /**
-     * Returns the attributes of this file.
-     */
-    @Override
-    protected Map<String, Object> doGetAttributes()
-        throws Exception
-    {
-        return file.getContent().getAttributes();
-    }
-
-    /**
-     * Sets an attribute of this file.
-     */
-    @Override
-    protected void doSetAttribute(final String atttrName,
-                                  final Object value)
-        throws Exception
-    {
-        file.getContent().setAttribute(atttrName, value);
-    }
-
-    /**
-     * Returns the certificates of this file.
-     */
-    @Override
-    protected Certificate[] doGetCertificates() throws Exception
-    {
-        return file.getContent().getCertificates();
-    }
-
-    /**
-     * Returns the last-modified time of this file.
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        return file.getContent().getLastModifiedTime();
-    }
-
-    /**
-     * Sets the last-modified time of this file.
-     * @since 2.0
-     */
-    @Override
-    protected boolean doSetLastModifiedTime(final long modtime)
-        throws Exception
-    {
-        file.getContent().setLastModifiedTime(modtime);
-        return true;
-    }
-
-    /**
-     * Creates an input stream to read the file content from.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        return file.getContent().getInputStream();
-    }
-
-    /**
-     * Creates an output stream to write the file content to.
-     */
-    @Override
-    protected OutputStream doGetOutputStream(final boolean bAppend) throws Exception
-    {
-        return file.getContent().getOutputStream(bAppend);
-    }
-
-    /**
-     * Called when a file is created.
-     * @param event The FileChangeEvent.
-     * @throws Exception if an error occurs.
-     */
-    @Override
-    public void fileCreated(final FileChangeEvent event) throws Exception
-    {
-        if (event.getFile() != file)
-        {
-            return;
-        }
-        if (!ignoreEvent)
-        {
-            handleCreate(file.getType());
-        }
-    }
-
-    /**
-     * Called when a file is deleted.
-     * @param event The FileChangeEvent.
-     * @throws Exception if an error occurs.
-     */
-    @Override
-    public void fileDeleted(final FileChangeEvent event) throws Exception
-    {
-        if (event.getFile() != file)
-        {
-            return;
-        }
-        if (!ignoreEvent)
-        {
-            handleDelete();
-        }
-    }
-
-    /**
-     * Called when a file is changed.
-     * <p>
-     * This will only happen if you monitor the file using {@link org.apache.commons.vfs2.FileMonitor}.
-     *
-     * @param event The FileChangeEvent.
-     * @throws Exception if an error occurs.
-     */
-    @Override
-    public void fileChanged(final FileChangeEvent event) throws Exception
-    {
-        if (event.getFile() != file)
-        {
-            return;
-        }
-        if (!ignoreEvent)
-        {
-            handleChanged();
-        }
-    }
-
-    /**
-     * Close the delegated file.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void close() throws FileSystemException
-    {
-        super.close();
-
-        if (file != null)
-        {
-            file.close();
-        }
-    }
-
-    /**
-     * Refresh file information.
-     * @throws FileSystemException if an error occurs.
-     * @since 2.0
-     */
-    @Override
-    public void refresh() throws FileSystemException
-    {
-        super.refresh();
-        if (file != null)
-        {
-            file.refresh();
-        }
-    }
-
-    /**
-     * Return file content info.
-     * @return the file content info of the delegee.
-     * @throws Exception Any thrown Exception is wrapped in FileSystemException.
-     * @since 2.0
-     */
-    protected FileContentInfo doGetContentInfo() throws Exception
-    {
-        return file.getContent().getContentInfo();
-    }
-
-    /**
-     * Renames the file.
-     *
-     * @param newFile the new location/name.
-     * @throws Exception Any thrown Exception is wrapped in FileSystemException.
-     * @since 2.0
-     */
-    @Override
-    protected void doRename(final FileObject newFile)
-        throws Exception
-    {
-        file.moveTo(((DelegateFileObject) newFile).file);
-    }
-
-    /**
-     * Removes an attribute of this file.
-     * @since 2.0
-     */
-    @Override
-    protected void doRemoveAttribute(final String atttrName)
-        throws Exception
-    {
-        file.getContent().removeAttribute(atttrName);
-    }
-
-    /**
-     * Creates access to the file for random i/o.
-     * @since 2.0
-     */
-    @Override
-    protected RandomAccessContent doGetRandomAccessContent(final RandomAccessMode mode) throws Exception
-    {
-        return file.getContent().getRandomAccessContent(mode);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileContentThreadData.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileContentThreadData.java
deleted file mode 100644
index 4bad311..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileContentThreadData.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.commons.vfs2.provider;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.RandomAccessContent;
-
-/**
- * Holds the data which needs to be local to the current thread
- */
-class FileContentThreadData
-{
-    // private int state = DefaultFileContent.STATE_CLOSED;
-
-    private final ArrayList<InputStream> instrs = new ArrayList<InputStream>();
-    private final ArrayList<RandomAccessContent> rastrs = new ArrayList<RandomAccessContent>();
-    private DefaultFileContent.FileContentOutputStream outstr;
-
-    FileContentThreadData()
-    {
-    }
-
-    /*
-    int getState()
-    {
-        return state;
-    }
-
-    void setState(int state)
-    {
-        this.state = state;
-    }
-    */
-
-    void addInstr(final InputStream is)
-    {
-        this.instrs.add(is);
-    }
-
-    void setOutstr(final DefaultFileContent.FileContentOutputStream os)
-    {
-        this.outstr = os;
-    }
-
-    DefaultFileContent.FileContentOutputStream getOutstr()
-    {
-        return this.outstr;
-    }
-
-    void addRastr(final RandomAccessContent ras)
-    {
-        this.rastrs.add(ras);
-    }
-
-    int getInstrsSize()
-    {
-        return this.instrs.size();
-    }
-
-    public Object removeInstr(final int pos)
-    {
-        return this.instrs.remove(pos);
-    }
-
-    public void removeInstr(final InputStream instr)
-    {
-        this.instrs.remove(instr);
-    }
-
-    public Object removeRastr(final int pos)
-    {
-        return this.rastrs.remove(pos);
-    }
-
-    public void removeRastr(final RandomAccessContent ras)
-    {
-        this.rastrs.remove(ras);
-    }
-
-    public boolean hasStreams()
-    {
-        return instrs.size() > 0 || outstr != null || rastrs.size() > 0;
-    }
-
-    public void closeOutstr() throws FileSystemException
-    {
-        outstr.close();
-        outstr = null;
-    }
-
-    int getRastrsSize()
-    {
-        return rastrs.size();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileNameParser.java
deleted file mode 100644
index 5370507..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileNameParser.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * Provides methods to parse a filename into a {@link org.apache.commons.vfs2.FileName}.
- */
-public interface FileNameParser
-{
-    /**
-     * Check if a character needs encoding (%nn).
-     * @param ch the character
-     * @return true if character should be encoded
-     */
-    boolean encodeCharacter(char ch);
-
-    /**
-     * parses a String into a filename.
-     * @param context The component context.
-     * @param base The base FileName.
-     * @param uri The target file name.
-     * @return A FileName that represents the taret file.
-     * @throws FileSystemException if an error occurs parsing the URI.
-     */
-    FileName parseUri(final VfsComponentContext context, final FileName base, final String uri)
-            throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileProvider.java
deleted file mode 100644
index 7f0ee30..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileProvider.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.commons.vfs2.provider;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-
-/**
- * A file provider.  Each file provider is responsible for handling files for
- * a particular URI scheme.
- * <p>
- * A file provider may also implement {@link VfsComponent}.
- */
-public interface FileProvider
-{
-    /**
-     * Locates a file object, by absolute URI.
-     *
-     * @param baseFile          The base file to use for resolving the individual parts of
-     *                          a compound URI.
-     * @param uri               The absolute URI of the file to find.
-     * @param fileSystemOptions The FileSystemOptions
-     * @return The FileObject.
-     * @throws FileSystemException if an error occurs locating the file.
-     */
-    FileObject findFile(final FileObject baseFile, final String uri, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException;
-
-    /**
-     * Creates a layered file system.
-     *
-     * @param scheme            The URI scheme for the layered file system.
-     * @param file              The file to build the file system on.
-     * @param fileSystemOptions The FileSystemOptions.
-     * @return A FileObject in the file system.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject createFileSystem(String scheme, FileObject file, FileSystemOptions fileSystemOptions)
-        throws FileSystemException;
-
-    /**
-     * Gets the configbuilder useable to collect the needed fileSystemOptions.
-     * @return a FileSystemConfigBuilder for the particular file system.
-     */
-    FileSystemConfigBuilder getConfigBuilder();
-
-    /**
-     * Get the filesystem capabilities.<br>
-     * These are the same as on the filesystem, but available before the first filesystem was
-     * instanciated.
-     * @return a Collection of the file systems Capabilities.
-     */
-    Collection<Capability> getCapabilities();
-
-    /**
-     * Parse the URI into a FileName.
-     * @param root The base FileName.
-     * @param uri The file to be accessed.
-     * @return A FileName representing the target file.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileName parseUri(FileName root, String uri) throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileReplicator.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileReplicator.java
deleted file mode 100644
index 7a14ee6..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileReplicator.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.commons.vfs2.provider;
-
-import java.io.File;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * Responsible for making local replicas of files.
- * <p>
- * A file replicator may also implement {@link VfsComponent}.
- */
-public interface FileReplicator
-{
-    /**
-     * Creates a local copy of the file, and all its descendants.
-     *
-     * @param srcFile  The file to copy.
-     * @param selector Selects the files to copy.
-     * @return The local copy of the source file.
-     * @throws FileSystemException If the source files does not exist, or on error copying.
-     */
-    File replicateFile(FileObject srcFile, FileSelector selector)
-        throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileSystemKey.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileSystemKey.java
deleted file mode 100644
index cc468e1..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/FileSystemKey.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * Used to identify a filesystem
- */
-class FileSystemKey implements Comparable<FileSystemKey>
-{
-    private static final FileSystemOptions EMPTY_OPTIONS = new FileSystemOptions();
-
-    private final Comparable<?> key;
-    private final FileSystemOptions fileSystemOptions;
-
-    /**
-     * Create the FS key.
-     *
-     * @param key must implement Comparable, and must be self-comparable
-     * @param fileSystemOptions the required options
-     */
-    FileSystemKey(final Comparable<?> key, final FileSystemOptions fileSystemOptions)
-    {
-        this.key = key;
-        if (fileSystemOptions != null)
-        {
-            this.fileSystemOptions = fileSystemOptions;
-        }
-        else
-        {
-            this.fileSystemOptions = EMPTY_OPTIONS;
-        }
-    }
-
-    @Override
-    public int compareTo(final FileSystemKey o)
-    {
-        @SuppressWarnings("unchecked") // Keys must implement comparable, and be comparable to themselves
-        final
-        Comparable<Comparable<?>> comparable = (Comparable<Comparable<?>>) key;
-        final int ret = comparable.compareTo(o.key);
-        if (ret != 0)
-        {
-            // other filesystem
-            return ret;
-        }
-
-        return fileSystemOptions.compareTo(o.fileSystemOptions);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/GenericFileName.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/GenericFileName.java
deleted file mode 100644
index 112be29..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/GenericFileName.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileType;
-
-/**
- * A file name that represents a 'generic' URI, as per RFC 2396.  Consists of
- * a scheme, userinfo (typically username and password), hostname, port, and
- * path.
- */
-public class GenericFileName extends AbstractFileName
-{
-    private static final char[] USERNAME_RESERVED = {':', '@', '/'};
-    private static final char[] PASSWORD_RESERVED = {'@', '/', '?'};
-    private final String userName;
-    private final String hostName;
-    private final int defaultPort;
-    private final String password;
-    private final int port;
-
-    protected GenericFileName(final String scheme,
-                              final String hostName,
-                              final int port,
-                              final int defaultPort,
-                              final String userName,
-                              final String password,
-                              final String path,
-                              final FileType type
-    )
-    {
-        super(scheme, path, type);
-        this.hostName = hostName;
-        this.defaultPort = defaultPort;
-        this.password = password;
-        this.userName = userName;
-        if (port > 0)
-        {
-            this.port = port;
-        }
-        else
-        {
-            this.port = getDefaultPort();
-        }
-    }
-
-    /**
-     * Returns the user name part of this name.
-     * @return The user name.
-     */
-    public String getUserName()
-    {
-        return userName;
-    }
-
-    /**
-     * Returns the password part of this name.
-     * @return The password.
-     */
-    public String getPassword()
-    {
-        return password;
-    }
-
-    /**
-     * Returns the host name part of this name.
-     * @return The host name.
-     */
-    public String getHostName()
-    {
-        return hostName;
-    }
-
-    /**
-     * Returns the port part of this name.
-     * @return The port number.
-     */
-    public int getPort()
-    {
-        return port;
-    }
-
-    /**
-     * Returns the default port for this file name.
-     * @return The default port number.
-     */
-    public int getDefaultPort()
-    {
-        return defaultPort;
-    }
-
-    /**
-     * Create a FileName.
-     * @param absPath The absolute path.
-     * @param type The FileType.
-     * @return The created FileName.
-     */
-    @Override
-    public FileName createName(final String absPath, final FileType type)
-    {
-        return new GenericFileName(
-            getScheme(),
-            hostName,
-            port,
-            defaultPort,
-            userName,
-            password,
-            absPath,
-            type);
-    }
-
-    /**
-     * Builds the root URI for this file name.
-     */
-    @Override
-    protected void appendRootUri(final StringBuilder buffer, final boolean addPassword)
-    {
-        buffer.append(getScheme());
-        buffer.append("://");
-        appendCredentials(buffer, addPassword);
-        buffer.append(hostName);
-        if (port != getDefaultPort())
-        {
-            buffer.append(':');
-            buffer.append(port);
-        }
-    }
-
-    /**
-     * Append the user credentials.
-     * <p>
-     * If anything was added, it will be '@' terminated.
-     *
-     * @param buffer the string buffer to modify.
-     * @param addPassword flag if password should be added or replaced with placeholder (false).
-     */
-    protected void appendCredentials(final StringBuilder buffer, final boolean addPassword)
-    {
-        if (userName != null && userName.length() != 0)
-        {
-            UriParser.appendEncoded(buffer, userName, USERNAME_RESERVED);
-            if (password != null && password.length() != 0)
-            {
-                buffer.append(':');
-                if (addPassword)
-                {
-                    UriParser.appendEncoded(buffer, password, PASSWORD_RESERVED);
-                }
-                else
-                {
-                    buffer.append("***");
-                }
-            }
-            buffer.append('@');
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/HostFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/HostFileNameParser.java
deleted file mode 100644
index 07938c1..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/HostFileNameParser.java
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.util.Cryptor;
-import org.apache.commons.vfs2.util.CryptorFactory;
-
-/**
- * Implementation for any url based filesystem.
- * <p>
- * Parses the url into user/password/host/port/path.
- * Does not handle a query string (after ?)
- *
- * @see URLFileNameParser URLFileNameParser for the implementation which also handles the query string too
- */
-public class HostFileNameParser extends AbstractFileNameParser
-{
-    private final int defaultPort;
-
-    public HostFileNameParser(final int defaultPort)
-    {
-        this.defaultPort = defaultPort;
-    }
-
-    public int getDefaultPort()
-    {
-        return defaultPort;
-    }
-
-    @Override
-    public FileName parseUri(final VfsComponentContext context, final FileName base, final String filename)
-            throws FileSystemException
-    {
-        // FTP URI are generic URI (as per RFC 2396)
-        final StringBuilder name = new StringBuilder();
-
-        // Extract the scheme and authority parts
-        final Authority auth = extractToPath(filename, name);
-
-        // Decode and normalise the file name
-        UriParser.canonicalizePath(name, 0, name.length(), this);
-        UriParser.fixSeparators(name);
-        final FileType fileType = UriParser.normalisePath(name);
-        final String path = name.toString();
-
-        return new GenericFileName(
-            auth.scheme,
-            auth.hostName,
-            auth.port,
-            defaultPort,
-            auth.userName,
-            auth.password,
-            path,
-            fileType);
-    }
-
-    /**
-     * Extracts the scheme, userinfo, hostname and port components of a
-     * generic URI.
-     *
-     * @param uri  The absolute URI to parse.
-     * @param name Used to return the remainder of the URI.
-     * @return Authority extracted host authority, never null.
-     * @throws FileSystemException if authority cannot be extracted.
-     */
-    protected Authority extractToPath(final String uri,
-                                      final StringBuilder name)
-        throws FileSystemException
-    {
-        final Authority auth = new Authority();
-
-        // Extract the scheme
-        auth.scheme = UriParser.extractScheme(uri, name);
-
-        // Expecting "//"
-        if (name.length() < 2 || name.charAt(0) != '/' || name.charAt(1) != '/')
-        {
-            throw new FileSystemException("vfs.provider/missing-double-slashes.error", uri);
-        }
-        name.delete(0, 2);
-
-        // Extract userinfo, and split into username and password
-        final String userInfo = extractUserInfo(name);
-        final String userName;
-        final String password;
-        if (userInfo != null)
-        {
-            final int idx = userInfo.indexOf(':');
-            if (idx == -1)
-            {
-                userName = userInfo;
-                password = null;
-            }
-            else
-            {
-                userName = userInfo.substring(0, idx);
-                password = userInfo.substring(idx + 1);
-            }
-        }
-        else
-        {
-            userName = null;
-            password = null;
-        }
-        auth.userName = UriParser.decode(userName);
-        auth.password = UriParser.decode(password);
-
-        if (auth.password != null && auth.password.startsWith("{") && auth.password.endsWith("}"))
-        {
-            try
-            {
-                final Cryptor cryptor = CryptorFactory.getCryptor();
-                auth.password = cryptor.decrypt(auth.password.substring(1, auth.password.length() - 1));
-            }
-            catch (final Exception ex)
-            {
-                throw new FileSystemException("Unable to decrypt password", ex);
-            }
-        }
-
-        // Extract hostname, and normalise (lowercase)
-        final String hostName = extractHostName(name);
-        if (hostName == null)
-        {
-            throw new FileSystemException("vfs.provider/missing-hostname.error", uri);
-        }
-        auth.hostName = hostName.toLowerCase();
-
-        // Extract port
-        auth.port = extractPort(name, uri);
-
-        // Expecting '/' or empty name
-        if (name.length() > 0 && name.charAt(0) != '/')
-        {
-            throw new FileSystemException("vfs.provider/missing-hostname-path-sep.error", uri);
-        }
-
-        return auth;
-    }
-
-    /**
-     * Extracts the user info from a URI.
-     *
-     * @param name string buffer with the "scheme://" part has been removed already. Will be modified.
-     * @return the user information up to the '@' or null.
-     */
-    protected String extractUserInfo(final StringBuilder name)
-    {
-        final int maxlen = name.length();
-        for (int pos = 0; pos < maxlen; pos++)
-        {
-            final char ch = name.charAt(pos);
-            if (ch == '@')
-            {
-                // Found the end of the user info
-                final String userInfo = name.substring(0, pos);
-                name.delete(0, pos + 1);
-                return userInfo;
-            }
-            if (ch == '/' || ch == '?')
-            {
-                // Not allowed in user info
-                break;
-            }
-        }
-
-        // Not found
-        return null;
-    }
-
-    /**
-     * Extracts the hostname from a URI.
-     *
-     * @param name string buffer with the "scheme://[userinfo@]" part has been removed already. Will be modified.
-     * @return the host name  or null.
-     */
-    protected String extractHostName(final StringBuilder name)
-    {
-        final int maxlen = name.length();
-        int pos = 0;
-        for (; pos < maxlen; pos++)
-        {
-            final char ch = name.charAt(pos);
-            if (ch == '/' || ch == ';' || ch == '?' || ch == ':'
-                || ch == '@' || ch == '&' || ch == '=' || ch == '+'
-                || ch == '$' || ch == ',')
-            {
-                break;
-            }
-        }
-        if (pos == 0)
-        {
-            return null;
-        }
-
-        final String hostname = name.substring(0, pos);
-        name.delete(0, pos);
-        return hostname;
-    }
-
-    /**
-     * Extracts the port from a URI.
-     * @param name string buffer with the "scheme://[userinfo@]hostname" part has been removed already.
-     *     Will be modified.
-     * @param uri full URI for error reporting.
-     * @return The port, or -1 if the URI does not contain a port.
-     * @throws FileSystemException if URI is malformed.
-     * @throws NumberFormatException if port number cannot be parsed.
-     */
-    protected int extractPort(final StringBuilder name, final String uri) throws FileSystemException
-    {
-        if (name.length() < 1 || name.charAt(0) != ':')
-        {
-            return -1;
-        }
-
-        final int maxlen = name.length();
-        int pos = 1;
-        for (; pos < maxlen; pos++)
-        {
-            final char ch = name.charAt(pos);
-            if (ch < '0' || ch > '9')
-            {
-                break;
-            }
-        }
-
-        final String port = name.substring(1, pos);
-        name.delete(0, pos);
-        if (port.length() == 0)
-        {
-            throw new FileSystemException("vfs.provider/missing-port.error", uri);
-        }
-
-        return Integer.parseInt(port);
-    }
-
-    /**
-     * Parsed authority info (scheme, hostname, username/password, port).
-     */
-    protected static class Authority
-    {
-        private String scheme;
-        private String hostName;
-        private String userName;
-        private String password;
-        private int port;
-
-        /**
-         * Get the connection schema.
-         * @return the connection scheme.
-         * @since 2.0
-         */
-        public String getScheme()
-        {
-            return scheme;
-        }
-
-        /**
-         * Set the connection schema.
-         * @param scheme the connection scheme.
-         * @since 2.0
-         */
-        public void setScheme(final String scheme)
-        {
-            this.scheme = scheme;
-        }
-
-        /**
-         * Get the host name.
-         * @return the host name.
-         * @since 2.0
-         */
-        public String getHostName()
-        {
-            return hostName;
-        }
-
-        /**
-         * Set the host name.
-         * @param hostName the host name.
-         * @since 2.0
-         */
-        public void setHostName(final String hostName)
-        {
-            this.hostName = hostName;
-        }
-
-        /**
-         * Get the user name.
-         * @return the user name or null.
-         * @since 2.0
-         */
-        public String getUserName()
-        {
-            return userName;
-        }
-
-        /**
-         * Set the user name.
-         * @param userName the user name.
-         * @since 2.0
-         */
-        public void setUserName(final String userName)
-        {
-            this.userName = userName;
-        }
-
-        /**
-         * Get the user password.
-         * @return the password or null.
-         * @since 2.0
-         */
-        public String getPassword()
-        {
-            return password;
-        }
-
-        /**
-         * Set the user password.
-         * @param password the user password.
-         * @since 2.0
-         */
-        public void setPassword(final String password)
-        {
-            this.password = password;
-        }
-
-        /**
-         * Get the port.
-         * @return the port or -1.
-         * @since 2.0
-         */
-        public int getPort()
-        {
-            return port;
-        }
-
-        /**
-         * Set the connection port.
-         * @param port the port number or -1.
-         * @since 2.0
-         */
-        public void setPort(final int port)
-        {
-            this.port = port;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/LayeredFileName.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/LayeredFileName.java
deleted file mode 100644
index 59f474c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/LayeredFileName.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileType;
-
-/**
- * A file name for layered files.
- */
-public class LayeredFileName extends AbstractFileName
-{
-    private final FileName outerUri;
-
-    public LayeredFileName(final String scheme,
-                           final FileName outerUri,
-                           final String path,
-                           final FileType type)
-    {
-        super(scheme, path, type);
-        this.outerUri = outerUri;
-    }
-
-    /**
-     * Returns the URI of the outer file.
-     * @return The FileName.
-     */
-    public FileName getOuterName()
-    {
-        return outerUri;
-    }
-
-    /**
-     * Create a FileName.
-     * @param path The file URI.
-     * @param type The FileType.
-     * @return The FileName.
-     */
-    @Override
-    public FileName createName(final String path, final FileType type)
-    {
-        return new LayeredFileName(getScheme(), getOuterName(), path, type);
-    }
-
-    @Override
-    protected void appendRootUri(final StringBuilder buffer, final boolean addPassword)
-    {
-        buffer.append(getScheme());
-        buffer.append(":");
-        buffer.append(getOuterName().getURI());
-        buffer.append("!");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/LayeredFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/LayeredFileNameParser.java
deleted file mode 100644
index c735d79..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/LayeredFileNameParser.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-
-/**
- * Implementation for layered filesystems.
- * <p>
- * Additionally encodes the '!' character.
- */
-public class LayeredFileNameParser extends AbstractFileNameParser
-{
-    private static final LayeredFileNameParser INSTANCE = new LayeredFileNameParser();
-
-    /**
-     * Return the Parser.
-     * @return The Parser.
-     */
-    public static LayeredFileNameParser getInstance()
-    {
-        return INSTANCE;
-    }
-
-    /**
-     * Determines if a character should be encoded.
-     * @param ch The character to check.
-     * @return true if the character should be encoded.
-     */
-    @Override
-    public boolean encodeCharacter(final char ch)
-    {
-        return super.encodeCharacter(ch) || ch == '!';
-    }
-
-    /**
-     * Parse the base and name into a FileName.
-     * @param context The component context.
-     * @param base The base FileName.
-     * @param filename The target file name.
-     * @return The constructed FileName.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileName parseUri(final VfsComponentContext context, final FileName base, final String filename)
-            throws FileSystemException
-    {
-        final StringBuilder name = new StringBuilder();
-
-        // Extract the scheme
-        final String scheme = UriParser.extractScheme(filename, name);
-
-        // Extract the Layered file URI
-        final String rootUriName = extractRootName(name);
-        FileName rootUri = null;
-        if (rootUriName != null)
-        {
-            rootUri = context.parseURI(rootUriName);
-        }
-
-        // Decode and normalise the path
-        UriParser.canonicalizePath(name, 0, name.length(), this);
-        UriParser.fixSeparators(name);
-        final FileType fileType = UriParser.normalisePath(name);
-        final String path = name.toString();
-
-        return new LayeredFileName(scheme, rootUri, path, fileType);
-    }
-
-    /**
-     * Pops the root prefix off a URI, which has had the scheme removed.
-     *
-     * @param uri string builder which gets modified.
-     * @return the extracted root name.
-     * @throws FileSystemException if error occurs.
-     */
-    protected String extractRootName(final StringBuilder uri)
-        throws FileSystemException
-    {
-        // Looking for <name>!<abspath> (staring at the end)
-        final int maxlen = uri.length();
-        int pos = maxlen - 1;
-        for (; pos > 0 && uri.charAt(pos) != '!'; pos--)
-        {
-        }
-
-        if (pos == 0 && uri.charAt(pos) != '!')
-        {
-            // not ! found, so take the whole path a root
-            // e.g. zip:/my/zip/file.zip
-            pos = maxlen;
-        }
-
-        // Extract the name
-        final String prefix = uri.substring(0, pos);
-        if (pos < maxlen)
-        {
-            uri.delete(0, pos + 1);
-        }
-        else
-        {
-            uri.setLength(0);
-        }
-
-        return prefix;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/LocalFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/LocalFileProvider.java
deleted file mode 100644
index 5387ebe..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/LocalFileProvider.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.commons.vfs2.provider;
-
-import java.io.File;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * A file provider which handles local files.
- */
-public interface LocalFileProvider
-    extends FileProvider
-{
-    /**
-     * Determines if a name is an absolute file name.
-     * <p>
-     * TODO - Move this to a general file name parser interface.
-     *
-     * @param name The name to test.
-     * @return true if the name is absolute.
-     */
-    boolean isAbsoluteLocalName(final String name);
-
-    /**
-     * Finds a local file, from its local name.
-     * @param name The name of the file to locate.
-     * @return The FileObject for the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject findLocalFile(final String name)
-        throws FileSystemException;
-
-    /**
-     * Converts from java.io.File to FileObject.
-     * @param file The File for the file.
-     * @return The FileObject for the file.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject findLocalFile(final File file)
-        throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/TemporaryFileStore.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/TemporaryFileStore.java
deleted file mode 100644
index b68d839..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/TemporaryFileStore.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.commons.vfs2.provider;
-
-import java.io.File;
-
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * Manages a repository of temporary local files.
- */
-public interface TemporaryFileStore
-{
-    /**
-     * Allocates a new temporary file.  The file (and all its descendants)
-     * will be deleted when this store is closed.
-     *
-     * @param basename The name of the file.
-     * @return The temporary file.
-     * @throws FileSystemException if an error occurs.
-     */
-    File allocateFile(String basename) throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/URLFileName.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/URLFileName.java
deleted file mode 100644
index 1ad17e5..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/URLFileName.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider;
-
-import org.apache.commons.httpclient.URIException;
-import org.apache.commons.httpclient.util.URIUtil;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-
-/**
- * A file name that represents URL.
- */
-public class URLFileName extends GenericFileName
-{
-    private static final int BUFFER_SIZE = 250;
-
-    private final String queryString;
-
-    public URLFileName(final String scheme,
-                       final String hostName,
-                       final int port,
-                       final int defaultPort,
-                       final String userName,
-                       final String password,
-                       final String path,
-                       final FileType type,
-                       final String queryString)
-    {
-        super(scheme, hostName, port, defaultPort, userName, password, path, type);
-        this.queryString = queryString;
-    }
-
-    /**
-     * Get the query string.
-     *
-     * @return the query string part of the filename
-     */
-    public String getQueryString()
-    {
-        return queryString;
-    }
-
-    /**
-     * Get the path and query string e.g. /path/servlet?param1=true.
-     *
-     * @return the path and its query string
-     */
-    public String getPathQuery()
-    {
-        final StringBuilder sb = new StringBuilder(BUFFER_SIZE);
-        sb.append(getPath());
-        sb.append("?");
-        sb.append(getQueryString());
-
-        return sb.toString();
-    }
-
-    /**
-     * Get the path encoded suitable for url like filesystem e.g. (http, webdav).
-     *
-     * @param charset the charset used for the path encoding
-     * @return The encoded path.
-     * @throws URIException If an error occurs encoding the URI.
-     * @throws FileSystemException If some other error occurs.
-     */
-    public String getPathQueryEncoded(final String charset) throws URIException, FileSystemException
-    {
-        if (getQueryString() == null)
-        {
-            if (charset != null)
-            {
-                return URIUtil.encodePath(getPathDecoded(), charset);
-            }
-            else
-            {
-                return URIUtil.encodePath(getPathDecoded());
-            }
-        }
-
-        final StringBuilder sb = new StringBuilder(BUFFER_SIZE);
-        if (charset != null)
-        {
-            sb.append(URIUtil.encodePath(getPathDecoded(), charset));
-        }
-        else
-        {
-            sb.append(URIUtil.encodePath(getPathDecoded()));
-        }
-        sb.append("?");
-        sb.append(getQueryString());
-        return sb.toString();
-    }
-
-    /**
-     * Create a FileName.
-     * @param absPath The absolute path.
-     * @param type The FileType.
-     * @return The FileName
-     */
-    @Override
-    public FileName createName(final String absPath, final FileType type)
-    {
-        return new URLFileName(getScheme(),
-            getHostName(),
-            getPort(),
-            getDefaultPort(),
-            getUserName(),
-            getPassword(),
-            absPath,
-            type,
-            getQueryString());
-    }
-
-    /**
-     * Append query string to the uri.
-     *
-     * @return the uri
-     */
-    @Override
-    protected String createURI()
-    {
-        if (getQueryString() != null)
-        {
-            final StringBuilder sb = new StringBuilder(BUFFER_SIZE);
-            sb.append(super.createURI());
-            sb.append("?");
-            sb.append(getQueryString());
-
-            return sb.toString();
-        }
-
-        return super.createURI();
-    }
-
-    /**
-     * Encode a URI.
-     * @param charset The character set.
-     * @return The encoded URI
-     * @throws FileSystemException if some other exception occurs.
-     * @throws URIException if an exception occurs encoding the URI.
-     */
-    public String getURIEncoded(final String charset) throws FileSystemException, URIException
-    {
-        final StringBuilder sb = new StringBuilder(BUFFER_SIZE);
-        appendRootUri(sb, true);
-        sb.append(getPathQueryEncoded(charset));
-        return sb.toString();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/URLFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/URLFileNameParser.java
deleted file mode 100644
index c6d2803..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/URLFileNameParser.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.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-
-/**
- * Implementation for any url based filesystem.
- * <p>
- * Parses the url into user/password/host/port/path/queryString.
- */
-public class URLFileNameParser extends HostFileNameParser
-{
-    public URLFileNameParser(final int defaultPort)
-    {
-        super(defaultPort);
-    }
-
-    @Override
-    public boolean encodeCharacter(final char ch)
-    {
-        return super.encodeCharacter(ch) || ch == '?';
-    }
-
-    @Override
-    public FileName parseUri(final VfsComponentContext context, final FileName base, final String filename)
-            throws FileSystemException
-    {
-        // FTP URI are generic URI (as per RFC 2396)
-        final StringBuilder name = new StringBuilder();
-
-        // Extract the scheme and authority parts
-        final Authority auth = extractToPath(filename, name);
-
-        // Extract the queryString
-        final String queryString = UriParser.extractQueryString(name);
-
-        // Decode and normalise the file name
-        UriParser.canonicalizePath(name, 0, name.length(), this);
-        UriParser.fixSeparators(name);
-        final FileType fileType = UriParser.normalisePath(name);
-        final String path = name.toString();
-
-        return new URLFileName(
-            auth.getScheme(),
-            auth.getHostName(),
-            auth.getPort(),
-            getDefaultPort(),
-            auth.getUserName(),
-            auth.getPassword(),
-            path,
-            fileType,
-            queryString);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/UriParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/UriParser.java
deleted file mode 100644
index ef0ba84..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/UriParser.java
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.VFS;
-import org.apache.commons.vfs2.util.Os;
-
-/**
- * Utilities for dealing with URIs. See RFC 2396 for details.
- *
- *          2005) $
- */
-public final class UriParser
-{
-    /**
-     * The set of valid separators. These are all converted to the normalized
-     * one. Does <i>not</i> contain the normalized separator
-     */
-    // public static final char[] separators = {'\\'};
-    public static final char TRANS_SEPARATOR = '\\';
-
-    /**
-     * The normalised separator to use.
-     */
-    private static final char SEPARATOR_CHAR = FileName.SEPARATOR_CHAR;
-
-    private static final int HEX_BASE = 16;
-
-    private static final int BITS_IN_HALF_BYTE = 4;
-
-    private static final char LOW_MASK = 0x0F;
-
-    private UriParser()
-    {
-    }
-
-    /**
-     * Extracts the first element of a path.
-     * @param name StringBuilder containing the path.
-     * @return The first element of the path.
-     */
-    public static String extractFirstElement(final StringBuilder name)
-    {
-        final int len = name.length();
-        if (len < 1)
-        {
-            return null;
-        }
-        int startPos = 0;
-        if (name.charAt(0) == SEPARATOR_CHAR)
-        {
-            startPos = 1;
-        }
-        for (int pos = startPos; pos < len; pos++)
-        {
-            if (name.charAt(pos) == SEPARATOR_CHAR)
-            {
-                // Found a separator
-                final String elem = name.substring(startPos, pos);
-                name.delete(startPos, pos + 1);
-                return elem;
-            }
-        }
-
-        // No separator
-        final String elem = name.substring(startPos);
-        name.setLength(0);
-        return elem;
-    }
-
-    /**
-     * Normalises a path. Does the following:
-     * <ul>
-     * <li>Removes empty path elements.
-     * <li>Handles '.' and '..' elements.
-     * <li>Removes trailing separator.
-     * </ul>
-     *
-     * Its assumed that the separators are already fixed.
-     *
-     * @param path The path to normalize.
-     * @return The FileType.
-     * @throws FileSystemException if an error occurs.
-     *
-     *  @see #fixSeparators
-     */
-    public static FileType normalisePath(final StringBuilder path)
-            throws FileSystemException
-    {
-        FileType fileType = FileType.FOLDER;
-        if (path.length() == 0)
-        {
-            return fileType;
-        }
-
-        if (path.charAt(path.length() - 1) != '/')
-        {
-            fileType = FileType.FILE;
-        }
-
-        // Adjust separators
-        // fixSeparators(path);
-
-        // Determine the start of the first element
-        int startFirstElem = 0;
-        if (path.charAt(0) == SEPARATOR_CHAR)
-        {
-            if (path.length() == 1)
-            {
-                return fileType;
-            }
-            startFirstElem = 1;
-        }
-
-        // Iterate over each element
-        int startElem = startFirstElem;
-        int maxlen = path.length();
-        while (startElem < maxlen)
-        {
-            // Find the end of the element
-            int endElem = startElem;
-            for (; endElem < maxlen && path.charAt(endElem) != SEPARATOR_CHAR; endElem++)
-            {
-            }
-
-            final int elemLen = endElem - startElem;
-            if (elemLen == 0)
-            {
-                // An empty element - axe it
-                path.delete(endElem, endElem + 1);
-                maxlen = path.length();
-                continue;
-            }
-            if (elemLen == 1 && path.charAt(startElem) == '.')
-            {
-                // A '.' element - axe it
-                path.delete(startElem, endElem + 1);
-                maxlen = path.length();
-                continue;
-            }
-            if (elemLen == 2 && path.charAt(startElem) == '.'
-                    && path.charAt(startElem + 1) == '.')
-            {
-                // A '..' element - remove the previous element
-                if (startElem == startFirstElem)
-                {
-                    // Previous element is missing
-                    throw new FileSystemException(
-                            "vfs.provider/invalid-relative-path.error");
-                }
-
-                // Find start of previous element
-                int pos = startElem - 2;
-                for (; pos >= 0 && path.charAt(pos) != SEPARATOR_CHAR; pos--)
-                {
-                }
-                startElem = pos + 1;
-
-                path.delete(startElem, endElem + 1);
-                maxlen = path.length();
-                continue;
-            }
-
-            // A regular element
-            startElem = endElem + 1;
-        }
-
-        // Remove trailing separator
-        if (!VFS.isUriStyle() && maxlen > 1 && path.charAt(maxlen - 1) == SEPARATOR_CHAR)
-        {
-            path.delete(maxlen - 1, maxlen);
-        }
-
-        return fileType;
-    }
-
-    /**
-     * Normalises the separators in a name.
-     * @param name The StringBuilder containing the name
-     * @return true if the StringBuilder was modified.
-     */
-    public static boolean fixSeparators(final StringBuilder name)
-    {
-        boolean changed = false;
-        final int maxlen = name.length();
-        for (int i = 0; i < maxlen; i++)
-        {
-            final char ch = name.charAt(i);
-            if (ch == TRANS_SEPARATOR)
-            {
-                name.setCharAt(i, SEPARATOR_CHAR);
-                changed = true;
-            }
-        }
-        return changed;
-    }
-
-    /**
-     * Extracts the scheme from a URI.
-     *
-     * @param uri The URI.
-     * @return The scheme name. Returns null if there is no scheme.
-     */
-    public static String extractScheme(final String uri)
-    {
-        return extractScheme(uri, null);
-    }
-
-    /**
-     * Extracts the scheme from a URI. Removes the scheme and ':' delimiter from
-     * the front of the URI.
-     *
-     * @param uri The URI.
-     * @param buffer Returns the remainder of the URI.
-     * @return The scheme name. Returns null if there is no scheme.
-     */
-    public static String extractScheme(final String uri, final StringBuilder buffer)
-    {
-        if (buffer != null)
-        {
-            buffer.setLength(0);
-            buffer.append(uri);
-        }
-
-        final int maxPos = uri.length();
-        for (int pos = 0; pos < maxPos; pos++)
-        {
-            final char ch = uri.charAt(pos);
-
-            if (ch == ':')
-            {
-                // Found the end of the scheme
-                final String scheme = uri.substring(0, pos);
-                if (scheme.length() <= 1 && Os.isFamily(Os.OS_FAMILY_WINDOWS))
-                {
-                    // This is not a scheme, but a Windows drive letter
-                    return null;
-                }
-                if (buffer != null)
-                {
-                    buffer.delete(0, pos + 1);
-                }
-                return scheme.intern();
-            }
-
-            if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
-            {
-                // A scheme character
-                continue;
-            }
-            if (pos > 0
-                    && ((ch >= '0' && ch <= '9') || ch == '+' || ch == '-' || ch == '.'))
-            {
-                // A scheme character (these are not allowed as the first
-                // character of the scheme, but can be used as subsequent
-                // characters.
-                continue;
-            }
-
-            // Not a scheme character
-            break;
-        }
-
-        // No scheme in URI
-        return null;
-    }
-
-    /**
-     * Removes %nn encodings from a string.
-     * @param encodedStr The encoded String.
-     * @return The decoded String.
-     * @throws FileSystemException if an error occurs.
-     */
-    public static String decode(final String encodedStr)
-            throws FileSystemException
-    {
-        if (encodedStr == null)
-        {
-            return null;
-        }
-        if (encodedStr.indexOf('%') < 0)
-        {
-            return encodedStr;
-        }
-        final StringBuilder buffer = new StringBuilder(encodedStr);
-        decode(buffer, 0, buffer.length());
-        return buffer.toString();
-    }
-
-    /**
-     * Removes %nn encodings from a string.
-     * @param buffer StringBuilder containing the string to decode.
-     * @param offset The position in the string to start decoding.
-     * @param length The number of characters to decode.
-     * @throws FileSystemException if an error occurs.
-     */
-    public static void decode(final StringBuilder buffer, final int offset, final int length)
-            throws FileSystemException
-    {
-        int index = offset;
-        int count = length;
-        for (; count > 0; count--, index++)
-        {
-            final char ch = buffer.charAt(index);
-            if (ch != '%')
-            {
-                continue;
-            }
-            if (count < 3)
-            {
-                throw new FileSystemException(
-                        "vfs.provider/invalid-escape-sequence.error", buffer
-                                .substring(index, index + count));
-            }
-
-            // Decode
-            final int dig1 = Character.digit(buffer.charAt(index + 1), HEX_BASE);
-            final int dig2 = Character.digit(buffer.charAt(index + 2), HEX_BASE);
-            if (dig1 == -1 || dig2 == -1)
-            {
-                throw new FileSystemException(
-                        "vfs.provider/invalid-escape-sequence.error", buffer
-                                .substring(index, index + 3));
-            }
-            final char value = (char) (dig1 << BITS_IN_HALF_BYTE | dig2);
-
-            // Replace
-            buffer.setCharAt(index, value);
-            buffer.delete(index + 1, index + 3);
-            count -= 2;
-        }
-    }
-
-    /**
-     * Encodes and appends a string to a StringBuilder.
-     * @param buffer The StringBuilder to append to.
-     * @param unencodedValue The String to encode and append.
-     * @param reserved characters to encode.
-     */
-    public static void appendEncoded(final StringBuilder buffer,
-            final String unencodedValue, final char[] reserved)
-    {
-        final int offset = buffer.length();
-        buffer.append(unencodedValue);
-        encode(buffer, offset, unencodedValue.length(), reserved);
-    }
-
-    /**
-     * Encodes a set of reserved characters in a StringBuilder, using the URI %nn
-     * encoding. Always encodes % characters.
-     * @param buffer The StringBuilder to append to.
-     * @param offset The position in the buffer to start encoding at.
-     * @param length The number of characters to encode.
-     * @param reserved characters to encode.
-     */
-    public static void encode(final StringBuilder buffer, final int offset,
-            final int length, final char[] reserved)
-    {
-        int index = offset;
-        int count = length;
-        for (; count > 0; index++, count--)
-        {
-            final char ch = buffer.charAt(index);
-            boolean match = ch == '%';
-            if (reserved != null)
-            {
-                for (int i = 0; !match && i < reserved.length; i++)
-                {
-                    if (ch == reserved[i])
-                    {
-                        match = true;
-                    }
-                }
-            }
-            if (match)
-            {
-                // Encode
-                final char[] digits =
-                    {Character.forDigit((ch >> BITS_IN_HALF_BYTE) & LOW_MASK, HEX_BASE),
-                     Character.forDigit(ch                        & LOW_MASK, HEX_BASE)};
-                buffer.setCharAt(index, '%');
-                buffer.insert(index + 1, digits);
-                index += 2;
-            }
-        }
-    }
-
-    /**
-     * Removes %nn encodings from a string.
-     * @param decodedStr The decoded String.
-     * @return The encoded String.
-     */
-    public static String encode(final String decodedStr)
-    {
-        return encode(decodedStr, null);
-    }
-
-    /**
-     * Converts "special" characters to their %nn value.
-     * @param decodedStr The decoded String.
-     * @param reserved Characters to encode.
-     * @return The encoded String
-     */
-    public static String encode(final String decodedStr, final char[] reserved)
-    {
-        if (decodedStr == null)
-        {
-            return null;
-        }
-        final StringBuilder buffer = new StringBuilder(decodedStr);
-        encode(buffer, 0, buffer.length(), reserved);
-        return buffer.toString();
-    }
-
-    /**
-     * Encode an array of Strings.
-     * @param strings The array of Strings to encode.
-     * @return An array of encoded Strings.
-     */
-    public static String[] encode(final String[] strings)
-    {
-        if (strings == null)
-        {
-            return null;
-        }
-        for (int i = 0; i < strings.length; i++)
-        {
-            strings[i] = encode(strings[i]);
-        }
-        return strings;
-    }
-
-    /**
-     * Decodes the String.
-     * @param uri The String to decode.
-     * @throws FileSystemException if an error occurs.
-     */
-    public static void checkUriEncoding(final String uri) throws FileSystemException
-    {
-        decode(uri);
-    }
-
-    public static void canonicalizePath(final StringBuilder buffer, final int offset,
-            final int length, final FileNameParser fileNameParser)
-            throws FileSystemException
-    {
-        int index = offset;
-        int count = length;
-        for (; count > 0; count--, index++)
-        {
-            final char ch = buffer.charAt(index);
-            if (ch == '%')
-            {
-                if (count < 3)
-                {
-                    throw new FileSystemException(
-                            "vfs.provider/invalid-escape-sequence.error",
-                            buffer.substring(index, index + count));
-                }
-
-                // Decode
-                final int dig1 = Character.digit(buffer.charAt(index + 1), HEX_BASE);
-                final int dig2 = Character.digit(buffer.charAt(index + 2), HEX_BASE);
-                if (dig1 == -1 || dig2 == -1)
-                {
-                    throw new FileSystemException(
-                            "vfs.provider/invalid-escape-sequence.error",
-                            buffer.substring(index, index + 3));
-                }
-                final char value = (char) (dig1 << BITS_IN_HALF_BYTE | dig2);
-
-                final boolean match = value == '%' || fileNameParser.encodeCharacter(value);
-
-                if (match)
-                {
-                    // this is a reserved character, not allowed to decode
-                    index += 2;
-                    count -= 2;
-                    continue;
-                }
-
-                // Replace
-                buffer.setCharAt(index, value);
-                buffer.delete(index + 1, index + 3);
-                count -= 2;
-            }
-            else if (fileNameParser.encodeCharacter(ch))
-            {
-                // Encode
-                final char[] digits =
-                    {Character.forDigit((ch >> BITS_IN_HALF_BYTE) & LOW_MASK, HEX_BASE),
-                     Character.forDigit(ch                        & LOW_MASK, HEX_BASE)};
-                buffer.setCharAt(index, '%');
-                buffer.insert(index + 1, digits);
-                index += 2;
-            }
-        }
-    }
-
-    /**
-     * Extract the query String from the URI.
-     * @param name StringBuilder containing the URI.
-     * @return The query string, if any. null otherwise.
-     */
-    public static String extractQueryString(final StringBuilder name)
-    {
-        for (int pos = 0; pos < name.length(); pos++)
-        {
-            if (name.charAt(pos) == '?')
-            {
-                final String queryString = name.substring(pos + 1);
-                name.delete(pos, name.length());
-                return queryString;
-            }
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/VfsComponent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/VfsComponent.java
deleted file mode 100644
index 0740f4b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/VfsComponent.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.commons.vfs2.provider;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * This interface is used to manage the lifecycle of all VFS components.
- * This includes all implementations of the following interfaces:
- * <ul>
- * <li>{@link FileProvider}
- * <li>{@link org.apache.commons.vfs2.FileSystem}
- * <li>{@link FileReplicator}
- * <li>{@link TemporaryFileStore}
- * </ul>
- */
-public interface VfsComponent
-{
-    /**
-     * Sets the Logger to use for the component.
-     *
-     * @param logger The Log
-     */
-    void setLogger(Log logger);
-
-    /**
-     * Sets the context for the component.
-     *
-     * @param context The context.
-     */
-    void setContext(VfsComponentContext context);
-
-    /**
-     * Initializes the component.
-     * @throws FileSystemException if an error occurs.
-     */
-    void init() throws FileSystemException;
-
-    /**
-     * Closes the component.
-     */
-    void close();
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/VfsComponentContext.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/VfsComponentContext.java
deleted file mode 100644
index 82ffb60..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/VfsComponentContext.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.commons.vfs2.provider;
-
-import java.io.File;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * Allows VFS components to access the services they need, such as the file
- * replicator.  A VFS component is supplied with a context as part of its
- * initialisation.
- *
- * @see VfsComponent#setContext
- */
-public interface VfsComponentContext
-{
-    /**
-     * Locate a file by name.  See
-     * {@link FileSystemManager#resolveFile(FileObject, String)} for a
-     * description of how this works.
-     * @param baseFile The base FileObject.
-     * @param name The name of the file to locate.
-     * @param fileSystemOptions The FileSystemOptions.
-     * @return The FileObject for the located file.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject resolveFile(FileObject baseFile, String name, FileSystemOptions fileSystemOptions)
-        throws FileSystemException;
-
-    /**
-     * Locate a file by name.  See
-     * {@link FileSystemManager#resolveFile( String)} for a
-     * description of how this works.
-     * @param name The name of the file to locate.
-     * @param fileSystemOptions The FileSystemOptions.
-     * @return The FileObject for the located file.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject resolveFile(String name, FileSystemOptions fileSystemOptions)
-        throws FileSystemException;
-
-    /**
-     * Parse a URI into a FileName.
-     * @param uri The URI String.
-     * @return The FileName.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileName parseURI(String uri) throws FileSystemException;
-
-    /**
-     * Locates a file replicator for the provider to use.
-     * @return The FileReplicator.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileReplicator getReplicator() throws FileSystemException;
-
-    /**
-     * Locates a temporary file store for the provider to use.
-     * @return The TemporaryFileStore.
-     * @throws FileSystemException if an error occurs.
-     */
-    TemporaryFileStore getTemporaryFileStore() throws FileSystemException;
-
-    /**
-     * Returns a {@link FileObject} for a local file.
-     * @param file The File to convert to a FileObject.
-     * @return the FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    FileObject toFileObject(File file) throws FileSystemException;
-
-    /**
-     * Returns the filesystem manager for the current context.
-     *
-     * @return the filesystem manager
-     */
-    FileSystemManager getFileSystemManager();
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileObject.java
deleted file mode 100644
index 8071414..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileObject.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.commons.vfs2.provider.bzip2;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
-import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.compressed.CompressedFileFileObject;
-import org.apache.commons.vfs2.provider.compressed.CompressedFileFileSystem;
-
-/**
- * the bzip2 file.
- */
-public class Bzip2FileObject extends CompressedFileFileObject<Bzip2FileSystem>
-{
-    /**
-     * Deprecated since 2.1. 
-     * 
-     * @deprecated Use {@link #Bzip2FileObject(AbstractFileName, FileObject, Bzip2FileSystem)} instead.
-     */
-    @Deprecated
-    protected Bzip2FileObject(final AbstractFileName name, final FileObject container, final CompressedFileFileSystem fs)
-    {
-        super(name, container, cast(fs));
-    }
-
-    protected Bzip2FileObject(final AbstractFileName name, final FileObject container, final Bzip2FileSystem fs)
-    {
-        super(name, container, fs);
-    }
-
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        // check file
-        final InputStream is = getContainer().getContent().getInputStream();
-        return wrapInputStream(getName().getURI(), is);
-    }
-
-    public static InputStream wrapInputStream(final String name, final InputStream is) throws IOException
-    {
-        return new BZip2CompressorInputStream(is);
-    }
-
-    @Override
-    protected OutputStream doGetOutputStream(final boolean bAppend) throws Exception
-    {
-        final OutputStream os = getContainer().getContent().getOutputStream(false);
-        return new BZip2CompressorOutputStream(os);
-    }
-
-    private static Bzip2FileSystem cast(CompressedFileFileSystem fs) {
-        if (fs instanceof Bzip2FileSystem) {
-            return (Bzip2FileSystem) fs;
-        }
-        throw new IllegalArgumentException("Bzip2FileObject requires a Bzip2FileSystem implementation");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileProvider.java
deleted file mode 100644
index 84ec23b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileProvider.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.commons.vfs2.provider.bzip2;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.compressed.CompressedFileFileProvider;
-
-/**
- * Provides access to the content of bzip2 compressed files.
- */
-public class Bzip2FileProvider extends CompressedFileFileProvider
-{
-    /** The provider's capabilities */
-    protected static final Collection<Capability> capabilities =
-            Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-                    {
-                            Capability.GET_LAST_MODIFIED,
-                            Capability.GET_TYPE,
-                            Capability.LIST_CHILDREN,
-                            Capability.READ_CONTENT,
-                            Capability.WRITE_CONTENT,
-                            Capability.URI,
-                            Capability.COMPRESS
-                    }));
-
-    public Bzip2FileProvider()
-    {
-        super();
-    }
-
-    @Override
-    protected FileSystem createFileSystem(final FileName name, final FileObject file,
-                                          final FileSystemOptions fileSystemOptions)
-            throws FileSystemException
-    {
-        return new Bzip2FileSystem(name, file, fileSystemOptions);
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileSystem.java
deleted file mode 100644
index 4c99003..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/Bzip2FileSystem.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.commons.vfs2.provider.bzip2;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.compressed.CompressedFileFileSystem;
-
-/**
- * Filesytem to handle compressed files using the bzip2 method.
- */
-public class Bzip2FileSystem extends CompressedFileFileSystem
-{
-    protected Bzip2FileSystem(final FileName rootName, final FileObject parentLayer,
-                              final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, parentLayer, fileSystemOptions);
-    }
-
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws FileSystemException
-    {
-        return new Bzip2FileObject(name, getParentLayer(), this);
-    }
-
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(Bzip2FileProvider.capabilities);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/package.html
deleted file mode 100644
index f794b5c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/bzip2/package.html
+++ /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.
--->
-<body>
-<p>The BZIP2 File Provider</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/CompressedFileFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/CompressedFileFileObject.java
deleted file mode 100644
index 36c93aa..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/CompressedFileFileObject.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.commons.vfs2.provider.compressed;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-
-/**
- * A compressed file.
- *
- * <p>
- * Such a file only has one child (the compressed filename with stripped last extension)
- * </p>
- *
- * @param <FS>
- *            A CompressedFileFileSystem
- */
-public abstract class CompressedFileFileObject<FS extends CompressedFileFileSystem> extends AbstractFileObject<FS>
-{
-    private final FileObject container;
-    private final String[] children;
-
-    protected CompressedFileFileObject(final AbstractFileName name, final FileObject container, final FS fs)
-    {
-        super(name, fs);
-        this.container = container;
-
-        // todo, add getBaseName(String) to FileName
-        String basename = container.getName().getBaseName();
-        final int pos = basename.lastIndexOf('.');
-        if (pos > 0)
-        {
-            basename = basename.substring(0, pos);
-        }
-        children = new String[]{basename};
-    }
-
-    /**
-     * Determines if this file can be written to.
-     *
-     * @return {@code true} if this file is writeable, {@code false} if not.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean isWriteable() throws FileSystemException
-    {
-        return getFileSystem().hasCapability(Capability.WRITE_CONTENT);
-    }
-
-    /**
-     * Returns the file's type.
-     */
-    @Override
-    protected FileType doGetType() throws FileSystemException
-    {
-        if (getName().getPath().endsWith("/"))
-        {
-            return FileType.FOLDER;
-        }
-        else
-        {
-            return FileType.FILE;
-        }
-    }
-
-    /**
-     * Lists the children of the file.
-     */
-    @Override
-    protected String[] doListChildren()
-    {
-        return children;
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).  Is only called if
-     * {@link #doGetType} returns {@link FileType#FILE}.
-     */
-    @Override
-    protected long doGetContentSize()
-    {
-        return -1;
-    }
-
-    /**
-     * Returns the last modified time of this file.
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        return container.getContent().getLastModifiedTime();
-    }
-
-    protected FileObject getContainer()
-    {
-        return container;
-    }
-
-    @Override
-    public void createFile() throws FileSystemException
-    {
-        container.createFile();
-        injectType(FileType.FILE);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/CompressedFileFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/CompressedFileFileProvider.java
deleted file mode 100644
index 6a451e9..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/CompressedFileFileProvider.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.commons.vfs2.provider.compressed;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractLayeredFileProvider;
-import org.apache.commons.vfs2.provider.FileProvider;
-import org.apache.commons.vfs2.provider.LayeredFileName;
-
-/**
- * A file system provider for compressed files.  Provides read-only file
- * systems.
- */
-public abstract class CompressedFileFileProvider
-    extends AbstractLayeredFileProvider
-    implements FileProvider
-{
-    public CompressedFileFileProvider()
-    {
-        super();
-    }
-
-    /**
-     * Parses an absolute URI.
-     *
-     * @param uri The URI to parse.
-     */
-    /*
-    public FileName parseUri(final String uri)
-        throws FileSystemException
-    {
-        return ZipFileName.parseUri(uri);
-    }
-    */
-
-    /**
-     * Creates a layered file system.  This method is called if the file system
-     * is not cached.
-     *
-     * @param scheme The URI scheme.
-     * @param file   The file to create the file system on top of.
-     * @return The file system.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final String scheme,
-                                            final FileObject file,
-                                            final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final FileName name =
-            new LayeredFileName(scheme, file.getName(), FileName.ROOT_PATH, FileType.FOLDER);
-        return createFileSystem(name, file, fileSystemOptions);
-    }
-
-    protected abstract FileSystem createFileSystem(final FileName name, final FileObject file,
-                                                   final FileSystemOptions fileSystemOptions)
-        throws FileSystemException;
-
-    @Override
-    public abstract Collection<Capability> getCapabilities();
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/CompressedFileFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/CompressedFileFileSystem.java
deleted file mode 100644
index dca18dd..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/CompressedFileFileSystem.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.commons.vfs2.provider.compressed;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-
-/**
- * A read-only file system for compressed files.
- */
-public abstract class CompressedFileFileSystem
-    extends AbstractFileSystem
-{
-    protected CompressedFileFileSystem(final FileName rootName,
-                                       final FileObject parentLayer,
-                                       final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, parentLayer, fileSystemOptions);
-    }
-
-    /**
-     * Returns the capabilities of this file system.
-     */
-    @Override
-    protected abstract void addCapabilities(final Collection<Capability> caps);
-
-    /**
-     * Creates a file object.
-     */
-    @Override
-    protected abstract FileObject createFile(final AbstractFileName name) throws FileSystemException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/package.html
deleted file mode 100644
index 4c216d0..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/compressed/package.html
+++ /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.
--->
-<body>
-<p>The compressed file provider</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FTPClientWrapper.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FTPClientWrapper.java
deleted file mode 100644
index e73a342..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FTPClientWrapper.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.commons.vfs2.provider.ftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.net.ftp.FTPClient;
-import org.apache.commons.net.ftp.FTPFile;
-import org.apache.commons.net.ftp.FTPReply;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-/**
- * A wrapper to the FTPClient to allow automatic reconnect on connection loss.
- * <p>
- * I decided to not to use eg. noop() to determine the state of the connection to avoid
- * unnecessary server round-trips.
- */
-public class FTPClientWrapper implements FtpClient
-{
-    
-    private static final Log LOG = LogFactory.getLog(FTPClientWrapper.class);
-    
-    protected final FileSystemOptions fileSystemOptions;
-    private final GenericFileName root;
-    private FTPClient ftpClient;
-
-    protected FTPClientWrapper(final GenericFileName root, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        this.root = root;
-        this.fileSystemOptions = fileSystemOptions;
-        getFtpClient(); // fail-fast
-    }
-
-    public GenericFileName getRoot()
-    {
-        return root;
-    }
-
-    public FileSystemOptions getFileSystemOptions()
-    {
-        return fileSystemOptions;
-    }
-
-    private FTPClient createClient() throws FileSystemException
-    {
-        final GenericFileName rootName = getRoot();
-
-        UserAuthenticationData authData = null;
-        try
-        {
-            authData = UserAuthenticatorUtils.authenticate(fileSystemOptions, FtpFileProvider.AUTHENTICATOR_TYPES);
-
-            return createClient(rootName, authData);
-        }
-        finally
-        {
-            UserAuthenticatorUtils.cleanup(authData);
-        }
-    }
-
-    protected FTPClient createClient(final GenericFileName rootName, final UserAuthenticationData authData)
-        throws FileSystemException
-    {
-        return FtpClientFactory.createConnection(
-            rootName.getHostName(),
-            rootName.getPort(),
-            UserAuthenticatorUtils.getData(
-                authData, UserAuthenticationData.USERNAME, UserAuthenticatorUtils.toChar(rootName.getUserName())),
-            UserAuthenticatorUtils.getData(
-                authData, UserAuthenticationData.PASSWORD, UserAuthenticatorUtils.toChar(rootName.getPassword())),
-            rootName.getPath(), getFileSystemOptions());
-    }
-
-    private FTPClient getFtpClient() throws FileSystemException
-    {
-        if (ftpClient == null)
-        {
-            ftpClient = createClient();
-        }
-
-        return ftpClient;
-    }
-
-    @Override
-    public boolean isConnected() throws FileSystemException
-    {
-        return ftpClient != null && ftpClient.isConnected();
-    }
-
-    @Override
-    public void disconnect() throws IOException
-    {
-        try
-        {
-            getFtpClient().quit();
-        }
-        catch (IOException e)
-        {
-            LOG.debug("I/O exception while trying to quit, probably it's a timed out connection, ignoring.", e);
-        }
-        finally
-        {
-            try
-            {
-                getFtpClient().disconnect();
-            }
-            catch (IOException e)
-            {
-                LOG.warn("I/O exception while trying to disconnect, probably it's a closed connection, ignoring.", e);
-            }
-            finally
-            {
-                ftpClient = null;
-            }
-        }
-    }
-
-    @Override
-    public FTPFile[] listFiles(final String relPath) throws IOException
-    {
-        try
-        {
-            // VFS-210: return getFtpClient().listFiles(relPath);
-            final FTPFile[] files = listFilesInDirectory(relPath);
-            return files;
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-            final FTPFile[] files = listFilesInDirectory(relPath);
-            return files;
-        }
-    }
-
-    private FTPFile[] listFilesInDirectory(final String relPath) throws IOException
-    {
-        FTPFile[] files;
-
-        // VFS-307: no check if we can simply list the files, this might fail if there are spaces in the path
-        files = getFtpClient().listFiles(relPath);
-        if (FTPReply.isPositiveCompletion(getFtpClient().getReplyCode()))
-        {
-            return files;
-        }
-
-        // VFS-307: now try the hard way by cd'ing into the directory, list and cd back
-        // if VFS is required to fallback here the user might experience a real bad FTP performance
-        // as then every list requires 4 ftp commands.
-        String workingDirectory = null;
-        if (relPath != null)
-        {
-            workingDirectory = getFtpClient().printWorkingDirectory();
-            if (!getFtpClient().changeWorkingDirectory(relPath))
-            {
-                return null;
-            }
-        }
-
-        files = getFtpClient().listFiles();
-
-        if (relPath != null && !getFtpClient().changeWorkingDirectory(workingDirectory))
-        {
-            throw new FileSystemException("vfs.provider.ftp.wrapper/change-work-directory-back.error",
-                    workingDirectory);
-        }
-        return files;
-    }
-
-    @Override
-    public boolean removeDirectory(final String relPath) throws IOException
-    {
-        try
-        {
-            return getFtpClient().removeDirectory(relPath);
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-            return getFtpClient().removeDirectory(relPath);
-        }
-    }
-
-    @Override
-    public boolean deleteFile(final String relPath) throws IOException
-    {
-        try
-        {
-            return getFtpClient().deleteFile(relPath);
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-            return getFtpClient().deleteFile(relPath);
-        }
-    }
-
-    @Override
-    public boolean rename(final String oldName, final String newName) throws IOException
-    {
-        try
-        {
-            return getFtpClient().rename(oldName, newName);
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-            return getFtpClient().rename(oldName, newName);
-        }
-    }
-
-    @Override
-    public boolean makeDirectory(final String relPath) throws IOException
-    {
-        try
-        {
-            return getFtpClient().makeDirectory(relPath);
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-            return getFtpClient().makeDirectory(relPath);
-        }
-    }
-
-    @Override
-    public boolean completePendingCommand() throws IOException
-    {
-        if (ftpClient != null)
-        {
-            return getFtpClient().completePendingCommand();
-        }
-
-        return true;
-    }
-
-    @Override
-    public InputStream retrieveFileStream(final String relPath) throws IOException
-    {
-        try
-        {
-            return getFtpClient().retrieveFileStream(relPath);
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-            return getFtpClient().retrieveFileStream(relPath);
-        }
-    }
-
-    @Override
-    public InputStream retrieveFileStream(final String relPath, final long restartOffset) throws IOException
-    {
-        try
-        {
-            final FTPClient client = getFtpClient();
-            client.setRestartOffset(restartOffset);
-            return client.retrieveFileStream(relPath);
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-            final FTPClient client = getFtpClient();
-            client.setRestartOffset(restartOffset);
-            return client.retrieveFileStream(relPath);
-        }
-    }
-
-    @Override
-    public OutputStream appendFileStream(final String relPath) throws IOException
-    {
-        try
-        {
-            return getFtpClient().appendFileStream(relPath);
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-            return getFtpClient().appendFileStream(relPath);
-        }
-    }
-
-    @Override
-    public OutputStream storeFileStream(final String relPath) throws IOException
-    {
-        try
-        {
-            return getFtpClient().storeFileStream(relPath);
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-            return getFtpClient().storeFileStream(relPath);
-        }
-    }
-
-    @Override
-    public boolean abort() throws IOException
-    {
-        try
-        {
-            // imario@apache.org: 2005-02-14
-            // it should be better to really "abort" the transfer, but
-            // currently I didnt manage to make it work - so lets "abort" the hard way.
-            // return getFtpClient().abort();
-
-            disconnect();
-            return true;
-        }
-        catch (final IOException e)
-        {
-            disconnect();
-        }
-        return true;
-    }
-
-    @Override
-    public String getReplyString() throws IOException
-    {
-        return getFtpClient().getReplyString();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClient.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClient.java
deleted file mode 100644
index df334db..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClient.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.commons.vfs2.provider.ftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.commons.net.ftp.FTPFile;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * What VFS expects from an ftp client to provide.
- */
-public interface FtpClient
-{
-    boolean isConnected() throws FileSystemException;
-
-    void disconnect() throws IOException;
-
-    FTPFile[] listFiles(String relPath) throws IOException;
-
-    boolean removeDirectory(String relPath) throws IOException;
-
-    boolean deleteFile(String relPath) throws IOException;
-
-    boolean rename(String oldName, String newName) throws IOException;
-
-    boolean makeDirectory(String relPath) throws IOException;
-
-    boolean completePendingCommand() throws IOException;
-
-    InputStream retrieveFileStream(String relPath) throws IOException;
-
-    InputStream retrieveFileStream(String relPath, long restartOffset) throws IOException;
-
-    OutputStream appendFileStream(String relPath) throws IOException;
-
-    OutputStream storeFileStream(String relPath) throws IOException;
-
-    boolean abort() throws IOException;
-
-    String getReplyString() throws IOException;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClientFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClientFactory.java
deleted file mode 100644
index d221fa5..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClientFactory.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.ftp;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.net.Proxy;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.net.PrintCommandListener;
-import org.apache.commons.net.ftp.FTPClient;
-import org.apache.commons.net.ftp.FTPClientConfig;
-import org.apache.commons.net.ftp.FTPReply;
-import org.apache.commons.net.ftp.parser.FTPFileEntryParserFactory;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-/**
- * Create a FtpClient instance.
- */
-public final class FtpClientFactory
-{
-    private FtpClientFactory()
-    {
-    }
-
-    /**
-     * Creates a new connection to the server.
-     *
-     * @param hostname          The host name of the server.
-     * @param port              The port to connect to.
-     * @param username          The name of the user for authentication.
-     * @param password          The user's password.
-     * @param workingDirectory  The base directory.
-     * @param fileSystemOptions The FileSystemOptions.
-     * @return An FTPClient.
-     * @throws FileSystemException if an error occurs while connecting.
-     */
-    public static FTPClient createConnection(final String hostname, final int port,
-                                             final char[] username, final char[] password,
-                                             final String workingDirectory, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final FtpConnectionFactory factory = new FtpConnectionFactory(FtpFileSystemConfigBuilder.getInstance());
-        return factory.createConnection(hostname, port, username, password, workingDirectory, fileSystemOptions);
-    }
-
-    /** Connection Factory, used to configure the FTPClient. */
-    public static final class FtpConnectionFactory extends ConnectionFactory<FTPClient, FtpFileSystemConfigBuilder>
-    {
-        private FtpConnectionFactory(final FtpFileSystemConfigBuilder builder)
-        {
-            super(builder);
-        }
-
-        @Override
-        protected FTPClient createClient(final FileSystemOptions fileSystemOptions)
-        {
-            return new FTPClient();
-        }
-
-        @Override
-        protected void setupOpenConnection(final FTPClient client, final FileSystemOptions fileSystemOptions)
-        {
-            // nothing to do for FTP
-        }
-    }
-
-    /** Abstract Factory, used to configure different FTPClients. */
-    public abstract static class ConnectionFactory<C extends FTPClient, B extends FtpFileSystemConfigBuilder>
-    {
-        private static final char[] ANON_CHAR_ARRAY = "anonymous".toCharArray();
-        private static final int BUFSZ = 40;
-        private final Log log = LogFactory.getLog(getClass());
-
-        protected B builder;
-
-        protected ConnectionFactory(final B builder)
-        {
-            this.builder = builder;
-        }
-
-        public C createConnection(final String hostname, final int port, char[] username, char[] password,
-            final String workingDirectory, final FileSystemOptions fileSystemOptions) throws FileSystemException
-        {
-            // Determine the username and password to use
-            if (username == null)
-            {
-                username = ANON_CHAR_ARRAY;
-            }
-
-            if (password == null)
-            {
-                password = ANON_CHAR_ARRAY;
-            }
-
-            try
-            {
-                final C client = createClient(fileSystemOptions);
-
-                if (log.isDebugEnabled())
-                {
-                    final Writer writer = new StringWriter(1024)
-                    {
-                        @Override
-                        public void flush()
-                        {
-                            final StringBuffer buffer = getBuffer();
-                            String message = buffer.toString();
-                            if (message.toUpperCase().startsWith("PASS ") && message.length() > 5)
-                            {
-                                message = "PASS ***";
-                            }
-                            log.debug(message);
-                            buffer.setLength(0);
-                        }
-                    };
-                    client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(writer)));
-                }
-
-                configureClient(fileSystemOptions, client);
-
-                final FTPFileEntryParserFactory myFactory =
-                    builder.getEntryParserFactory(fileSystemOptions);
-                if (myFactory != null)
-                {
-                    client.setParserFactory(myFactory);
-                }
-
-                Boolean remoteVerification = builder.getRemoteVerification(fileSystemOptions);
-                if (remoteVerification != null)
-                {
-                    client.setRemoteVerificationEnabled(remoteVerification.booleanValue());
-                }
-
-                try
-                {
-                    // Set connect timeout
-                    final Integer connectTimeout = builder.getConnectTimeout(fileSystemOptions);
-                    if (connectTimeout != null)
-                    {
-                        client.setDefaultTimeout(connectTimeout.intValue());
-                    }
-
-                    final String controlEncoding = builder.getControlEncoding(fileSystemOptions);
-                    if (controlEncoding != null)
-                    {
-                        client.setControlEncoding(controlEncoding);
-                    }
-
-                    final Proxy proxy = builder.getProxy(fileSystemOptions);
-                    if (proxy != null)
-                    {
-                        client.setProxy(proxy);
-                    }
-
-                    client.connect(hostname, port);
-
-                    final int reply = client.getReplyCode();
-                    if (!FTPReply.isPositiveCompletion(reply))
-                    {
-                        throw new FileSystemException("vfs.provider.ftp/connect-rejected.error", hostname);
-                    }
-
-                    // Login
-                    if (!client.login(
-                        UserAuthenticatorUtils.toString(username),
-                        UserAuthenticatorUtils.toString(password)))
-                    {
-                        throw new FileSystemException("vfs.provider.ftp/login.error",
-                            hostname, UserAuthenticatorUtils.toString(username));
-                    }
-
-                    FtpFileType fileType = builder.getFileType(fileSystemOptions);
-                    if (fileType == null)
-                    {
-                        fileType = FtpFileType.BINARY;
-                    }
-                    // Set binary mode
-                    if (!client.setFileType(fileType.getValue()))
-                    {
-                        throw new FileSystemException("vfs.provider.ftp/set-file-type.error", fileType);
-                    }
-
-                    // Set dataTimeout value
-                    final Integer dataTimeout = builder.getDataTimeout(fileSystemOptions);
-                    if (dataTimeout != null)
-                    {
-                        client.setDataTimeout(dataTimeout.intValue());
-                    }
-
-                    final Integer socketTimeout = builder.getSoTimeout(fileSystemOptions);
-                    if (socketTimeout != null)
-                    {
-                        client.setSoTimeout(socketTimeout.intValue());
-                    }
-
-                    final Boolean userDirIsRoot = builder.getUserDirIsRoot(fileSystemOptions);
-                    if (workingDirectory != null && (userDirIsRoot == null || !userDirIsRoot.booleanValue()))
-                    {
-                        if (!client.changeWorkingDirectory(workingDirectory))
-                        {
-                            throw new FileSystemException("vfs.provider.ftp/change-work-directory.error",
-                                                          workingDirectory);
-                        }
-                    }
-
-                    final Boolean passiveMode = builder.getPassiveMode(fileSystemOptions);
-                    if (passiveMode != null && passiveMode.booleanValue())
-                    {
-                        client.enterLocalPassiveMode();
-                    }
-
-                    setupOpenConnection(client, fileSystemOptions);
-                }
-                catch (final IOException e)
-                {
-                    if (client.isConnected())
-                    {
-                        client.disconnect();
-                    }
-                    throw e;
-                }
-
-                return client;
-            }
-            catch (final Exception exc)
-            {
-                throw new FileSystemException("vfs.provider.ftp/connect.error", exc, hostname);
-            }
-        }
-
-        protected abstract C createClient(FileSystemOptions fileSystemOptions) throws FileSystemException;
-        protected abstract void setupOpenConnection(C client, FileSystemOptions fileSystemOptions) throws IOException;
-
-        private void configureClient(final FileSystemOptions fileSystemOptions, final C client)
-        {
-            final String key = builder.getEntryParser(fileSystemOptions);
-            if (key != null)
-            {
-                final FTPClientConfig config = new FTPClientConfig(key);
-
-                final String serverLanguageCode =
-                    builder.getServerLanguageCode(fileSystemOptions);
-                if (serverLanguageCode != null)
-                {
-                    config.setServerLanguageCode(serverLanguageCode);
-                }
-                final String defaultDateFormat =
-                    builder.getDefaultDateFormat(fileSystemOptions);
-                if (defaultDateFormat != null)
-                {
-                    config.setDefaultDateFormatStr(defaultDateFormat);
-                }
-                final String recentDateFormat =
-                    builder.getRecentDateFormat(fileSystemOptions);
-                if (recentDateFormat != null)
-                {
-                    config.setRecentDateFormatStr(recentDateFormat);
-                }
-                final String serverTimeZoneId =
-                    builder.getServerTimeZoneId(fileSystemOptions);
-                if (serverTimeZoneId != null)
-                {
-                    config.setServerTimeZoneId(serverTimeZoneId);
-                }
-                final String[] shortMonthNames =
-                    builder.getShortMonthNames(fileSystemOptions);
-                if (shortMonthNames != null)
-                {
-                    final StringBuilder shortMonthNamesStr = new StringBuilder(BUFSZ);
-                    for (final String shortMonthName : shortMonthNames)
-                    {
-                        if (shortMonthNamesStr.length() > 0)
-                        {
-                            shortMonthNamesStr.append("|");
-                        }
-                        shortMonthNamesStr.append(shortMonthName);
-                    }
-                    config.setShortMonthNames(shortMonthNamesStr.toString());
-                }
-
-                client.configure(config);
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileNameParser.java
deleted file mode 100644
index 73675a9..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileNameParser.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.commons.vfs2.provider.ftp;
-
-import org.apache.commons.vfs2.provider.FileNameParser;
-import org.apache.commons.vfs2.provider.HostFileNameParser;
-
-/**
- * Implementation for ftp. set default port to 21
- */
-public class FtpFileNameParser extends HostFileNameParser
-{
-    private static final FtpFileNameParser INSTANCE = new FtpFileNameParser();
-
-    private static final int PORT = 21;
-
-    public FtpFileNameParser()
-    {
-        super(PORT);
-    }
-
-    public static FileNameParser getInstance()
-    {
-        return INSTANCE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileObject.java
deleted file mode 100644
index 2dedf3f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileObject.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.
- */
-package org.apache.commons.vfs2.provider.ftp;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.net.ftp.FTPFile;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileNotFolderException;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-import org.apache.commons.vfs2.util.Messages;
-import org.apache.commons.vfs2.util.MonitorInputStream;
-import org.apache.commons.vfs2.util.MonitorOutputStream;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * An FTP file.
- */
-public class FtpFileObject extends AbstractFileObject<FtpFileSystem>
-{
-    private static final Map<String, FTPFile> EMPTY_FTP_FILE_MAP =
-        Collections.unmodifiableMap(new TreeMap<String, FTPFile>());
-    private static final FTPFile UNKNOWN = new FTPFile();
-    private static final Log log = LogFactory.getLog(FtpFileObject.class);
-
-    private final String relPath;
-
-    // Cached info
-    private FTPFile fileInfo;
-    private Map<String, FTPFile> children;
-    private FileObject linkDestination;
-
-    private boolean inRefresh;
-
-    protected FtpFileObject(final AbstractFileName name,
-                            final FtpFileSystem fileSystem,
-                            final FileName rootName)
-        throws FileSystemException
-    {
-        super(name, fileSystem);
-        final String relPath = UriParser.decode(rootName.getRelativeName(name));
-        if (".".equals(relPath))
-        {
-            // do not use the "." as path against the ftp-server
-            // e.g. the uu.net ftp-server do a recursive listing then
-            // this.relPath = UriParser.decode(rootName.getPath());
-            // this.relPath = ".";
-            this.relPath = null;
-        }
-        else
-        {
-            this.relPath = relPath;
-        }
-    }
-
-    /**
-     * Called by child file objects, to locate their ftp file info.
-     *
-     * @param name  the filename in its native form ie. without uri stuff (%nn)
-     * @param flush recreate children cache
-     */
-    private FTPFile getChildFile(final String name, final boolean flush) throws IOException
-    {
-        /* If we should flush cached children, clear our children map unless
-                 * we're in the middle of a refresh in which case we've just recently
-                 * refreshed our children. No need to do it again when our children are
-                 * refresh()ed, calling getChildFile() for themselves from within
-                 * getInfo(). See getChildren(). */
-        if (flush && !inRefresh)
-        {
-            children = null;
-        }
-
-        // List the children of this file
-        doGetChildren();
-
-        // VFS-210
-        if (children == null)
-        {
-            return null;
-        }
-
-        // Look for the requested child
-        final FTPFile ftpFile = children.get(name);
-        return ftpFile;
-    }
-
-    /**
-     * Fetches the children of this file, if not already cached.
-     */
-    private void doGetChildren() throws IOException
-    {
-        if (children != null)
-        {
-            return;
-        }
-
-        final FtpClient client = getAbstractFileSystem().getClient();
-        try
-        {
-            final String path = fileInfo != null && fileInfo.isSymbolicLink()
-                ? getFileSystem().getFileSystemManager().
-                    resolveName(getParent().getName(), fileInfo.getLink()).getPath()
-                : relPath;
-            final FTPFile[] tmpChildren = client.listFiles(path);
-            if (tmpChildren == null || tmpChildren.length == 0)
-            {
-                children = EMPTY_FTP_FILE_MAP;
-            }
-            else
-            {
-                children = new TreeMap<String, FTPFile>();
-
-                // Remove '.' and '..' elements
-                for (int i = 0; i < tmpChildren.length; i++)
-                {
-                    final FTPFile child = tmpChildren[i];
-                    if (child == null)
-                    {
-                        if (log.isDebugEnabled())
-                        {
-                            log.debug(Messages.getString("vfs.provider.ftp/invalid-directory-entry.debug",
-                                    Integer.valueOf(i), relPath));
-                        }
-                        continue;
-                    }
-                    if (!".".equals(child.getName())
-                        && !"..".equals(child.getName()))
-                    {
-                        children.put(child.getName(), child);
-                    }
-                }
-            }
-        }
-        finally
-        {
-            getAbstractFileSystem().putClient(client);
-        }
-    }
-
-    /**
-     * Attaches this file object to its file resource.
-     */
-    @Override
-    protected void doAttach()
-        throws IOException
-    {
-        // Get the parent folder to find the info for this file
-        // VFS-210 getInfo(false);
-    }
-
-    /**
-     * Fetches the info for this file.
-     */
-    private void getInfo(final boolean flush) throws IOException
-    {
-        final FtpFileObject parent = (FtpFileObject) FileObjectUtils.getAbstractFileObject(getParent());
-        FTPFile newFileInfo;
-        if (parent != null)
-        {
-            newFileInfo = parent.getChildFile(UriParser.decode(getName().getBaseName()), flush);
-        }
-        else
-        {
-            // Assume the root is a directory and exists
-            newFileInfo = new FTPFile();
-            newFileInfo.setType(FTPFile.DIRECTORY_TYPE);
-        }
-
-        if (newFileInfo == null)
-        {
-            this.fileInfo = UNKNOWN;
-        }
-        else
-        {
-            this.fileInfo = newFileInfo;
-        }
-    }
-
-    /**
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void refresh() throws FileSystemException
-    {
-        if (!inRefresh)
-        {
-            try
-            {
-                inRefresh = true;
-                super.refresh();
-
-                synchronized (getFileSystem())
-                {
-                    this.fileInfo = null;
-                }
-
-                /* VFS-210
-                try
-                {
-                    // this will tell the parent to recreate its children collection
-                    getInfo(true);
-                }
-                catch (IOException e)
-                {
-                    throw new FileSystemException(e);
-                }
-                */
-            }
-            finally
-            {
-                inRefresh = false;
-            }
-        }
-    }
-
-    /**
-     * Detaches this file object from its file resource.
-     */
-    @Override
-    protected void doDetach()
-    {
-        synchronized (getFileSystem())
-        {
-            this.fileInfo = null;
-            children = null;
-        }
-    }
-
-    /**
-     * Called when the children of this file change.
-     */
-    @Override
-    protected void onChildrenChanged(final FileName child, final FileType newType)
-    {
-        if (children != null && newType.equals(FileType.IMAGINARY))
-        {
-            try
-            {
-                children.remove(UriParser.decode(child.getBaseName()));
-            }
-            catch (final FileSystemException e)
-            {
-                throw new RuntimeException(e.getMessage());
-            }
-        }
-        else
-        {
-            // if child was added we have to rescan the children
-            // TODO - get rid of this
-            children = null;
-        }
-    }
-
-    /**
-     * Called when the type or content of this file changes.
-     */
-    @Override
-    protected void onChange() throws IOException
-    {
-        children = null;
-
-        if (getType().equals(FileType.IMAGINARY))
-        {
-            // file is deleted, avoid server lookup
-            synchronized (getFileSystem())
-            {
-                this.fileInfo = UNKNOWN;
-            }
-            return;
-        }
-
-        getInfo(true);
-    }
-
-    /**
-     * Determines the type of the file, returns null if the file does not
-     * exist.
-     */
-    @Override
-    protected FileType doGetType()
-        throws Exception
-    {
-        // VFS-210
-        synchronized (getFileSystem())
-        {
-            if (this.fileInfo == null)
-            {
-                getInfo(false);
-            }
-
-            if (this.fileInfo == UNKNOWN)
-            {
-                return FileType.IMAGINARY;
-            }
-            else if (this.fileInfo.isDirectory())
-            {
-                return FileType.FOLDER;
-            }
-            else if (this.fileInfo.isFile())
-            {
-                return FileType.FILE;
-            }
-            else if (this.fileInfo.isSymbolicLink())
-            {
-                final FileObject linkDest = getLinkDestination();
-                // VFS-437: We need to check if the symbolic link links back to the symbolic link itself
-                if (this.isCircular(linkDest))
-                {
-                    // If the symbolic link links back to itself, treat it as an imaginary file to prevent following
-                    // this link. If the user tries to access the link as a file or directory, the user will end up with
-                    // a FileSystemException warning that the file cannot be accessed. This is to prevent the infinite
-                    // call back to doGetType() to prevent the StackOverFlow
-                    return FileType.IMAGINARY;
-                }
-                return linkDest.getType();
-
-            }
-        }
-        throw new FileSystemException("vfs.provider.ftp/get-type.error", getName());
-    }
-
-    private FileObject getLinkDestination() throws FileSystemException
-    {
-        if (linkDestination == null)
-        {
-            final String path;
-            synchronized (getFileSystem())
-            {
-                path = this.fileInfo.getLink();
-            }
-            FileName relativeTo = getName().getParent();
-            if (relativeTo == null)
-            {
-                relativeTo = getName();
-            }
-            final FileName linkDestinationName = getFileSystem().getFileSystemManager().resolveName(relativeTo, path);
-            linkDestination = getFileSystem().resolveFile(linkDestinationName);
-        }
-
-        return linkDestination;
-    }
-
-    @Override
-    protected FileObject[] doListChildrenResolved() throws Exception
-    {
-        synchronized (getFileSystem())
-        {
-            if (this.fileInfo != null && this.fileInfo.isSymbolicLink())
-            {
-                final FileObject linkDest = getLinkDestination();
-                // VFS-437: Try to avoid a recursion loop.
-                if (this.isCircular(linkDest))
-                {
-                    return null;
-                }
-                return linkDest.getChildren();
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns the file's list of children.
-     *
-     * @return The list of children
-     * @throws FileSystemException If there was a problem listing children
-     * @see AbstractFileObject#getChildren()
-     * @since 2.0
-     */
-    @Override
-    public FileObject[] getChildren() throws FileSystemException
-    {
-        try
-        {
-            if (doGetType() != FileType.FOLDER)
-            {
-                throw new FileNotFolderException(getName());
-            }
-        }
-        catch (final Exception ex)
-        {
-            throw new FileNotFolderException(getName(), ex);
-        }
-
-        try
-        {
-            /* Wrap our parent implementation, noting that we're refreshing so
-             * that we don't refresh() ourselves and each of our parents for
-             * each children. Note that refresh() will list children. Meaning,
-             * if if this file has C children, P parents, there will be (C * P)
-             * listings made with (C * (P + 1)) refreshes, when there should
-             * really only be 1 listing and C refreshes. */
-
-            this.inRefresh = true;
-            return super.getChildren();
-        }
-        finally
-        {
-            this.inRefresh = false;
-        }
-    }
-
-    /**
-     * Lists the children of the file.
-     */
-    @Override
-    protected String[] doListChildren()
-        throws Exception
-    {
-        // List the children of this file
-        doGetChildren();
-
-        // VFS-210
-        if (children == null)
-        {
-            return null;
-        }
-
-        // TODO - get rid of this children stuff
-        final String[] childNames = new String[children.size()];
-        int childNum = -1;
-        final Iterator<FTPFile> iterChildren = children.values().iterator();
-        while (iterChildren.hasNext())
-        {
-            childNum++;
-            final FTPFile child = iterChildren.next();
-            childNames[childNum] = child.getName();
-        }
-
-        return UriParser.encode(childNames);
-    }
-
-    /**
-     * Deletes the file.
-     */
-    @Override
-    protected void doDelete() throws Exception
-    {
-        synchronized (getFileSystem())
-        {
-            final boolean ok;
-            final FtpClient ftpClient = getAbstractFileSystem().getClient();
-            try
-            {
-                if (this.fileInfo.isDirectory())
-                {
-                    ok = ftpClient.removeDirectory(relPath);
-                }
-                else
-                {
-                    ok = ftpClient.deleteFile(relPath);
-                }
-            }
-            finally
-            {
-                getAbstractFileSystem().putClient(ftpClient);
-            }
-
-            if (!ok)
-            {
-                throw new FileSystemException("vfs.provider.ftp/delete-file.error", getName());
-            }
-            this.fileInfo = null;
-            children = EMPTY_FTP_FILE_MAP;
-        }
-    }
-
-    /**
-     * Renames the file
-     */
-    @Override
-    protected void doRename(final FileObject newFile) throws Exception
-    {
-        synchronized (getFileSystem())
-        {
-            final boolean ok;
-            final FtpClient ftpClient = getAbstractFileSystem().getClient();
-            try
-            {
-                final String oldName = getName().getPath();
-                final String newName = newFile.getName().getPath();
-                ok = ftpClient.rename(oldName, newName);
-            }
-            finally
-            {
-                getAbstractFileSystem().putClient(ftpClient);
-            }
-
-            if (!ok)
-            {
-                throw new FileSystemException("vfs.provider.ftp/rename-file.error",
-                        getName().toString(), newFile);
-            }
-            this.fileInfo = null;
-            children = EMPTY_FTP_FILE_MAP;
-        }
-    }
-
-    /**
-     * Creates this file as a folder.
-     */
-    @Override
-    protected void doCreateFolder()
-        throws Exception
-    {
-        final boolean ok;
-        final FtpClient client = getAbstractFileSystem().getClient();
-        try
-        {
-            ok = client.makeDirectory(relPath);
-        }
-        finally
-        {
-            getAbstractFileSystem().putClient(client);
-        }
-
-        if (!ok)
-        {
-            throw new FileSystemException("vfs.provider.ftp/create-folder.error", getName());
-        }
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        synchronized (getFileSystem())
-        {
-            if (this.fileInfo.isSymbolicLink())
-            {
-                final FileObject linkDest = getLinkDestination();
-                // VFS-437: Try to avoid a recursion loop.
-                if (this.isCircular(linkDest))
-                {
-                    return this.fileInfo.getSize();
-                }
-                return linkDest.getContent().getSize();
-            }
-            else
-            {
-                return this.fileInfo.getSize();
-            }
-        }
-    }
-
-    /**
-     * get the last modified time on an ftp file
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetLastModifiedTime()
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        synchronized (getFileSystem())
-        {
-            if (this.fileInfo.isSymbolicLink())
-            {
-                final FileObject linkDest = getLinkDestination();
-                // VFS-437: Try to avoid a recursion loop.
-                if (this.isCircular(linkDest))
-                {
-                    return getTimestamp();
-                }
-                return linkDest.getContent().getLastModifiedTime();
-            }
-            else
-            {
-                return getTimestamp();
-            }
-        }
-    }
-
-    /**
-     * Creates an input stream to read the file content from.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        final FtpClient client = getAbstractFileSystem().getClient();
-        try
-        {
-            final InputStream instr = client.retrieveFileStream(relPath);
-            // VFS-210
-            if (instr == null)
-            {
-                throw new FileNotFoundException(getName().toString());
-            }
-            return new FtpInputStream(client, instr);
-        }
-        catch (final Exception e)
-        {
-            getAbstractFileSystem().putClient(client);
-            throw e;
-        }
-    }
-
-    @Override
-    protected RandomAccessContent doGetRandomAccessContent(final RandomAccessMode mode) throws Exception
-    {
-        return new FtpRandomAccessContent(this, mode);
-    }
-
-    /**
-     * Creates an output stream to write the file content to.
-     */
-    @Override
-    protected OutputStream doGetOutputStream(final boolean bAppend)
-        throws Exception
-    {
-        final FtpClient client = getAbstractFileSystem().getClient();
-        try
-        {
-            OutputStream out = null;
-            if (bAppend)
-            {
-                out = client.appendFileStream(relPath);
-            }
-            else
-            {
-                out = client.storeFileStream(relPath);
-            }
-
-            if (out == null)
-            {
-                throw new FileSystemException("vfs.provider.ftp/output-error.debug",
-                        this.getName(),
-                        client.getReplyString());
-            }
-
-            return new FtpOutputStream(client, out);
-        }
-        catch (final Exception e)
-        {
-            getAbstractFileSystem().putClient(client);
-            throw e;
-        }
-    }
-
-    String getRelPath()
-    {
-        return relPath;
-    }
-
-    private long getTimestamp()
-    {
-        final Calendar timestamp = this.fileInfo.getTimestamp();
-        return timestamp == null ? 0L : timestamp.getTime().getTime();
-    }
-
-    /**
-     * This is an over simplistic implementation for VFS-437.
-     */
-    private boolean isCircular(final FileObject linkDest) throws FileSystemException
-    {
-        return linkDest.getName().getPathDecoded().equals(this.getName().getPathDecoded());
-    }
-
-    FtpInputStream getInputStream(final long filePointer) throws IOException
-    {
-        final FtpClient client = getAbstractFileSystem().getClient();
-        try
-        {
-            final InputStream instr = client.retrieveFileStream(relPath, filePointer);
-            if (instr == null)
-            {
-                throw new FileSystemException("vfs.provider.ftp/input-error.debug",
-                        this.getName(),
-                        client.getReplyString());
-            }
-            return new FtpInputStream(client, instr);
-        }
-        catch (final IOException e)
-        {
-            getAbstractFileSystem().putClient(client);
-            throw e;
-        }
-    }
-
-    /**
-     * An InputStream that monitors for end-of-file.
-     */
-    class FtpInputStream
-        extends MonitorInputStream
-    {
-        private final FtpClient client;
-
-        public FtpInputStream(final FtpClient client, final InputStream in)
-        {
-            super(in);
-            this.client = client;
-        }
-
-        void abort() throws IOException
-        {
-            client.abort();
-            close();
-        }
-
-        /**
-         * Called after the stream has been closed.
-         */
-        @Override
-        protected void onClose() throws IOException
-        {
-            final boolean ok;
-            try
-            {
-                ok = client.completePendingCommand();
-            }
-            finally
-            {
-                getAbstractFileSystem().putClient(client);
-            }
-
-            if (!ok)
-            {
-                throw new FileSystemException("vfs.provider.ftp/finish-get.error", getName());
-            }
-        }
-    }
-
-    /**
-     * An OutputStream that monitors for end-of-file.
-     */
-    private class FtpOutputStream
-        extends MonitorOutputStream
-    {
-        private final FtpClient client;
-
-        public FtpOutputStream(final FtpClient client, final OutputStream outstr)
-        {
-            super(outstr);
-            this.client = client;
-        }
-
-        /**
-         * Called after this stream is closed.
-         */
-        @Override
-        protected void onClose() throws IOException
-        {
-            final boolean ok;
-            try
-            {
-                ok = client.completePendingCommand();
-            }
-            finally
-            {
-                getAbstractFileSystem().putClient(client);
-            }
-
-            if (!ok)
-            {
-                throw new FileSystemException("vfs.provider.ftp/finish-put.error", getName());
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileProvider.java
deleted file mode 100644
index 043e7ba..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileProvider.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.commons.vfs2.provider.ftp;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider;
-import org.apache.commons.vfs2.provider.GenericFileName;
-
-/**
- * A provider for FTP file systems.
- */
-public class FtpFileProvider
-    extends AbstractOriginatingFileProvider
-{
-    /**
-     * File Entry Parser.
-     */
-    public static final String ATTR_FILE_ENTRY_PARSER = "FEP";
-
-    /**
-     * Authenticator types.
-     */
-    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = new UserAuthenticationData.Type[]
-        {
-            UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD
-        };
-
-    static final Collection<Capability> capabilities = Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-    {
-        Capability.CREATE,
-        Capability.DELETE,
-        Capability.RENAME,
-        Capability.GET_TYPE,
-        Capability.LIST_CHILDREN,
-        Capability.READ_CONTENT,
-        Capability.GET_LAST_MODIFIED,
-        Capability.URI,
-        Capability.WRITE_CONTENT,
-        Capability.APPEND_CONTENT,
-        Capability.RANDOM_ACCESS_READ,
-    }));
-
-    /**
-     * Constructs a new provider.
-     */
-    public FtpFileProvider()
-    {
-        super();
-        setFileNameParser(FtpFileNameParser.getInstance());
-    }
-
-    /**
-     * Creates the filesystem.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        // Create the file system
-        final GenericFileName rootName = (GenericFileName) name;
-
-        final FTPClientWrapper ftpClient = new FTPClientWrapper(rootName, fileSystemOptions);
-        /*
-        FTPClient ftpClient = FtpClientFactory.createConnection(rootName.getHostName(),
-            rootName.getPort(),
-            rootName.getUserName(),
-            rootName.getPassword(),
-            rootName.getPath(),
-            fileSystemOptions);
-        */
-
-        return new FtpFileSystem(rootName, ftpClient, fileSystemOptions);
-    }
-
-    @Override
-    public FileSystemConfigBuilder getConfigBuilder()
-    {
-        return FtpFileSystemConfigBuilder.getInstance();
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileSystem.java
deleted file mode 100644
index 18cdeec..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileSystem.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.commons.vfs2.provider.ftp;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.VfsLog;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.provider.GenericFileName;
-
-/**
- * An FTP file system.
- */
-public class FtpFileSystem extends AbstractFileSystem
-{
-    private static final Log LOG = LogFactory.getLog(FtpFileSystem.class);
-
-//    private final String hostname;
-//    private final int port;
-//    private final String username;
-//    private final String password;
-
-    // An idle client
-    private final AtomicReference<FtpClient> idleClient = new AtomicReference<FtpClient>();
-
-    /**
-     * @param rootName The root of the file system.
-     * @param ftpClient The FtpClient.
-     * @param fileSystemOptions The FileSystemOptions.
-     * @since 2.0 (was protected)
-     * */
-    public FtpFileSystem(final GenericFileName rootName, final FtpClient ftpClient,
-                         final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, null, fileSystemOptions);
-        // hostname = rootName.getHostName();
-        // port = rootName.getPort();
-
-        idleClient.set(ftpClient);
-    }
-
-    @Override
-    protected void doCloseCommunicationLink()
-    {
-        final FtpClient idle = idleClient.getAndSet(null);
-        // Clean up the connection
-        if (idle != null)
-        {
-            closeConnection(idle);
-        }
-    }
-
-    /**
-     * Adds the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(FtpFileProvider.capabilities);
-    }
-
-    /**
-     * Cleans up the connection to the server.
-     * @param client The FtpClient.
-     */
-    private void closeConnection(final FtpClient client)
-    {
-        try
-        {
-            // Clean up
-            if (client.isConnected())
-            {
-                client.disconnect();
-            }
-        }
-        catch (final IOException e)
-        {
-            // getLogger().warn("vfs.provider.ftp/close-connection.error", e);
-            VfsLog.warn(getLogger(), LOG, "vfs.provider.ftp/close-connection.error", e);
-        }
-    }
-
-    /**
-     * Creates an FTP client to use.
-     * @return An FTPCleint.
-     * @throws FileSystemException if an error occurs.
-     */
-    public FtpClient getClient() throws FileSystemException
-    {
-        FtpClient client = idleClient.getAndSet(null);
-
-        if (client == null || !client.isConnected())
-        {
-            client = createWrapper();
-        }
-
-        return client;
-    }
-
-    /**
-     * Get the wrapper to access this file system.
-     * @return new instance.
-     * @throws FileSystemException if any error occurs.
-     * @since 2.1
-     */
-    protected FTPClientWrapper createWrapper() throws FileSystemException
-    {
-        return new FTPClientWrapper((GenericFileName) getRoot().getName(), getFileSystemOptions());
-    }
-
-    /**
-     * Returns an FTP client after use.
-     * @param client The FTPClient.
-     */
-    public void putClient(final FtpClient client)
-    {
-        // Save client for reuse if none is idle.
-        if (!idleClient.compareAndSet(null, client))
-        {
-            // An idle client is already present so close the connection.
-            closeConnection(client);
-        }
-    }
-
-
-    /**
-     * Creates a file object.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name)
-        throws FileSystemException
-    {
-        return new FtpFileObject(name, this, getRootName());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileSystemConfigBuilder.java
deleted file mode 100644
index 2066bdc..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileSystemConfigBuilder.java
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.ftp;
-
-import java.net.Proxy;
-
-import org.apache.commons.net.ftp.parser.FTPFileEntryParserFactory;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * The config builder for various ftp configuration options.
- */
-public class FtpFileSystemConfigBuilder extends FileSystemConfigBuilder
-{
-    private static final String _PREFIX = FtpFileSystemConfigBuilder.class.getName();
-
-    private static final FtpFileSystemConfigBuilder BUILDER = new FtpFileSystemConfigBuilder();
-
-    private static final String CONNECT_TIMEOUT = _PREFIX + ".CONNECT_TIMEOUT";
-    private static final String DATA_TIMEOUT = _PREFIX + ".DATA_TIMEOUT";
-    private static final String DEFAULT_DATE_FORMAT = _PREFIX + ".DEFAULT_DATE_FORMAT";
-    private static final String ENCODING = _PREFIX + ".ENCODING";
-    private static final String FACTORY_KEY = FTPFileEntryParserFactory.class.getName() + ".KEY";
-    private static final String FILE_TYPE = _PREFIX + ".FILE_TYPE";
-    private static final String PASSIVE_MODE = _PREFIX + ".PASSIVE";
-    private static final String PROXY = _PREFIX + ".PROXY";
-    private static final String RECENT_DATE_FORMAT = _PREFIX + ".RECENT_DATE_FORMAT";
-    private static final String REMOTE_VERIFICATION = _PREFIX + ".REMOTE_VERIFICATION";
-    private static final String SERVER_LANGUAGE_CODE = _PREFIX + ".SERVER_LANGUAGE_CODE";
-    private static final String SERVER_TIME_ZONE_ID = _PREFIX + ".SERVER_TIME_ZONE_ID";
-    private static final String SHORT_MONTH_NAMES = _PREFIX + ".SHORT_MONTH_NAMES";
-    private static final String SO_TIMEOUT = _PREFIX + ".SO_TIMEOUT";
-    private static final String USER_DIR_IS_ROOT = _PREFIX + ".USER_DIR_IS_ROOT";
-
-    private FtpFileSystemConfigBuilder()
-    {
-        super("ftp.");
-    }
-
-    /**
-     * Create new config builder with specified prefix string.
-     * @param prefix prefix string to use for parameters of this config builder.
-     * @since 2.1
-     */
-    protected FtpFileSystemConfigBuilder(final String prefix)
-    {
-        super(prefix);
-    }
-
-    /**
-     * Gets the singleton instance.
-     *
-     * @return the singleton instance.
-     */
-    public static FtpFileSystemConfigBuilder getInstance()
-    {
-        return BUILDER;
-    }
-
-    @Override
-    protected Class<? extends FileSystem> getConfigClass()
-    {
-        return FtpFileSystem.class;
-    }
-
-    /**
-     * Gets the timeout in milliseconds to use for the socket connection.
-     *
-     * @param opts The FileSystemOptions.
-     * @return The timeout in milliseconds to use for the socket connection.
-     * @since 2.1
-     */
-    public Integer getConnectTimeout(final FileSystemOptions opts)
-    {
-        return getInteger(opts, CONNECT_TIMEOUT);
-    }
-
-    /**
-     * @param opts The FileSystemOptions.
-     * @return The encoding.
-     * @since 2.0
-     * */
-    public String getControlEncoding(final FileSystemOptions opts)
-    {
-        return getString(opts, ENCODING);
-    }
-
-    /**
-     * @param opts The FileSystemOptions.
-     * @return The timeout for opening the data channel in milliseconds.
-     * @see #setDataTimeout
-     */
-    public Integer getDataTimeout(final FileSystemOptions opts)
-    {
-        return getInteger(opts, DATA_TIMEOUT);
-    }
-
-    /**
-     * Get the default date format used by the server. See {@link org.apache.commons.net.ftp.FTPClientConfig}
-     * for details and examples.
-     *
-     * @param opts The FileSystemOptions
-     * @return The default date format.
-     */
-    public String getDefaultDateFormat(final FileSystemOptions opts)
-    {
-        return getString(opts, DEFAULT_DATE_FORMAT);
-    }
-
-    /**
-     * @param opts The FileSystemOptions.
-     * @see #setEntryParser
-     * @return the key to the EntryParser.
-     */
-    public String getEntryParser(final FileSystemOptions opts)
-    {
-        return getString(opts, FACTORY_KEY);
-    }
-
-    /**
-     * @param opts The FlleSystemOptions.
-     * @see #setEntryParserFactory
-     * @return An FTPFileEntryParserFactory.
-     */
-    public FTPFileEntryParserFactory getEntryParserFactory(final FileSystemOptions opts)
-    {
-        return (FTPFileEntryParserFactory) getParam(opts, FTPFileEntryParserFactory.class.getName());
-    }
-
-    /**
-     * Gets the file type parameter.
-     *
-     * @param opts The FileSystemOptions.
-     * @return A FtpFileType
-     * @since 2.1
-     */
-    public FtpFileType getFileType(final FileSystemOptions opts)
-    {
-        return getEnum(FtpFileType.class, opts, FILE_TYPE);
-    }
-
-    /**
-     * @param opts The FileSystemOptions.
-     * @return true if passive mode is set.
-     * @see #setPassiveMode
-     */
-    public Boolean getPassiveMode(final FileSystemOptions opts)
-    {
-        return getBoolean(opts, PASSIVE_MODE);
-    }
-
-    /**
-     * Gets the Proxy.
-     *
-     * @param opts The FileSystemOptions.
-     * @return the Proxy
-     * @since 2.1
-     */
-    public Proxy getProxy(final FileSystemOptions opts)
-    {
-        return (Proxy) this.getParam(opts, PROXY);
-    }
-
-    /**
-     * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples.
-     *
-     * @param opts The FileSystemOptions.
-     * @return The recent date format.
-     */
-    public String getRecentDateFormat(final FileSystemOptions opts)
-    {
-        return getString(opts, RECENT_DATE_FORMAT);
-    }
-
-    /**
-     * Gets whether to use remote verification.
-     *
-     * @param opts The FileSystemOptions.
-     * @return True if remote verification should be done.
-     */
-    public Boolean getRemoteVerification(FileSystemOptions opts)
-    {
-        return getBoolean(opts, REMOTE_VERIFICATION);
-    }
-
-    /**
-     * Get the language code used by the server. See {@link org.apache.commons.net.ftp.FTPClientConfig}
-     * for details and examples.
-     *
-     * @param opts The FilesystemOptions.
-     * @return The language code of the server.
-     */
-    public String getServerLanguageCode(final FileSystemOptions opts)
-    {
-        return getString(opts, SERVER_LANGUAGE_CODE);
-    }
-
-    /**
-     * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples.
-     *
-     * @param opts The FileSystemOptions.
-     * @return The server timezone id.
-     */
-    public String getServerTimeZoneId(final FileSystemOptions opts)
-    {
-        return getString(opts, SERVER_TIME_ZONE_ID);
-    }
-
-    /**
-     * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples.
-     *
-     * @param opts The FileSystemOptions.
-     * @return An array of short month names.
-     */
-    public String[] getShortMonthNames(final FileSystemOptions opts)
-    {
-        return (String[]) getParam(opts, SHORT_MONTH_NAMES);
-    }
-
-    /**
-     * @param opts The FileSystem options.
-     * @return The timeout value in milliseconds.
-     * @see #getDataTimeout
-     * @since 2.0
-     */
-    public Integer getSoTimeout(final FileSystemOptions opts)
-    {
-        return getInteger(opts, SO_TIMEOUT);
-    }
-
-    /**
-     * Returns {@link Boolean#TRUE} if VFS should treat the user directory as the root directory. Defaults to
-     * <code>Boolean.TRUE</code> if the method {@link #setUserDirIsRoot(FileSystemOptions, boolean)} has not been
-     * invoked.
-     *
-     * @param opts
-     *            The FileSystemOptions.
-     * @return <code>Boolean.TRUE</code> if VFS treats the user directory as the root directory.
-     * @see #setUserDirIsRoot
-     */
-    public Boolean getUserDirIsRoot(final FileSystemOptions opts)
-    {
-        return getBoolean(opts, USER_DIR_IS_ROOT, Boolean.TRUE);
-    }
-
-    /**
-     * Sets the timeout for the initial control connection.
-     * <p>
-     * If you set the connectTimeout to {@code null} no connectTimeout will be set.
-     *
-     * @param opts The FileSystemOptions.
-     * @param connectTimeout the timeout value in milliseconds
-     * @since 2.1
-     */
-    public void setConnectTimeout(final FileSystemOptions opts, final Integer connectTimeout)
-    {
-        setParam(opts, CONNECT_TIMEOUT, connectTimeout);
-    }
-
-    /**
-     * See {@link org.apache.commons.net.ftp.FTP#setControlEncoding} for details and examples.
-     *
-     * @param opts The FileSystemOptions.
-     * @param encoding the encoding to use
-     * @since 2.0
-     */
-    public void setControlEncoding(final FileSystemOptions opts, final String encoding)
-    {
-        setParam(opts, ENCODING, encoding);
-    }
-
-    /**
-     * Set the data timeout for the ftp client.
-     * <p>
-     * If you set the {@code dataTimeout} to {@code null}, no dataTimeout will be set on the
-     * ftp client.
-     *
-     * @param opts The FileSystemOptions.
-     * @param dataTimeout The timeout value.
-     */
-    public void setDataTimeout(final FileSystemOptions opts, final Integer dataTimeout)
-    {
-        setParam(opts, DATA_TIMEOUT, dataTimeout);
-    }
-
-    /**
-     * Set the default date format used by the server. See {@link org.apache.commons.net.ftp.FTPClientConfig}
-     * for details and examples.
-     *
-     * @param opts The FileSystemOptions.
-     * @param defaultDateFormat The default date format.
-     */
-    public void setDefaultDateFormat(final FileSystemOptions opts, final String defaultDateFormat)
-    {
-        setParam(opts, DEFAULT_DATE_FORMAT, defaultDateFormat);
-    }
-
-    /**
-     * Set the FQCN of your FileEntryParser used to parse the directory listing from your server.
-     * <p>
-     * If you do not use the default commons-net FTPFileEntryParserFactory e.g. by using
-     * {@link #setEntryParserFactory} this is the "key" parameter passed as argument into your
-     * custom factory.
-     *
-     * @param opts The FileSystemOptions.
-     * @param key The key.
-     */
-    public void setEntryParser(final FileSystemOptions opts, final String key)
-    {
-        setParam(opts, FACTORY_KEY, key);
-    }
-
-    /**
-     * FTPFileEntryParserFactory which will be used for ftp-entry parsing.
-     *
-     * @param opts The FileSystemOptions.
-     * @param factory instance of your factory
-     */
-    public void setEntryParserFactory(final FileSystemOptions opts, final FTPFileEntryParserFactory factory)
-    {
-        setParam(opts, FTPFileEntryParserFactory.class.getName(), factory);
-    }
-
-    /**
-     * Sets the file type parameter.
-     *
-     * @param opts The FileSystemOptions.
-     * @param ftpFileType A FtpFileType
-     * @since 2.1
-     */
-    public void setFileType(final FileSystemOptions opts, final FtpFileType ftpFileType)
-    {
-        setParam(opts, FILE_TYPE, ftpFileType);
-    }
-
-    /**
-     * Enter into passive mode.
-     *
-     * @param opts The FileSystemOptions.
-     * @param passiveMode true if passive mode should be used.
-     */
-    public void setPassiveMode(final FileSystemOptions opts, final boolean passiveMode)
-    {
-        setParam(opts, PASSIVE_MODE, passiveMode ? Boolean.TRUE : Boolean.FALSE);
-    }
-
-    /**
-     * Sets the Proxy.
-     * <p>
-     * You might need to make sure that {@link #setPassiveMode(FileSystemOptions, boolean) passive mode}
-     * is activated.
-     *
-     * @param opts the FileSystem options.
-     * @param proxy the Proxy
-     * @since 2.1
-     */
-    public void setProxy(final FileSystemOptions opts, Proxy proxy)
-    {
-        setParam(opts, PROXY, proxy);
-    }
-
-    /**
-     * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples.
-     *
-     * @param opts The FileSystemOptions.
-     * @param recentDateFormat The recent date format.
-     */
-    public void setRecentDateFormat(final FileSystemOptions opts, final String recentDateFormat)
-    {
-        setParam(opts, RECENT_DATE_FORMAT, recentDateFormat);
-    }
-
-    /**
-     * Sets whether to use remote verification.
-     *
-     * @param opts The FileSystemOptions.
-     * @param remoteVerification True if verification should be done.
-     */
-    public void setRemoteVerification(FileSystemOptions opts, boolean remoteVerification)
-    {
-        setParam(opts, REMOTE_VERIFICATION, remoteVerification);
-    }
-
-    /**
-     * Set the language code used by the server. See {@link org.apache.commons.net.ftp.FTPClientConfig}
-     * for details and examples.
-     *
-     * @param opts The FileSystemOptions.
-     * @param serverLanguageCode The servers language code.
-     */
-    public void setServerLanguageCode(final FileSystemOptions opts, final String serverLanguageCode)
-    {
-        setParam(opts, SERVER_LANGUAGE_CODE, serverLanguageCode);
-    }
-
-    /**
-     * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples.
-     *
-     * @param opts The FileSystemOptions.
-     * @param serverTimeZoneId The server timezone id.
-     */
-    public void setServerTimeZoneId(final FileSystemOptions opts, final String serverTimeZoneId)
-    {
-        setParam(opts, SERVER_TIME_ZONE_ID, serverTimeZoneId);
-    }
-
-    /**
-     * See {@link org.apache.commons.net.ftp.FTPClientConfig} for details and examples.
-     *
-     * @param opts The FileSystemOptions.
-     * @param shortMonthNames an array of short month name Strings.
-     */
-    public void setShortMonthNames(final FileSystemOptions opts, final String[] shortMonthNames)
-    {
-        String[] clone = null;
-        if (shortMonthNames != null)
-        {
-            clone = new String[shortMonthNames.length];
-            System.arraycopy(shortMonthNames, 0, clone, 0, shortMonthNames.length);
-        }
-
-        setParam(opts, SHORT_MONTH_NAMES, clone);
-    }
-
-    /**
-     * Sets the socket timeout for the FTP client.
-     * <p>
-     * If you set the {@code soTimeout} to {@code null}, no socket timeout will be set on the
-     * ftp client.
-     *
-     * @param opts The FileSystem options.
-     * @param soTimeout The timeout value in milliseconds.
-     * @since 2.0
-     */
-    public void setSoTimeout(final FileSystemOptions opts, final Integer soTimeout)
-    {
-        setParam(opts, SO_TIMEOUT, soTimeout);
-    }
-
-    /**
-     * Use user directory as root (do not change to fs root).
-     *
-     * @param opts The FileSystemOptions.
-     * @param userDirIsRoot true if the user directory should be treated as the root.
-     */
-    public void setUserDirIsRoot(final FileSystemOptions opts, final boolean userDirIsRoot)
-    {
-        setParam(opts, USER_DIR_IS_ROOT, userDirIsRoot ? Boolean.TRUE : Boolean.FALSE);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileType.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileType.java
deleted file mode 100644
index 080e3b6..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpFileType.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.commons.vfs2.provider.ftp;
-
-import org.apache.commons.net.ftp.FTP;
-
-/**
- * The FTP file types.
- *
- * @since 2.1
- */
-public enum FtpFileType
-{
-    /**
-     * The ASCII file type.
-     */
-    ASCII(FTP.ASCII_FILE_TYPE),
-
-    /**
-     * The binary file type.
-     */
-    BINARY(FTP.BINARY_FILE_TYPE),
-
-    /**
-     * The local file type.
-     */
-    LOCAL(FTP.LOCAL_FILE_TYPE),
-
-    /**
-     * The EBCDIC file type.
-     */
-    EBCDIC(FTP.EBCDIC_FILE_TYPE);
-
-    /**
-     * The Apache Commons Net FTP file type.
-     */
-    private final int value;
-
-    /**
-     * Constructs a file type.
-     *
-     * @param fileType
-     *            The Apache Commons Net FTP file type.
-     */
-    private FtpFileType(final int fileType)
-    {
-        this.value = fileType;
-    }
-
-    /**
-     * Gets the Apache Commons Net FTP file type.
-     *
-     * @return The Apache Commons Net FTP file type.
-     */
-    int getValue()
-    {
-        return this.value;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpRandomAccessContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpRandomAccessContent.java
deleted file mode 100644
index 6fc4db6..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpRandomAccessContent.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.commons.vfs2.provider.ftp;
-
-import java.io.DataInputStream;
-import java.io.FilterInputStream;
-import java.io.IOException;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.AbstractRandomAccessStreamContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * Implements FTP stream-based random access.
- */
-class FtpRandomAccessContent extends AbstractRandomAccessStreamContent
-{
-    protected long filePointer;
-
-    private final FtpFileObject fileObject;
-    private DataInputStream dis;
-    private FtpFileObject.FtpInputStream mis;
-
-    FtpRandomAccessContent(final FtpFileObject fileObject, final RandomAccessMode mode)
-    {
-        super(mode);
-
-        this.fileObject = fileObject;
-        // fileSystem = (FtpFileSystem) this.fileObject.getFileSystem();
-    }
-
-    @Override
-    public long getFilePointer() throws IOException
-    {
-        return filePointer;
-    }
-
-    @Override
-    public void seek(final long pos) throws IOException
-    {
-        if (pos == filePointer)
-        {
-            // no change
-            return;
-        }
-
-        if (pos < 0)
-        {
-            throw new FileSystemException("vfs.provider/random-access-invalid-position.error",
-                    Long.valueOf(pos));
-        }
-        if (dis != null)
-        {
-            close();
-        }
-
-        filePointer = pos;
-    }
-
-    @Override
-    protected DataInputStream getDataInputStream() throws IOException
-    {
-        if (dis != null)
-        {
-            return dis;
-        }
-
-        // FtpClient client = fileSystem.getClient();
-        mis = fileObject.getInputStream(filePointer);
-        dis = new DataInputStream(new FilterInputStream(mis)
-        {
-            @Override
-            public int read() throws IOException
-            {
-                final int ret = super.read();
-                if (ret > -1)
-                {
-                    filePointer++;
-                }
-                return ret;
-            }
-
-            @Override
-            public int read(final byte[] b) throws IOException
-            {
-                final int ret = super.read(b);
-                if (ret > -1)
-                {
-                    filePointer += ret;
-                }
-                return ret;
-            }
-
-            @Override
-            public int read(final byte[] b, final int off, final int len) throws IOException
-            {
-                final int ret = super.read(b, off, len);
-                if (ret > -1)
-                {
-                    filePointer += ret;
-                }
-                return ret;
-            }
-
-            @Override
-            public void close() throws IOException
-            {
-                FtpRandomAccessContent.this.close();
-            }
-        });
-
-        return dis;
-    }
-
-
-    @Override
-    public void close() throws IOException
-    {
-        if (dis != null)
-        {
-            mis.abort();
-
-            // this is to avoid recursive close
-            final DataInputStream oldDis = dis;
-            dis = null;
-            oldDis.close();
-            mis = null;
-        }
-    }
-
-    @Override
-    public long length() throws IOException
-    {
-        return fileObject.getContent().getSize();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/package.html
deleted file mode 100644
index 6035477..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftp/package.html
+++ /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.
--->
-<body>
-<p>The FTP File Provider.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsClientFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsClientFactory.java
deleted file mode 100644
index 4662a50..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsClientFactory.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.commons.vfs2.provider.ftps;
-
-
-import java.io.IOException;
-
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.TrustManager;
-
-import org.apache.commons.net.ftp.FTPSClient;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.ftp.FtpClientFactory;
-
-/**
- * Create FTPSClient instances.
- *
- * @since 2.0
- */
-public final class FtpsClientFactory
-{
-    private FtpsClientFactory()
-    {
-    }
-
-    /**
-     * Creates a new connection to the server.
-     * @param hostname The host name.
-     * @param port The port.
-     * @param username The user name for authentication.
-     * @param password The user's password.
-     * @param workingDirectory The directory to use.
-     * @param fileSystemOptions The FileSystemOptions.
-     * @return The FTPSClient.
-     * @throws FileSystemException if an error occurs.
-     */
-    public static FTPSClient createConnection(final String hostname, final int port, final char[] username,
-                                              final char[] password, final String workingDirectory,
-                                              final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final FtpsConnectionFactory factory = new FtpsConnectionFactory(FtpsFileSystemConfigBuilder.getInstance());
-        return factory.createConnection(hostname, port, username, password, workingDirectory, fileSystemOptions);
-    }
-
-    /** Connection Factory for FTPS case. */
-    private static final class FtpsConnectionFactory
-        extends FtpClientFactory.ConnectionFactory<FTPSClient, FtpsFileSystemConfigBuilder>
-    {
-
-        private FtpsConnectionFactory(final FtpsFileSystemConfigBuilder builder)
-        {
-            super(builder);
-        }
-
-        @Override
-        protected FTPSClient createClient(final FileSystemOptions fileSystemOptions) throws FileSystemException
-        {
-            final FTPSClient client;
-            if (builder.getFtpsMode(fileSystemOptions) == FtpsMode.IMPLICIT)
-            {
-                client = new FTPSClient(true);
-            }
-            else
-            {
-                client = new FTPSClient();
-            }
-
-            final TrustManager trustManager = builder.getTrustManager(fileSystemOptions);
-            if (trustManager != null)
-            {
-                client.setTrustManager(trustManager);
-            }
-
-            final KeyManager keyManager = builder.getKeyManager(fileSystemOptions);
-            if (keyManager != null)
-            {
-                client.setKeyManager(keyManager);
-            }
-            return client;
-        }
-
-        @Override
-        protected void setupOpenConnection(final FTPSClient client, final FileSystemOptions fileSystemOptions)
-            throws IOException
-        {
-            final FtpsDataChannelProtectionLevel level = builder.getDataChannelProtectionLevel(fileSystemOptions);
-            if (level != null)
-            {
-                // '0' means streaming, that's what we do!
-                try
-                {
-                    client.execPBSZ(0);
-                    client.execPROT(level.name());
-                }
-                catch (final SSLException e)
-                {
-                    throw new FileSystemException("vfs.provider.ftps/data-channel.level", e, level.toString());
-                }
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsClientWrapper.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsClientWrapper.java
deleted file mode 100644
index daa3d08..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsClientWrapper.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.commons.vfs2.provider.ftps;
-
-
-import org.apache.commons.net.ftp.FTPClient;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.provider.ftp.FTPClientWrapper;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-
-/**
- * A wrapper to the FTPSClient to allow automatic reconnect on connection loss.
- * <p>
- * The only difference to the {@link FTPClientWrapper} is the creation of a {@link FTPSClient}
- *  instead of a {@link FTPClient}.
- *
- * @since 2.0
- */
-class FtpsClientWrapper extends FTPClientWrapper
-{
-    FtpsClientWrapper(final GenericFileName root, final FileSystemOptions fileSystemOptions) throws FileSystemException
-    {
-        super(root, fileSystemOptions);
-    }
-
-    @Override
-    protected FTPClient createClient(final GenericFileName rootName, final UserAuthenticationData authData)
-        throws FileSystemException
-    {
-        return FtpsClientFactory.createConnection(
-            rootName.getHostName(),
-            rootName.getPort(),
-            UserAuthenticatorUtils.getData(
-                authData, UserAuthenticationData.USERNAME, UserAuthenticatorUtils.toChar(rootName.getUserName())),
-            UserAuthenticatorUtils.getData(
-                authData, UserAuthenticationData.PASSWORD, UserAuthenticatorUtils.toChar(rootName.getPassword())),
-            rootName.getPath(), getFileSystemOptions());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsDataChannelProtectionLevel.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsDataChannelProtectionLevel.java
deleted file mode 100644
index a13a52e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsDataChannelProtectionLevel.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.commons.vfs2.provider.ftps;
-
-/**
- * Protection level of the data channel in a FTPS communication.
- *
- * @see <a href="http://tools.ietf.org/html/rfc2228#section-3">RFC 2228, section 3</a>
- * @since 2.1
- */
-public enum FtpsDataChannelProtectionLevel
-{
-    C, S, E, P
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsFileProvider.java
deleted file mode 100644
index a5838d4..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsFileProvider.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.commons.vfs2.provider.ftps;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.provider.ftp.FtpFileProvider;
-
-/**
- * A provider for FTP file systems.
- *
- * NOTE: Most of the heavy lifting for FTPS is done by the org.apache.commons.vfs2.provider.ftp package since
- * they both use commons-net package
- *
- * @since 2.0
- */
-public class FtpsFileProvider extends FtpFileProvider
-{
-    public FtpsFileProvider()
-    {
-        super();
-    }
-
-    /**
-     * Creates the filesystem.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        // Create the file system
-        final GenericFileName rootName = (GenericFileName) name;
-
-        final FtpsClientWrapper ftpClient = new FtpsClientWrapper(rootName, fileSystemOptions);
-
-        return new FtpsFileSystem(rootName, ftpClient, fileSystemOptions);
-    }
-
-    @Override
-    public FileSystemConfigBuilder getConfigBuilder()
-    {
-        return FtpsFileSystemConfigBuilder.getInstance();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsFileSystem.java
deleted file mode 100644
index 8b53701..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsFileSystem.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.commons.vfs2.provider.ftps;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.provider.ftp.FtpClient;
-import org.apache.commons.vfs2.provider.ftp.FtpFileSystem;
-
-
-/**
- * A FTPS file system.
- *
- * @since 2.1
- */
-public class FtpsFileSystem extends FtpFileSystem
-{
-    /**
-     * Create a new FtpsFileSystem.
-     *
-     * @param rootName The root of the file system.
-     * @param ftpClient The FtpClient.
-     * @param fileSystemOptions The FileSystemOptions.
-     * @since 2.1
-     */
-    public FtpsFileSystem(
-        final GenericFileName rootName, final FtpClient ftpClient, final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, ftpClient, fileSystemOptions);
-    }
-
-    @Override
-    protected FtpsClientWrapper createWrapper() throws FileSystemException
-    {
-        return new FtpsClientWrapper((GenericFileName) getRoot().getName(), getFileSystemOptions());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsFileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsFileSystemConfigBuilder.java
deleted file mode 100644
index 61cd6c2..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsFileSystemConfigBuilder.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.commons.vfs2.provider.ftps;
-
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.TrustManager;
-
-import org.apache.commons.net.util.TrustManagerUtils;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.ftp.FtpFileSystemConfigBuilder;
-
-/**
- * The configuration builder for various FTPS configuration options.
- *
- * @since 2.0
- */
-public final class FtpsFileSystemConfigBuilder extends FtpFileSystemConfigBuilder
-{
-    private static final String _PREFIX = FtpsFileSystemConfigBuilder.class.getName();
-
-    private static final FtpsFileSystemConfigBuilder BUILDER = new FtpsFileSystemConfigBuilder();
-
-    private static final String FTPS_MODE = _PREFIX + ".FTPS_MODE";
-    private static final String PROT = _PREFIX + ".PROT";
-    private static final String KEY_MANAGER = _PREFIX + ".KEY_MANAGER";
-    private static final String TRUST_MANAGER = _PREFIX + ".TRUST_MANAGER";
-
-    private FtpsFileSystemConfigBuilder()
-    {
-        super("ftps.");
-    }
-
-    /**
-     * Gets the singleton builder.
-     *
-     * @return the singleton builder.
-     */
-    public static FtpsFileSystemConfigBuilder getInstance()
-    {
-        return BUILDER;
-    }
-
-    /**
-     * Set FTPS mode, either "implicit" or "explicit".
-     *
-     * <p>Note, that implicit mode is not standardized and considered as deprecated. Some unit tests for VFS fail with
-     * implicit mode and it is not yet clear if its a problem with Commons VFS/Commons Net or our test server Apache
-     * FTP/SSHD.</p>
-     *
-     * @param opts The FileSystemOptions.
-     * @param ftpsMode The mode to establish a FTPS connection.
-     * @see <a href="http://en.wikipedia.org/wiki/FTPS#Implicit">Wikipedia: FTPS/Implicit</a>
-     * @since 2.1
-     */
-    public void setFtpsMode(final FileSystemOptions opts, final FtpsMode ftpsMode)
-    {
-        setParam(opts, FTPS_MODE, ftpsMode);
-    }
-
-    /**
-     * Return the FTPS mode. Defaults to "explicit" if not defined.
-     *
-     * @param opts The FileSystemOptions.
-     * @return The file type.
-     * @see #setFtpsType
-     */
-    public FtpsMode getFtpsMode(final FileSystemOptions opts)
-    {
-        return getEnum(FtpsMode.class, opts, FTPS_MODE, FtpsMode.EXPLICIT);
-    }
-
-    /**
-     * Set FTPS type, either "implicit" or "explicit".
-     * <p>
-     * Note, that implicit mode is not standardized and considered as deprecated. Some unit tests for VFS fail with
-     * implicit mode and it is not yet clear if its a problem with Commons VFS/Commons Net or our test server Apache
-     * FTP/SSHD.
-     * </p>
-     *
-     * @param opts The FileSystemOptions.
-     * @param ftpsType The file type.
-     * @see <a href="http://en.wikipedia.org/wiki/FTPS#Implicit">Wikipedia: FTPS/Implicit</a>
-     * @deprecated As of 2.1, use {@link #setFtpsMode(FileSystemOptions, FtpsMode)}
-     */
-    @Deprecated
-    public void setFtpsType(final FileSystemOptions opts, final String ftpsType)
-    {
-        final FtpsMode mode;
-        if (ftpsType != null)
-        {
-            mode = FtpsMode.valueOf(ftpsType.toUpperCase());
-            if (mode == null)
-            {
-                throw new IllegalArgumentException("Not a proper FTPS mode: " + ftpsType);
-            }
-        }
-        else
-        {
-            mode = null;
-        }
-        setFtpsMode(opts, mode);
-    }
-
-    /**
-     * Return the FTPS type. Defaults to "explicit" if not defined.
-     *
-     * @param opts The FileSystemOptions.
-     * @return The file type.
-     * @see #setFtpsType
-     * @deprecated As of 2.1, use {@link #getFtpsMode(FileSystemOptions)}
-     */
-    @Deprecated
-    public String getFtpsType(final FileSystemOptions opts)
-    {
-        return getFtpsMode(opts).name().toLowerCase();
-    }
-
-    /**
-     * Gets the data channel protection level (PROT).
-     *
-     * @param opts The FileSystemOptions.
-     * @return The PROT value.
-     * @see org.apache.commons.net.ftp.FTPSClient#execPROT(String)
-     * @since 2.1
-     */
-    public FtpsDataChannelProtectionLevel getDataChannelProtectionLevel(final FileSystemOptions opts)
-    {
-        return getEnum(FtpsDataChannelProtectionLevel.class, opts, PROT);
-    }
-
-    /**
-     * Sets the data channel protection level (PROT).
-     *
-     * @param opts The FileSystemOptions.
-     * @param prot The PROT value, {@code null} has no effect.
-     * @see org.apache.commons.net.ftp.FTPSClient#execPROT(String)
-     * @since 2.1
-     */
-    public void setDataChannelProtectionLevel(final FileSystemOptions opts, final FtpsDataChannelProtectionLevel prot)
-    {
-        setParam(opts, PROT, prot);
-    }
-
-    /**
-     * Gets the KeyManager used to provide a client-side certificate if the FTPS server requests it.
-     *
-     * @param opts The FileSystemOptions.
-     * @return the key manager instance or {@code null}
-     * @see org.apache.commons.net.ftp.FTPSClient#setKeyManager(KeyManager)
-     * @since 2.1
-     */
-    public KeyManager getKeyManager(final FileSystemOptions opts)
-    {
-        return (KeyManager) getParam(opts, KEY_MANAGER);
-    }
-
-    /**
-     * Sets the KeyManager used to provide a client-side certificate if the FTPS server requests it.
-     *
-     * @param opts The FileSystemOptions.
-     * @param keyManager The key manager instance.
-     * @see org.apache.commons.net.ftp.FTPSClient#setKeyManager(KeyManager)
-     * @since 2.1
-     */
-    public void setKeyManager(final FileSystemOptions opts, final KeyManager keyManager)
-    {
-        setParam(opts, KEY_MANAGER, keyManager);
-    }
-
-    /**
-     * Gets the TrustManager that validates the FTPS server's certificate.
-     * <p>
-     * If the params do not contain the key for the trust manager, it will return a trust manger that simply checks this
-     * certificate for validity.
-     * </p>
-     *
-     * @param opts The FileSystemOptions.
-     * @return the trust manager instance or {@code null}
-     * @see org.apache.commons.net.ftp.FTPSClient#setTrustManager(TrustManager)
-     * @since 2.1
-     */
-    public TrustManager getTrustManager(final FileSystemOptions opts)
-    {
-        final TrustManager trustManager;
-        if (hasParam(opts, TRUST_MANAGER))
-        {
-            trustManager = (TrustManager) getParam(opts, TRUST_MANAGER);
-        }
-        else
-        {
-            trustManager = TrustManagerUtils.getValidateServerCertificateTrustManager();
-        }
-        return trustManager;
-    }
-
-    /**
-     * Sets the TrustManager that validates the FTPS server's certificate.
-     *
-     * @param opts The FileSystemOptions.
-     * @param trustManager The trust manager instance.
-     * @see org.apache.commons.net.ftp.FTPSClient#setTrustManager(TrustManager)
-     * @since 2.1
-     */
-    public void setTrustManager(final FileSystemOptions opts, final TrustManager trustManager)
-    {
-        setParam(opts, TRUST_MANAGER, trustManager);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsMode.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsMode.java
deleted file mode 100644
index 9f28a6d..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/FtpsMode.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.commons.vfs2.provider.ftps;
-
-/**
- * Mode of the FTPS connection.
- *
- * <p>Note, that 'implicit' mode is not standardized and considered as deprecated. Some unit tests for VFS fail with
- * 'implicit' mode and it is not yet clear if its a problem with Commons VFS/Commons Net or our test server Apache
- * FTP/SSHD.</p>
- *
- * @see <a href="http://en.wikipedia.org/wiki/FTPS#Implicit">Wikipedia: FTPS/Implicit</a>
- * @since 2.1
- */
-public enum FtpsMode
-{
-    IMPLICIT, EXPLICIT
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/package.html
deleted file mode 100644
index 025c6a4..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ftps/package.html
+++ /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.
--->
-<body>
-<p>The FTPS File Provider.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileObject.java
deleted file mode 100644
index b1cb4ae..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileObject.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.commons.vfs2.provider.gzip;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.compressed.CompressedFileFileObject;
-import org.apache.commons.vfs2.provider.compressed.CompressedFileFileSystem;
-
-/**
- * the gzip file.
- */
-public class GzipFileObject extends CompressedFileFileObject<GzipFileSystem>
-{
-    /**
-     * Deprecated since 2.1. 
-     * 
-     * @deprecated Use {@link #GzipFileObject(AbstractFileName, FileObject, GzipFileSystem)} instead.
-     */
-    @Deprecated
-    protected GzipFileObject(final AbstractFileName name, final FileObject container, final CompressedFileFileSystem fs) {
-        super(name, container, cast(fs));
-    }
-
-    protected GzipFileObject(final AbstractFileName name, final FileObject container, final GzipFileSystem fs)
-    {
-        super(name, container, fs);
-    }
-
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        final InputStream is = getContainer().getContent().getInputStream();
-        return new GZIPInputStream(is);
-    }
-
-    @Override
-    protected OutputStream doGetOutputStream(final boolean bAppend) throws Exception
-    {
-        final OutputStream os = getContainer().getContent().getOutputStream(false);
-        return new GZIPOutputStream(os);
-    }
-
-    private static GzipFileSystem cast(CompressedFileFileSystem fs) {
-        if (fs instanceof GzipFileSystem) {
-            return (GzipFileSystem) fs;
-        }
-        throw new IllegalArgumentException("GzipFileObject expects an instance of GzipFileSystem");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileProvider.java
deleted file mode 100644
index 90a2327..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileProvider.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.commons.vfs2.provider.gzip;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.compressed.CompressedFileFileProvider;
-
-/**
- * Provides access to the content of gzip compressed files.
- */
-public class GzipFileProvider extends CompressedFileFileProvider
-{
-    /**
-     * Capabilities.
-     */
-    protected static final Collection<Capability> capabilities =
-        Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-    {
-        Capability.GET_LAST_MODIFIED,
-        Capability.GET_TYPE,
-        Capability.LIST_CHILDREN,
-        Capability.WRITE_CONTENT,
-        Capability.READ_CONTENT,
-        Capability.URI,
-        Capability.COMPRESS
-    }));
-
-    public GzipFileProvider()
-    {
-        super();
-    }
-
-    @Override
-    protected FileSystem createFileSystem(final FileName name, final FileObject file,
-                                          final FileSystemOptions fileSystemOptions)
-            throws FileSystemException
-    {
-        return new GzipFileSystem(name, file, fileSystemOptions);
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileSystem.java
deleted file mode 100644
index 2f4f130..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/GzipFileSystem.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.commons.vfs2.provider.gzip;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.compressed.CompressedFileFileSystem;
-
-/**
- * Filesytem to handle compressed files using the gzip method.
- */
-public class GzipFileSystem extends CompressedFileFileSystem
-{
-    protected GzipFileSystem(final FileName rootName, final FileObject parentLayer,
-                             final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, parentLayer, fileSystemOptions);
-    }
-
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws FileSystemException
-    {
-        return new GzipFileObject(name, getParentLayer(), this);
-    }
-
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(GzipFileProvider.capabilities);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/package.html
deleted file mode 100644
index 535b163..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/gzip/package.html
+++ /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.
--->
-<body>
-<p>The GZIP File Provider</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileAttributes.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileAttributes.java
deleted file mode 100644
index 346ffcb..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileAttributes.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.commons.vfs2.provider.hdfs;
-
-/**
- * HDFS file content attributes.
- *
- * @since 2.1
- */
-public enum HdfsFileAttributes
-{
-    /**
-     * Last access time.
-     */
-    LAST_ACCESS_TIME,
-
-    /**
-     * Block size.
-     */
-    BLOCK_SIZE,
-
-    /**
-     * Group.
-     */
-    GROUP,
-
-    /**
-     * Owner.
-     */
-    OWNER,
-
-    /**
-     * Permissions.
-     */
-    PERMISSIONS,
-
-    /**
-     * Length.
-     */
-    LENGTH,
-
-    /**
-     * Modification time.
-     */
-    MODIFICATION_TIME;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileContentInfoFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileContentInfoFactory.java
deleted file mode 100644
index f1ddfdd..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileContentInfoFactory.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.commons.vfs2.provider.hdfs;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileContentInfo;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.impl.DefaultFileContentInfo;
-
-/**
- * Creates FileContentInfo instances for HDFS.
- *
- * @since 2.1
- */
-public class HdfsFileContentInfoFactory implements FileContentInfoFactory
-{
-    private static final String CONTENT = "text/plain";
-    private static final String ENCODING = "UTF-8";
-
-    /**
-     * Creates a FileContentInfo for a the given FileContent.
-     *
-     * @param fileContent
-     *            Use this FileContent to create a matching FileContentInfo
-     * @return a FileContentInfo for the given FileContent with content set to "text/plain" and encoding set to "UTF-8"
-     * @throws FileSystemException
-     *             when a problem occurs creating the FileContentInfo.
-     */
-    @Override
-    public FileContentInfo create(final FileContent fileContent) throws FileSystemException
-    {
-        return new DefaultFileContentInfo(CONTENT, ENCODING);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileObject.java
deleted file mode 100644
index 3d84d8c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileObject.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.commons.vfs2.provider.hdfs;
-
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.vfs2.FileNotFolderException;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-import org.apache.hadoop.fs.FileStatus;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-
-/**
- * A VFS representation of an HDFS file.
- *
- * @since 2.1
- */
-public class HdfsFileObject extends AbstractFileObject<HdfsFileSystem>
-{
-    private final HdfsFileSystem fs;
-    private final FileSystem hdfs;
-    private final Path path;
-    private FileStatus stat;
-
-    /**
-     * Constructs a new HDFS FileObject
-     *
-     * @param name
-     *            FileName
-     * @param fs
-     *            HdfsFileSystem instance
-     * @param hdfs
-     *            Hadoop FileSystem instance
-     * @param p
-     *            Path to the file in HDFS
-     */
-    protected HdfsFileObject(final AbstractFileName name, final HdfsFileSystem fs, final FileSystem hdfs, final Path p)
-    {
-        super(name, fs);
-        this.fs = fs;
-        this.hdfs = hdfs;
-        this.path = p;
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#canRenameTo(org.apache.commons.vfs2.FileObject)
-     */
-    @Override
-    public boolean canRenameTo(final FileObject newfile)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doAttach()
-     */
-    @Override
-    protected void doAttach() throws Exception
-    {
-        try
-        {
-            this.stat = this.hdfs.getFileStatus(this.path);
-        }
-        catch (final FileNotFoundException e)
-        {
-            this.stat = null;
-            return;
-        }
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetAttributes()
-     */
-    @Override
-    protected Map<String, Object> doGetAttributes() throws Exception
-    {
-        if (null == this.stat)
-        {
-            return super.doGetAttributes();
-        }
-        else
-        {
-            final Map<String, Object> attrs = new HashMap<String, Object>();
-            attrs.put(HdfsFileAttributes.LAST_ACCESS_TIME.toString(), this.stat.getAccessTime());
-            attrs.put(HdfsFileAttributes.BLOCK_SIZE.toString(), this.stat.getBlockSize());
-            attrs.put(HdfsFileAttributes.GROUP.toString(), this.stat.getGroup());
-            attrs.put(HdfsFileAttributes.OWNER.toString(), this.stat.getOwner());
-            attrs.put(HdfsFileAttributes.PERMISSIONS.toString(), this.stat.getPermission().toString());
-            attrs.put(HdfsFileAttributes.LENGTH.toString(), this.stat.getLen());
-            attrs.put(HdfsFileAttributes.MODIFICATION_TIME.toString(), this.stat.getModificationTime());
-            return attrs;
-        }
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetContentSize()
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        return stat.getLen();
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetInputStream()
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        return this.hdfs.open(this.path);
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetLastModifiedTime()
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        if (null != this.stat)
-        {
-            return this.stat.getModificationTime();
-        }
-        else
-        {
-            return -1;
-        }
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetRandomAccessContent
-     *      (org.apache.commons.vfs2.util.RandomAccessMode)
-     */
-    @Override
-    protected RandomAccessContent doGetRandomAccessContent(final RandomAccessMode mode) throws Exception
-    {
-        if (mode.equals(RandomAccessMode.READWRITE))
-        {
-            throw new UnsupportedOperationException();
-        }
-        return new HdfsRandomAccessContent(this.path, this.hdfs);
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetType()
-     */
-    @Override
-    protected FileType doGetType() throws Exception
-    {
-        try
-        {
-            doAttach();
-            if (null == stat)
-            {
-                return FileType.IMAGINARY;
-            }
-            if (stat.isDir())
-            {
-                return FileType.FOLDER;
-            }
-            else
-            {
-                return FileType.FILE;
-            }
-        }
-        catch (final FileNotFoundException fnfe)
-        {
-            return FileType.IMAGINARY;
-        }
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doIsHidden()
-     */
-    @Override
-    protected boolean doIsHidden() throws Exception
-    {
-        return false;
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doIsReadable()
-     */
-    @Override
-    protected boolean doIsReadable() throws Exception
-    {
-        return true;
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doIsWriteable()
-     */
-    @Override
-    protected boolean doIsWriteable() throws Exception
-    {
-        return false;
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doListChildren()
-     */
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        if (this.doGetType() != FileType.FOLDER)
-        {
-            throw new FileNotFolderException(this);
-        }
-
-        final FileStatus[] files = this.hdfs.listStatus(this.path);
-        final String[] children = new String[files.length];
-        int i = 0;
-        for (final FileStatus status : files)
-        {
-            children[i++] = status.getPath().getName();
-        }
-        return children;
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doListChildrenResolved()
-     */
-    @Override
-    protected FileObject[] doListChildrenResolved() throws Exception
-    {
-        if (this.doGetType() != FileType.FOLDER)
-        {
-            return null;
-        }
-        final String[] children = doListChildren();
-        final FileObject[] fo = new FileObject[children.length];
-        for (int i = 0; i < children.length; i++)
-        {
-            final Path p = new Path(this.path, children[i]);
-            fo[i] = this.fs.resolveFile(p.toUri().toString());
-        }
-        return fo;
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doRemoveAttribute(java.lang.String)
-     */
-    @Override
-    protected void doRemoveAttribute(final String attrName) throws Exception
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doSetAttribute(java.lang.String, java.lang.Object)
-     */
-    @Override
-    protected void doSetAttribute(final String attrName, final Object value) throws Exception
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doSetLastModifiedTime(long)
-     */
-    @Override
-    protected boolean doSetLastModifiedTime(final long modtime) throws Exception
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#exists()
-     * @return boolean true if file exists, false if not
-     */
-    @Override
-    public boolean exists() throws FileSystemException
-    {
-        try
-        {
-            doAttach();
-            return this.stat != null;
-        }
-        catch (final FileNotFoundException fne)
-        {
-            return false;
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("Unable to check existance ", e);
-        }
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileProvider.java
deleted file mode 100644
index ace7337..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileProvider.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.commons.vfs2.provider.hdfs;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider;
-import org.apache.commons.vfs2.provider.http.HttpFileNameParser;
-
-/**
- * FileProvider for HDFS files.
- *
- * @since 2.1
- */
-public class HdfsFileProvider extends AbstractOriginatingFileProvider
-{
-    static final Collection<Capability> CAPABILITIES = Collections.unmodifiableCollection(Arrays
-            .asList(new Capability[]
-            {
-                    Capability.GET_TYPE,
-                    Capability.READ_CONTENT,
-                    Capability.URI,
-                    Capability.GET_LAST_MODIFIED,
-                    Capability.ATTRIBUTES,
-                    Capability.RANDOM_ACCESS_READ,
-                    Capability.DIRECTORY_READ_CONTENT,
-                    Capability.LIST_CHILDREN }));
-
-    /**
-     * Constructs a new HdfsFileProvider.
-     */
-    public HdfsFileProvider()
-    {
-        super();
-        this.setFileNameParser(HttpFileNameParser.getInstance());
-    }
-
-    /**
-     * Create a new HdfsFileSystem instance.
-     * @param rootName Name of the root file.
-     * @param fileSystemOptions Configuration options for this instance.
-     * @throws FileSystemException if error occurred.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName rootName, final FileSystemOptions fileSystemOptions)
-            throws FileSystemException
-    {
-        return new HdfsFileSystem(rootName, fileSystemOptions);
-    }
-
-    /**
-     * Get Capabilities of HdfsFileSystem.
-     * @return The capabilities (unmodifiable).
-     */
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return CAPABILITIES;
-    }
-
-    /**
-     * Return config builder.
-     * @return A config builder for HdfsFileSystems.
-     * @see org.apache.commons.vfs2.provider.AbstractFileProvider#getConfigBuilder()
-     */
-    @Override
-    public FileSystemConfigBuilder getConfigBuilder()
-    {
-        return HdfsFileSystemConfigBuilder.getInstance();
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileSystem.java
deleted file mode 100644
index 2c35d0b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileSystem.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.hdfs;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.URLDecoder;
-import java.util.Collection;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.CacheStrategy;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-
-/**
- * A VFS FileSystem that interacts with HDFS.
- *
- * @since 2.1
- */
-public class HdfsFileSystem extends AbstractFileSystem
-{
-    private static final Log log = LogFactory.getLog(HdfsFileSystem.class);
-
-    private FileSystem fs;
-
-    /**
-     * Construct file system.
-     *
-     * @param rootName Name of the root directory of this file system.
-     * @param fileSystemOptions options for this file system instance.
-     */
-    protected HdfsFileSystem(final FileName rootName, final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, null, fileSystemOptions);
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileSystem#addCapabilities(Collection)
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> capabilities)
-    {
-        capabilities.addAll(HdfsFileProvider.CAPABILITIES);
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileSystem#close()
-     */
-    @Override
-    public void close()
-    {
-        try
-        {
-            if (null != fs)
-            {
-                fs.close();
-            }
-        }
-        catch (final IOException e)
-        {
-            throw new RuntimeException("Error closing HDFS client", e);
-        }
-        super.close();
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.provider.AbstractFileSystem#createFile(AbstractFileName)
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws Exception
-    {
-        throw new FileSystemException("Operation not supported");
-    }
-
-    /**
-     * Resolve FileName into FileObject.
-     * @param name The name of a file on the HdfsFileSystem.
-     * @return resolved FileObject.
-     * @throws FileSystemException if an error occurred.
-     */
-    @Override
-    public FileObject resolveFile(final FileName name) throws FileSystemException
-    {
-        synchronized (this)
-        {
-            if (this.fs == null)
-            {
-                final String hdfsUri = name.getRootURI();
-                final HdfsFileSystemConfigBuilder builder = HdfsFileSystemConfigBuilder.getInstance();
-                final FileSystemOptions options = getFileSystemOptions();
-                final String[] configNames = builder.getConfigNames(options);
-                final Path[] configPaths = builder.getConfigPaths(options);
-                final URL[] configURLs = builder.getConfigURLs(options);
-                final InputStream configStream = builder.getConfigInputStream(options);
-                final Configuration configConfiguration = builder.getConfigConfiguration(options);
-
-                final Configuration conf = new Configuration(true);
-                conf.set(FileSystem.FS_DEFAULT_NAME_KEY, hdfsUri);
-
-                // Load any alternate configuration parameters that may have been specified
-                // no matter where they might come from
-                if (configNames != null)
-                {
-                    for (String configName : configNames)
-                    {
-                        log.debug("Adding HDFS configuration resource: " + configName);
-                        conf.addResource(configName);
-                    }
-                }
-                if (configPaths != null)
-                {
-                    for (Path path : configPaths)
-                    {
-                        log.debug("Adding HDFS configuration path: " + path);
-                        conf.addResource(path);
-                    }
-                }
-                if (configURLs != null)
-                {
-                    for (URL url : configURLs)
-                    {
-                        log.debug("Adding HDFS configuration URL: " + url);
-                        conf.addResource(url);
-                    }
-                }
-                if (configStream != null)
-                {
-                    log.debug("Adding HDFS configuration stream");
-                    conf.addResource(configStream);
-                }
-                if (configConfiguration != null)
-                {
-                    log.debug("Adding HDFS configuration object");
-                    conf.addResource(configConfiguration);
-                }
-
-                try
-                {
-                    fs = FileSystem.get(conf);
-                }
-                catch (final IOException e)
-                {
-                    log.error("Error connecting to filesystem " + hdfsUri, e);
-                    throw new FileSystemException("Error connecting to filesystem " + hdfsUri, e);
-                }
-            }
-        }
-
-        final boolean useCache = null != getContext().getFileSystemManager().getFilesCache();
-        FileObject file;
-        if (useCache)
-        {
-            file = this.getFileFromCache(name);
-        }
-        else
-        {
-            file = null;
-        }
-        if (null == file)
-        {
-            String path = null;
-            try
-            {
-                path = URLDecoder.decode(name.getPath(), "UTF-8");
-            }
-            catch (final UnsupportedEncodingException e)
-            {
-                path = name.getPath();
-            }
-            final Path filePath = new Path(path);
-            file = new HdfsFileObject((AbstractFileName) name, this, fs, filePath);
-            if (useCache)
-            {
-                this.putFileToCache(file);
-            }
-        }
-        /**
-         * resync the file information if requested
-         */
-        if (getFileSystemManager().getCacheStrategy().equals(CacheStrategy.ON_RESOLVE))
-        {
-            file.refresh();
-        }
-        return file;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileSystemConfigBuilder.java
deleted file mode 100644
index 5f1e12e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsFileSystemConfigBuilder.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.commons.vfs2.provider.hdfs;
-
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.Path;
-
-/**
- * Configuration settings for the HdfsFileSystem.
- *
- * @since 2.1
- */
-public final class HdfsFileSystemConfigBuilder extends FileSystemConfigBuilder
-{
-    private static final HdfsFileSystemConfigBuilder BUILDER = new HdfsFileSystemConfigBuilder();
-    private static final String KEY_CONFIG_NAMES  = "configNames";
-    private static final String KEY_CONFIG_PATHS  = "configPaths";
-    private static final String KEY_CONFIG_URLS   = "configURLs";
-    private static final String KEY_CONFIG_STREAM = "configStream";
-    private static final String KEY_CONFIG_CONF   = "configConf";
-
-    private HdfsFileSystemConfigBuilder()
-    {
-        super("hdfs.");
-    }
-
-    /**
-     * @return HdfsFileSystemConfigBuilder instance
-     */
-    public static HdfsFileSystemConfigBuilder getInstance()
-    {
-        return BUILDER;
-    }
-
-    /**
-     * @return HDFSFileSystem
-     */
-    @Override
-    protected Class<? extends FileSystem> getConfigClass()
-    {
-        return HdfsFileSystem.class;
-    }
-
-    /**
-     * Get names of alternate configuration resources.
-     *
-     * @return resource name list of alternate configurations or {@code null}.
-     * @param opts The FileSystemOptions.
-     * @see #setConfigName(FileSystemOptions, String)
-     */
-    public String[] getConfigNames(final FileSystemOptions opts)
-    {
-        String names = this.getString(opts, KEY_CONFIG_NAMES);
-        return names == null || names.isEmpty() ? null : names.split(",");
-    }
-
-    /**
-     * Sets the name of configuration resource to be loaded after the defaults.
-     * <p>
-     * Specifies the name of a config resource to override any specific HDFS settings.
-     * The property will be passed on to {@code org.apache.hadoop.conf.Configuration#addResource(String)}
-     * after the URL was set as the default name with: {@code Configuration#set(FileSystem.FS_DEFAULT_NAME_KEY, url)}.
-     * <p>
-     * One use for this is to set a different value for the {@code dfs.client.use.datanode.hostname}
-     * property in order to access HDFS files stored in an AWS installation (from outside their
-     * firewall). There are other possible uses too.
-     * <p>
-     * This method may be called multiple times and all the specified resources will be loaded
-     * in the order they were specified.
-     * <p>
-     * Note also, that if a list of names is provided, separated by commas ({@code ","}), that
-     * this will work the same as calling this method a number of times with just one name each.
-     *
-     * @param opts The FileSystemOptions to modify.
-     * @param name resource name of additional configuration or {@code null} to unset all the
-     * values set so far.
-     * @see #getConfigNames
-     */
-    public void setConfigName(final FileSystemOptions opts, final String name)
-    {
-        if (name == null || name.isEmpty())
-        {
-            this.setParam(opts, KEY_CONFIG_NAMES, null);
-        }
-        else
-        {
-            String previousNames = this.getString(opts, KEY_CONFIG_NAMES);
-            if (previousNames == null || previousNames.isEmpty())
-            {
-                this.setParam(opts, KEY_CONFIG_NAMES, name);
-            }
-            else
-            {
-                this.setParam(opts, KEY_CONFIG_NAMES, previousNames + "," + name);
-            }
-        }
-    }
-
-    /**
-     * Get paths of alternate configuration file system files.
-     *
-     * @return list of full paths of alternate configuration files or {@code null}.
-     * @param opts The FileSystemOptions.
-     * @see #setConfigPath(FileSystemOptions, Path)
-     */
-    public Path[] getConfigPaths(final FileSystemOptions opts)
-    {
-        String pathNames = this.getString(opts, KEY_CONFIG_PATHS);
-        if (pathNames == null || pathNames.isEmpty())
-        {
-            return null;
-        }
-        String[] paths = pathNames.split(",");
-        Path[] realPaths = new Path[paths.length];
-        for (int i = 0; i < paths.length; i++)
-        {
-            realPaths[i] = new Path(paths[i]);
-        }
-        return realPaths;
-    }
-
-    /**
-     * Sets the full path of configuration file to be loaded after the defaults.
-     * <p>
-     * Specifies the path of a local file system config file to override any specific HDFS settings.
-     * The property will be passed on to {@code org.apache.hadoop.conf.Configuration#addResource(Path)}
-     * after the URL was set as the default name with: {@code Configuration#set(FileSystem.FS_DEFAULT_NAME_KEY, url)}.
-     * <p>
-     * One use for this is to set a different value for the {@code dfs.client.use.datanode.hostname}
-     * property in order to access HDFS files stored in an AWS installation (from outside their
-     * firewall). There are other possible uses too.
-     * <p>
-     * This method may be called multiple times and all the specified resources will be loaded
-     * in the order they were specified.
-     *
-     * @param opts The FileSystemOptions to modify.
-     * @param path full path of additional configuration file (local file system) or {@code null}
-     * to unset all the path values set so far.
-     */
-    public void setConfigPath(final FileSystemOptions opts, final Path path)
-    {
-        if (path == null)
-        {
-            this.setParam(opts, KEY_CONFIG_PATHS, null);
-        }
-        else
-        {
-            String previousPathNames = this.getString(opts, KEY_CONFIG_PATHS);
-            if (previousPathNames == null || previousPathNames.isEmpty())
-            {
-                this.setParam(opts, KEY_CONFIG_PATHS, path.toString());
-            }
-            else
-            {
-                this.setParam(opts, KEY_CONFIG_PATHS, previousPathNames + "," + path.toString());
-            }
-        }
-    }
-
-    /**
-     * Get URLs of alternate configurations.
-     *
-     * @return list of alternate configuration URLs or {@code null}.
-     * @param opts The FileSystemOptions.
-     * @see #setConfigURL(FileSystemOptions, URL)
-     */
-    public URL[] getConfigURLs(final FileSystemOptions opts)
-    {
-        try
-        {
-            String urlNames = this.getString(opts, KEY_CONFIG_URLS);
-            if (urlNames == null || urlNames.isEmpty())
-            {
-                return null;
-            }
-            String[] urls = urlNames.split(",");
-            URL[] realURLs = new URL[urls.length];
-            for (int i = 0; i < urls.length; i++)
-            {
-                realURLs[i] = new URL(urls[i]);
-            }
-            return realURLs;
-        }
-        catch (MalformedURLException mue)
-        {
-            // This should never happen because we save it in the proper form
-        }
-        return null;
-    }
-
-    /**
-     * Sets the URL of configuration file to be loaded after the defaults.
-     * <p>
-     * Specifies the URL of a config file to override any specific HDFS settings.
-     * The property will be passed on to {@code org.apache.hadoop.conf.Configuration#addResource(URL)}
-     * after the URL was set as the default name with: {@code Configuration#set(FileSystem.FS_DEFAULT_NAME_KEY, url)}.
-     * <p>
-     * One use for this is to set a different value for the {@code dfs.client.use.datanode.hostname}
-     * property in order to access HDFS files stored in an AWS installation (from outside their
-     * firewall). There are other possible uses too.
-     * <p>
-     * This method may be called multiple times and all the specified resources will be loaded
-     * in the order they were specified.
-     *
-     * @param opts The FileSystemOptions to modify.
-     * @param url URL of additional configuration file or {@code null} to unset all the URL
-     * values set so far.
-     */
-    public void setConfigURL(final FileSystemOptions opts, final URL url)
-    {
-        if (url == null)
-        {
-            this.setParam(opts, KEY_CONFIG_URLS, null);
-        }
-        else
-        {
-            String previousURLNames = this.getString(opts, KEY_CONFIG_URLS);
-            if (previousURLNames == null || previousURLNames.isEmpty())
-            {
-                this.setParam(opts, KEY_CONFIG_URLS, url.toString());
-            }
-            else
-            {
-                this.setParam(opts, KEY_CONFIG_URLS, previousURLNames + "," + url.toString());
-            }
-        }
-    }
-
-    /**
-     * Get alternate configuration input stream.
-     *
-     * @return alternate configuration input stream or {@code null}.
-     * @param opts The FileSystemOptions.
-     * @see #setConfigInputStream(FileSystemOptions, InputStream)
-     */
-    public InputStream getConfigInputStream(final FileSystemOptions opts)
-    {
-        return (InputStream)this.getParam(opts, KEY_CONFIG_STREAM);
-    }
-
-    /**
-     * Sets the input stream of configuration file to be loaded after the defaults.
-     * <p>
-     * Specifies an input stream connected to a config file to override any specific HDFS settings.
-     * The property will be passed on to {@code org.apache.hadoop.conf.Configuration#addResource(InputStream)}
-     * after the URL was set as the default name with: {@code Configuration#set(FileSystem.FS_DEFAULT_NAME_KEY, url)}.
-     * <p>
-     * One use for this is to set a different value for the {@code dfs.client.use.datanode.hostname}
-     * property in order to access HDFS files stored in an AWS installation (from outside their
-     * firewall). There are other possible uses too.
-     *
-     * @param opts The FileSystemOptions to modify.
-     * @param inputStream input stream of additional configuration file or {@code null} to unset
-     * the configuration input stream previously set up.
-     */
-    public void setConfigInputStream(final FileSystemOptions opts, final InputStream inputStream)
-    {
-        this.setParam(opts, KEY_CONFIG_STREAM, inputStream);
-    }
-
-    /**
-     * Get alternate configuration object.
-     *
-     * @return alternate configuration object or {@code null}.
-     * @param opts The FileSystemOptions.
-     * @see #setConfigConfiguration(FileSystemOptions, Configuration)
-     */
-    public Configuration getConfigConfiguration(final FileSystemOptions opts)
-    {
-        return (Configuration)this.getParam(opts, KEY_CONFIG_CONF);
-    }
-
-    /**
-     * Sets the configuration object to be loaded after the defaults.
-     * <p>
-     * Specifies an already initialized configuration object to override any specific HDFS settings.
-     * The property will be passed on to {@code org.apache.hadoop.conf.Configuration#addResource(Configuration)}
-     * after the URL was set as the default name with: {@code Configuration#set(FileSystem.FS_DEFAULT_NAME_KEY, url)}.
-     * <p>
-     * One use for this is to set a different value for the {@code dfs.client.use.datanode.hostname}
-     * property in order to access HDFS files stored in an AWS installation (from outside their
-     * firewall). There are other possible uses too.
-     *
-     * @param opts The FileSystemOptions to modify.
-     * @param configuration additional configuration object or {@code null} to unset any configuration
-     * object previously set.
-     */
-    public void setConfigConfiguration(final FileSystemOptions opts, final Configuration configuration)
-    {
-        this.setParam(opts, KEY_CONFIG_CONF, configuration);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsRandomAccessContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsRandomAccessContent.java
deleted file mode 100644
index 0e43fd3..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/HdfsRandomAccessContent.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.hdfs;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.vfs2.provider.AbstractRandomAccessContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-import org.apache.hadoop.fs.FSDataInputStream;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-
-/**
- * Provides random access to content in an HdfsFileObject. Currently this only supports read operations. All write
- * operations throw an {@link UnsupportedOperationException}.
- *
- * @since 2.1
- */
-public class HdfsRandomAccessContent extends AbstractRandomAccessContent
-{
-    private final FSDataInputStream fis;
-    private final FileSystem fs;
-    private final Path path;
-
-    /**
-     * Create random access content.
-     *
-     * @param path A Hadoop Path
-     * @param fs A Hadoop FileSystem
-     * @throws IOException when the path cannot be processed.
-     */
-    public HdfsRandomAccessContent(final Path path, final FileSystem fs) throws IOException
-    {
-        super(RandomAccessMode.READ);
-        this.fs = fs;
-        this.path = path;
-        this.fis = this.fs.open(this.path);
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.RandomAccessContent#close()
-     */
-    @Override
-    public void close() throws IOException
-    {
-        this.fis.close();
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.RandomAccessContent#getFilePointer()
-     */
-    @Override
-    public long getFilePointer() throws IOException
-    {
-        return this.fis.getPos();
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.RandomAccessContent#getInputStream()
-     */
-    @Override
-    public InputStream getInputStream() throws IOException
-    {
-        return this.fis;
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.RandomAccessContent#length()
-     */
-    @Override
-    public long length() throws IOException
-    {
-        return this.fs.getFileStatus(this.path).getLen();
-    }
-
-    /**
-     * @see java.io.DataInput#readBoolean()
-     */
-    @Override
-    public boolean readBoolean() throws IOException
-    {
-        return this.fis.readBoolean();
-    }
-
-    /**
-     * @see java.io.DataInput#readByte()
-     */
-    @Override
-    public byte readByte() throws IOException
-    {
-        return this.fis.readByte();
-    }
-
-    /**
-     * @see java.io.DataInput#readChar()
-     */
-    @Override
-    public char readChar() throws IOException
-    {
-        return this.fis.readChar();
-    }
-
-    /**
-     * @see java.io.DataInput#readDouble()
-     */
-    @Override
-    public double readDouble() throws IOException
-    {
-        return this.fis.readDouble();
-    }
-
-    /**
-     * @see java.io.DataInput#readFloat()
-     */
-    @Override
-    public float readFloat() throws IOException
-    {
-        return this.fis.readFloat();
-    }
-
-    /**
-     * @see java.io.DataInput#readFully(byte[])
-     */
-    @Override
-    public void readFully(final byte[] b) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * @see java.io.DataInput#readFully(byte[], int, int)
-     */
-    @Override
-    public void readFully(final byte[] b, final int off, final int len) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * @see java.io.DataInput#readInt()
-     */
-    @Override
-    public int readInt() throws IOException
-    {
-        return this.fis.readInt();
-    }
-
-    /**
-     * @see java.io.DataInput#readLine()
-     */
-    @Override
-    @SuppressWarnings("deprecation")
-    public String readLine() throws IOException
-    {
-        return this.fis.readLine();
-    }
-
-    /**
-     * @see java.io.DataInput#readLong()
-     */
-    @Override
-    public long readLong() throws IOException
-    {
-        return this.fis.readLong();
-    }
-
-    /**
-     * @see java.io.DataInput#readShort()
-     */
-    @Override
-    public short readShort() throws IOException
-    {
-        return this.fis.readShort();
-    }
-
-    /**
-     * @see java.io.DataInput#readUnsignedByte()
-     */
-    @Override
-    public int readUnsignedByte() throws IOException
-    {
-        return this.fis.readUnsignedByte();
-    }
-
-    /**
-     * @see java.io.DataInput#readUnsignedShort()
-     */
-    @Override
-    public int readUnsignedShort() throws IOException
-    {
-        return this.fis.readUnsignedShort();
-    }
-
-    /**
-     * @see java.io.DataInput#readUTF()
-     */
-    @Override
-    public String readUTF() throws IOException
-    {
-        return this.fis.readUTF();
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.RandomAccessContent#seek(long)
-     */
-    @Override
-    public void seek(final long pos) throws IOException
-    {
-        this.fis.seek(pos);
-    }
-
-    /**
-     * @see org.apache.commons.vfs2.RandomAccessContent#setLength(long)
-     */
-    @Override
-    public void setLength(final long newLength) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * @see java.io.DataInput#skipBytes(int)
-     */
-    @Override
-    public int skipBytes(final int n) throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/package.html
deleted file mode 100644
index 8cbb34e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/hdfs/package.html
+++ /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.
--->
-<body>
-<p>The HDFS File Provider</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpClientFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpClientFactory.java
deleted file mode 100644
index 847b299..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpClientFactory.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.commons.vfs2.provider.http;
-
-import org.apache.commons.httpclient.Cookie;
-import org.apache.commons.httpclient.HostConfiguration;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpConnectionManager;
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.commons.httpclient.auth.AuthScope;
-import org.apache.commons.httpclient.methods.HeadMethod;
-import org.apache.commons.httpclient.params.HttpClientParams;
-import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.UserAuthenticator;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-/**
- * Create a HttpClient instance.
- */
-public final class HttpClientFactory
-{
-    private HttpClientFactory()
-    {
-    }
-
-    public static HttpClient createConnection(final String scheme, final String hostname, final int port,
-                                              final String username, final String password,
-                                              final FileSystemOptions fileSystemOptions)
-            throws FileSystemException
-    {
-        return createConnection(HttpFileSystemConfigBuilder.getInstance(), scheme, hostname, port,
-            username, password, fileSystemOptions);
-    }
-
-    /**
-     * Creates a new connection to the server.
-     * @param builder The HttpFileSystemConfigBuilder.
-     * @param scheme The protocol.
-     * @param hostname The hostname.
-     * @param port The port number.
-     * @param username The username.
-     * @param password The password
-     * @param fileSystemOptions The file system options.
-     * @return a new HttpClient connection.
-     * @throws FileSystemException if an error occurs.
-     * @since 2.0
-     */
-    public static HttpClient createConnection(final HttpFileSystemConfigBuilder builder, final String scheme,
-                                              final String hostname, final int port, final String username,
-                                              final String password, final FileSystemOptions fileSystemOptions)
-            throws FileSystemException
-    {
-        HttpClient client;
-        try
-        {
-            final HttpConnectionManager mgr = new MultiThreadedHttpConnectionManager();
-            final HttpConnectionManagerParams connectionMgrParams = mgr.getParams();
-
-            client = new HttpClient(mgr);
-
-            final HostConfiguration config = new HostConfiguration();
-            config.setHost(hostname, port, scheme);
-
-            if (fileSystemOptions != null)
-            {
-                final String proxyHost = builder.getProxyHost(fileSystemOptions);
-                final int proxyPort = builder.getProxyPort(fileSystemOptions);
-
-                if (proxyHost != null && proxyHost.length() > 0 && proxyPort > 0)
-                {
-                    config.setProxy(proxyHost, proxyPort);
-                }
-
-                final UserAuthenticator proxyAuth = builder.getProxyAuthenticator(fileSystemOptions);
-                if (proxyAuth != null)
-                {
-                    final UserAuthenticationData authData = UserAuthenticatorUtils.authenticate(proxyAuth,
-                        new UserAuthenticationData.Type[]
-                        {
-                            UserAuthenticationData.USERNAME,
-                            UserAuthenticationData.PASSWORD
-                        });
-
-                    if (authData != null)
-                    {
-                        final UsernamePasswordCredentials proxyCreds =
-                            new UsernamePasswordCredentials(
-                                UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
-                                    UserAuthenticationData.USERNAME, null)),
-                                UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
-                                    UserAuthenticationData.PASSWORD, null)));
-
-                        final AuthScope scope = new AuthScope(proxyHost, AuthScope.ANY_PORT);
-                        client.getState().setProxyCredentials(scope, proxyCreds);
-                    }
-
-                    if (builder.isPreemptiveAuth(fileSystemOptions))
-                    {
-                        final HttpClientParams httpClientParams = new HttpClientParams();
-                        httpClientParams.setAuthenticationPreemptive(true);
-                        client.setParams(httpClientParams);
-                    }
-                }
-
-                final Cookie[] cookies = builder.getCookies(fileSystemOptions);
-                if (cookies != null)
-                {
-                    client.getState().addCookies(cookies);
-                }
-            }
-            /**
-             * ConnectionManager set methods must be called after the host & port and proxy host & port
-             * are set in the HostConfiguration. They are all used as part of the key when HttpConnectionManagerParams
-             * tries to locate the host configuration.
-             */
-            connectionMgrParams.setMaxConnectionsPerHost(config, builder.getMaxConnectionsPerHost(fileSystemOptions));
-            connectionMgrParams.setMaxTotalConnections(builder.getMaxTotalConnections(fileSystemOptions));
-
-            connectionMgrParams.setConnectionTimeout(builder.getConnectionTimeout(fileSystemOptions));
-            connectionMgrParams.setSoTimeout(builder.getSoTimeout(fileSystemOptions));
-
-            client.setHostConfiguration(config);
-
-            if (username != null)
-            {
-                final UsernamePasswordCredentials creds =
-                    new UsernamePasswordCredentials(username, password);
-                final AuthScope scope = new AuthScope(hostname, AuthScope.ANY_PORT);
-                client.getState().setCredentials(scope, creds);
-            }
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider.http/connect.error", exc, hostname);
-        }
-
-        return client;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileContentInfoFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileContentInfoFactory.java
deleted file mode 100644
index d764384..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileContentInfoFactory.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.commons.vfs2.provider.http;
-
-import java.io.IOException;
-
-import org.apache.commons.httpclient.Header;
-import org.apache.commons.httpclient.HeaderElement;
-import org.apache.commons.httpclient.methods.HeadMethod;
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileContentInfo;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.impl.DefaultFileContentInfo;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-
-/**
- * Creates FileContentInfo instances for HTTP.
- */
-public class HttpFileContentInfoFactory implements FileContentInfoFactory
-{
-    @Override
-    public FileContentInfo create(final FileContent fileContent) throws FileSystemException
-    {
-        final HttpFileObject httpFile = (HttpFileObject) FileObjectUtils.getAbstractFileObject(fileContent.getFile());
-
-        String contentType = null;
-        String contentEncoding = null;
-
-        HeadMethod headMethod;
-        try
-        {
-            headMethod = httpFile.getHeadMethod();
-        }
-        catch (final IOException e)
-        {
-            throw new FileSystemException(e);
-        }
-        final Header header = headMethod.getResponseHeader("content-type");
-        if (header != null)
-        {
-            final HeaderElement[] element = header.getElements();
-            if (element != null && element.length > 0)
-            {
-                contentType = element[0].getName();
-            }
-        }
-
-        contentEncoding = headMethod.getResponseCharSet();
-
-        return new DefaultFileContentInfo(contentType, contentEncoding);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileNameParser.java
deleted file mode 100644
index e1f73c2..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileNameParser.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.commons.vfs2.provider.http;
-
-import org.apache.commons.vfs2.provider.FileNameParser;
-import org.apache.commons.vfs2.provider.URLFileNameParser;
-
-/**
- * Implementation for http. set default port to 80
- */
-public class HttpFileNameParser extends URLFileNameParser
-{
-    private static final int DEFAULT_PORT = 80;
-
-    private static final HttpFileNameParser INSTANCE = new HttpFileNameParser();
-
-    public HttpFileNameParser()
-    {
-        super(DEFAULT_PORT);
-    }
-
-    public static FileNameParser getInstance()
-    {
-        return INSTANCE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileObject.java
deleted file mode 100644
index 60ebd3b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileObject.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.http;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-
-import org.apache.commons.httpclient.Header;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.URIException;
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.commons.httpclient.methods.HeadMethod;
-import org.apache.commons.httpclient.util.DateUtil;
-import org.apache.commons.httpclient.util.URIUtil;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileNotFoundException;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.provider.URLFileName;
-import org.apache.commons.vfs2.util.MonitorInputStream;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * A file object backed by Apache Commons HttpClient.
- * <p>
- * TODO - status codes.
- *
- * @param <FS> An {@link HttpFileSystem} subclass
- */
-public class HttpFileObject<FS extends HttpFileSystem> extends AbstractFileObject<FS>
-{
-    /**
-     * An InputStream that cleans up the HTTP connection on close.
-     */
-    static class HttpInputStream extends MonitorInputStream
-    {
-        private final GetMethod method;
-
-        public HttpInputStream(final GetMethod method)
-            throws IOException
-        {
-            super(method.getResponseBodyAsStream());
-            this.method = method;
-        }
-
-        /**
-         * Called after the stream has been closed.
-         */
-        @Override
-        protected void onClose() throws IOException
-        {
-            method.releaseConnection();
-        }
-    }
-    private final String urlCharset;
-    private final String userAgent;
-    private final boolean followRedirect;
-
-    private HeadMethod method;
-
-    protected HttpFileObject(final AbstractFileName name, final FS fileSystem)
-    {
-        this(name, fileSystem, HttpFileSystemConfigBuilder.getInstance());
-    }
-
-    protected HttpFileObject(final AbstractFileName name, final FS fileSystem,
-                             final HttpFileSystemConfigBuilder builder)
-    {
-        super(name, fileSystem);
-        final FileSystemOptions fileSystemOptions = fileSystem.getFileSystemOptions();
-        urlCharset = builder.getUrlCharset(fileSystemOptions);
-        userAgent = builder.getUserAgent(fileSystemOptions);
-        followRedirect = builder.getFollowRedirect(fileSystemOptions);
-    }
-
-    /**
-     * Detaches this file object from its file resource.
-     */
-    @Override
-    protected void doDetach() throws Exception
-    {
-        method = null;
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        final Header header = method.getResponseHeader("content-length");
-        if (header == null)
-        {
-            // Assume 0 content-length
-            return 0;
-        }
-        return Long.parseLong(header.getValue());
-    }
-
-    /**
-     * Creates an input stream to read the file content from.  Is only called
-     * if {@link #doGetType} returns {@link FileType#FILE}.
-     * <p>
-     * It is guaranteed that there are no open output streams for this file
-     * when this method is called.
-     * <p>
-     * The returned stream does not have to be buffered.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        final GetMethod getMethod = new GetMethod();
-        setupMethod(getMethod);
-        final int status = getAbstractFileSystem().getClient().executeMethod(getMethod);
-        if (status == HttpURLConnection.HTTP_NOT_FOUND)
-        {
-            throw new FileNotFoundException(getName());
-        }
-        if (status != HttpURLConnection.HTTP_OK)
-        {
-            throw new FileSystemException("vfs.provider.http/get.error", getName(), Integer.valueOf(status));
-        }
-
-        return new HttpInputStream(getMethod);
-    }
-
-    /**
-     * Returns the last modified time of this file.
-     * <p>
-     * This implementation throws an exception.
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        final Header header = method.getResponseHeader("last-modified");
-        if (header == null)
-        {
-            throw new FileSystemException("vfs.provider.http/last-modified.error", getName());
-        }
-        return DateUtil.parseDate(header.getValue()).getTime();
-    }
-
-    @Override
-    protected RandomAccessContent doGetRandomAccessContent(final RandomAccessMode mode) throws Exception
-    {
-        return new HttpRandomAccessContent(this, mode);
-    }
-
-    /**
-     * Determines the type of this file.  Must not return null.  The return
-     * value of this method is cached, so the implementation can be expensive.
-     */
-    @Override
-    protected FileType doGetType() throws Exception
-    {
-        // Use the HEAD method to probe the file.
-        final int status = this.getHeadMethod().getStatusCode();
-        if (status == HttpURLConnection.HTTP_OK
-            || status == HttpURLConnection.HTTP_BAD_METHOD /* method is bad, but resource exist */)
-        {
-            return FileType.FILE;
-        }
-        else if (status == HttpURLConnection.HTTP_NOT_FOUND
-            || status == HttpURLConnection.HTTP_GONE)
-        {
-            return FileType.IMAGINARY;
-        }
-        else
-        {
-            throw new FileSystemException("vfs.provider.http/head.error", getName(), Integer.valueOf(status));
-        }
-    }
-
-    @Override
-    protected boolean doIsWriteable() throws Exception
-    {
-        return false;
-    }
-
-    /**
-     * Lists the children of this file.
-     */
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        throw new Exception("Not implemented.");
-    }
-
-    protected String encodePath(final String decodedPath) throws URIException
-    {
-        return URIUtil.encodePath(decodedPath);
-    }
-
-
-    @Override
-    protected FileContentInfoFactory getFileContentInfoFactory()
-    {
-        return new HttpFileContentInfoFactory();
-    }
-
-    protected boolean getFollowRedirect()
-    {
-        return followRedirect;
-    }
-
-    protected String getUserAgent()
-    {
-        return userAgent;
-    }
-
-    HeadMethod getHeadMethod() throws IOException
-    {
-        if (method != null)
-        {
-            return method;
-        }
-        method = new HeadMethod();
-        setupMethod(method);
-        final HttpClient client = getAbstractFileSystem().getClient();
-        client.executeMethod(method);
-        method.releaseConnection();
-        return method;
-    }
-
-    protected String getUrlCharset()
-    {
-        return urlCharset;
-    }
-
-    /**
-     * Prepares a HttpMethod object.
-     *
-     * @param method The object which gets prepared to access the file object.
-     * @throws FileSystemException if an error occurs.
-     * @throws URIException if path cannot be represented.
-     * @since 2.0 (was package)
-     */
-    protected void setupMethod(final HttpMethod method) throws FileSystemException, URIException
-    {
-        final String pathEncoded = ((URLFileName) getName()).getPathQueryEncoded(this.getUrlCharset());
-        method.setPath(pathEncoded);
-        method.setFollowRedirects(this.getFollowRedirect());
-        method.setRequestHeader("User-Agent", this.getUserAgent());
-    }
-
-    /*
-    protected Map doGetAttributes() throws Exception
-    {
-        TreeMap map = new TreeMap();
-
-        Header contentType = method.getResponseHeader("content-type");
-        if (contentType != null)
-        {
-            HeaderElement[] element = contentType.getValues();
-            if (element != null && element.length > 0)
-            {
-                map.put("content-type", element[0].getName());
-            }
-        }
-
-        map.put("content-encoding", method.getResponseCharSet());
-        return map;
-    }
-    */
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileProvider.java
deleted file mode 100644
index 2dce321..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileProvider.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.commons.vfs2.provider.http;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-/**
- * An HTTP provider that uses commons-httpclient.
- */
-public class HttpFileProvider
-    extends AbstractOriginatingFileProvider
-{
-    /** Authenticator information. */
-    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = new UserAuthenticationData.Type[]
-        {
-            UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD
-        };
-
-    static final Collection<Capability> capabilities = Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-    {
-        Capability.GET_TYPE,
-        Capability.READ_CONTENT,
-        Capability.URI,
-        Capability.GET_LAST_MODIFIED,
-        Capability.ATTRIBUTES,
-        Capability.RANDOM_ACCESS_READ,
-        Capability.DIRECTORY_READ_CONTENT,
-    }));
-
-    /**
-     * Constructs a new provider.
-     */
-    public HttpFileProvider()
-    {
-        super();
-        setFileNameParser(HttpFileNameParser.getInstance());
-    }
-
-    /**
-     * Creates a {@link FileSystem}.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        // Create the file system
-        final GenericFileName rootName = (GenericFileName) name;
-
-        UserAuthenticationData authData = null;
-        HttpClient httpClient;
-        try
-        {
-            authData = UserAuthenticatorUtils.authenticate(fileSystemOptions, AUTHENTICATOR_TYPES);
-
-            httpClient = HttpClientFactory.createConnection(
-                rootName.getScheme(),
-                rootName.getHostName(),
-                rootName.getPort(),
-                UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
-                    UserAuthenticationData.USERNAME, UserAuthenticatorUtils.toChar(rootName.getUserName()))),
-                UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
-                    UserAuthenticationData.PASSWORD, UserAuthenticatorUtils.toChar(rootName.getPassword()))),
-                fileSystemOptions);
-        }
-        finally
-        {
-            UserAuthenticatorUtils.cleanup(authData);
-        }
-
-        return new HttpFileSystem(rootName, httpClient, fileSystemOptions);
-    }
-
-    @Override
-    public FileSystemConfigBuilder getConfigBuilder()
-    {
-        return HttpFileSystemConfigBuilder.getInstance();
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystem.java
deleted file mode 100644
index 213c1d1..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystem.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.commons.vfs2.provider.http;
-
-import java.util.Collection;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpConnectionManager;
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.provider.GenericFileName;
-
-/**
- * An HTTP file system.
- */
-public class HttpFileSystem
-    extends AbstractFileSystem
-{
-    private final HttpClient client;
-
-    protected HttpFileSystem(final GenericFileName rootName, final HttpClient client,
-                             final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, null, fileSystemOptions);
-        this.client = client;
-    }
-
-    /**
-     * Adds the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(HttpFileProvider.capabilities);
-    }
-
-    protected HttpClient getClient()
-    {
-        return client;
-    }
-
-    /** @since 2.0 */
-    @Override
-    public void closeCommunicationLink()
-    {
-        if (getClient() != null)
-        {
-            final HttpConnectionManager mgr = getClient().getHttpConnectionManager();
-            if (mgr instanceof MultiThreadedHttpConnectionManager)
-            {
-                ((MultiThreadedHttpConnectionManager) mgr).shutdown();
-            }
-        }
-    }
-
-    /**
-     * Creates a file object.  This method is called only if the requested
-     * file is not cached.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name)
-        throws Exception
-    {
-        return new HttpFileObject(name, this);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java
deleted file mode 100644
index 7e34eed..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpFileSystemConfigBuilder.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.http;
-
-import org.apache.commons.httpclient.Cookie;
-import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticator;
-
-/**
- * Configuration options for HTTP.
- */
-public class HttpFileSystemConfigBuilder extends FileSystemConfigBuilder
-{
-    protected static final String KEY_FOLLOW_REDIRECT = "followRedirect";
-
-    protected static final String KEY_USER_AGENT = "userAgent";
-
-    private static final HttpFileSystemConfigBuilder BUILDER = new HttpFileSystemConfigBuilder();
-
-    private static final int DEFAULT_MAX_HOST_CONNECTIONS = 5;
-
-    private static final int DEFAULT_MAX_CONNECTIONS = 50;
-
-    private static final int DEFAULT_CONNECTION_TIMEOUT = 0;
-
-    private static final int DEFAULT_SO_TIMEOUT = 0;
-
-    private static final boolean DEFAULT_FOLLOW_REDIRECT = true;
-
-    private static final String DEFAULT_USER_AGENT = "Jakarta-Commons-VFS";
-
-    private static final String KEY_PREEMPTIVE_AUTHENTICATION = "preemptiveAuth";
-
-    /**
-     * Create new config builder.
-     * @param prefix String for properties of this file system.
-     * @since 2.0
-     */
-    protected HttpFileSystemConfigBuilder(final String prefix)
-    {
-        super(prefix);
-    }
-
-    private HttpFileSystemConfigBuilder()
-    {
-        super("http.");
-    }
-
-    /**
-     * Gets the singleton builder.
-     *
-     * @return the singleton builder.
-     */
-    public static HttpFileSystemConfigBuilder getInstance()
-    {
-        return BUILDER;
-    }
-
-    /**
-     * Set the charset used for url encoding.<br>
-     *
-     * @param opts The FileSystem options.
-     * @param chaset the chaset
-     */
-    public void setUrlCharset(final FileSystemOptions opts, final String chaset)
-    {
-        setParam(opts, "urlCharset", chaset);
-    }
-
-    /**
-     * Set the charset used for url encoding.<br>
-     *
-     * @param opts The FileSystem options.
-     * @return the chaset
-     */
-    public String getUrlCharset(final FileSystemOptions opts)
-    {
-        return getString(opts, "urlCharset");
-    }
-
-    /**
-     * Set the proxy to use for http connection.<br>
-     * You have to set the ProxyPort too if you would like to have the proxy really used.
-     *
-     * @param opts The FileSystem options.
-     * @param proxyHost the host
-     * @see #setProxyPort
-     */
-    public void setProxyHost(final FileSystemOptions opts, final String proxyHost)
-    {
-        setParam(opts, "proxyHost", proxyHost);
-    }
-
-    /**
-     * Set the proxy-port to use for http connection.
-     * You have to set the ProxyHost too if you would like to have the proxy really used.
-     *
-     * @param opts The FileSystem options.
-     * @param proxyPort the port
-     * @see #setProxyHost
-     */
-    public void setProxyPort(final FileSystemOptions opts, final int proxyPort)
-    {
-        setParam(opts, "proxyPort", Integer.valueOf(proxyPort));
-    }
-
-    /**
-     * Get the proxy to use for http connection.
-     * You have to set the ProxyPort too if you would like to have the proxy really used.
-     *
-     * @param opts The FileSystem options.
-     * @return proxyHost
-     * @see #setProxyPort
-     */
-    public String getProxyHost(final FileSystemOptions opts)
-    {
-        return getString(opts, "proxyHost");
-    }
-
-    /**
-     * Get the proxy-port to use for http the connection.
-     * You have to set the ProxyHost too if you would like to have the proxy really used.
-     *
-     * @param opts The FileSystem options.
-     * @return proxyPort: the port number or 0 if it is not set
-     * @see #setProxyHost
-     */
-    public int getProxyPort(final FileSystemOptions opts)
-    {
-        return getInteger(opts, "proxyPort", 0);
-    }
-
-    /**
-     * Set the proxy authenticator where the system should get the credentials from.
-     * @param opts The FileSystem options.
-     * @param authenticator The UserAuthenticator.
-     */
-    public void setProxyAuthenticator(final FileSystemOptions opts, final UserAuthenticator authenticator)
-    {
-        setParam(opts, "proxyAuthenticator", authenticator);
-    }
-
-    /**
-     * Get the proxy authenticator where the system should get the credentials from.
-     * @param opts The FileSystem options.
-     * @return The UserAuthenticator.
-     */
-    public UserAuthenticator getProxyAuthenticator(final FileSystemOptions opts)
-    {
-        return (UserAuthenticator) getParam(opts, "proxyAuthenticator");
-    }
-
-    /**
-     * The cookies to add to the request.
-     * @param opts The FileSystem options.
-     * @param cookies An array of Cookies.
-     */
-    public void setCookies(final FileSystemOptions opts, final Cookie[] cookies)
-    {
-        setParam(opts, "cookies", cookies);
-    }
-
-    /**
-     * Sets whether to follow redirects for the connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param redirect
-     *            {@code true} to follow redirects, {@code false} not to.
-     * @see #setFollowRedirect
-     * @since 2.1
-     */
-    public void setFollowRedirect(final FileSystemOptions opts, final boolean redirect)
-    {
-        setParam(opts, KEY_FOLLOW_REDIRECT, redirect);
-    }
-
-    /**
-     * The cookies to add to the request.
-     * @param opts The FileSystem options.
-     * @return the Cookie array.
-     */
-    public Cookie[] getCookies(final FileSystemOptions opts)
-    {
-        return (Cookie[]) getParam(opts, "cookies");
-    }
-
-    /**
-     * Gets whether to follow redirects for the connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return {@code true} to follow redirects, {@code false} not to.
-     * @see #setFollowRedirect
-     * @since 2.1
-     */
-    public boolean getFollowRedirect(final FileSystemOptions opts)
-    {
-        return getBoolean(opts, KEY_FOLLOW_REDIRECT, DEFAULT_FOLLOW_REDIRECT);
-    }
-
-    /**
-     * The maximum number of connections allowed.
-     * @param opts The FileSystem options.
-     * @param maxTotalConnections The maximum number of connections.
-     * @since 2.0
-     */
-    public void setMaxTotalConnections(final FileSystemOptions opts, final int maxTotalConnections)
-    {
-        setParam(opts, HttpConnectionManagerParams.MAX_TOTAL_CONNECTIONS, Integer.valueOf(maxTotalConnections));
-    }
-
-    /**
-     * Retrieve the maximum number of connections allowed.
-     * @param opts The FileSystemOptions.
-     * @return The maximum number of connections allowed.
-     * @since 2.0
-     */
-    public int getMaxTotalConnections(final FileSystemOptions opts)
-    {
-        return getInteger(opts, HttpConnectionManagerParams.MAX_TOTAL_CONNECTIONS, DEFAULT_MAX_CONNECTIONS);
-    }
-
-    /**
-     * The maximum number of connections allowed to any host.
-     * @param opts The FileSystem options.
-     * @param maxHostConnections The maximum number of connections to a host.
-     * @since 2.0
-     */
-    public void setMaxConnectionsPerHost(final FileSystemOptions opts, final int maxHostConnections)
-    {
-        setParam(opts, HttpConnectionManagerParams.MAX_HOST_CONNECTIONS, Integer.valueOf(maxHostConnections));
-    }
-
-    /**
-     * Retrieve the maximum number of connections allowed per host.
-     * @param opts The FileSystemOptions.
-     * @return The maximum number of connections allowed per host.
-     * @since 2.0
-     */
-    public int getMaxConnectionsPerHost(final FileSystemOptions opts)
-    {
-        return getInteger(opts, HttpConnectionManagerParams.MAX_HOST_CONNECTIONS, DEFAULT_MAX_HOST_CONNECTIONS);
-    }
-
-    /**
-     * Determines if the FileSystemOptions indicate that preemptive
-     * authentication is requested.
-     * @param opts The FileSystemOptions.
-     * @return true if preemptiveAuth is requested.
-     * @since 2.0
-     */
-    public boolean isPreemptiveAuth(final FileSystemOptions opts)
-    {
-        return getBoolean(opts, KEY_PREEMPTIVE_AUTHENTICATION, Boolean.FALSE).booleanValue();
-    }
-
-    /**
-     * Sets the given value for preemptive HTTP authentication (using BASIC) on the
-     * given FileSystemOptions object.  Defaults to false if not set.  It may be
-     * appropriate to set to true in cases when the resulting chattiness of the
-     * conversation outweighs any architectural desire to use a stronger authentication
-     * scheme than basic/preemptive.
-     * @param opts The FileSystemOptions.
-     * @param preemptiveAuth the desired setting; true=enabled and false=disabled.
-     */
-    public void setPreemptiveAuth(final FileSystemOptions opts, final boolean preemptiveAuth)
-    {
-        setParam(opts, KEY_PREEMPTIVE_AUTHENTICATION, Boolean.valueOf(preemptiveAuth));
-    }
-
-    /**
-     * The connection timeout.
-     *
-     * @param opts The FileSystem options.
-     * @param connectionTimeout The connection timeout.
-     * @since 2.1
-     */
-    public void setConnectionTimeout(final FileSystemOptions opts, final int connectionTimeout)
-    {
-        setParam(opts, HttpConnectionManagerParams.CONNECTION_TIMEOUT, Integer.valueOf(connectionTimeout));
-    }
-
-    /**
-     * Retrieve the connection timeout.
-     *
-     * @param opts The FileSystem options.
-     * @return The connection timeout.
-     * @since 2.1
-     */
-    public int getConnectionTimeout(final FileSystemOptions opts)
-    {
-        return getInteger(opts, HttpConnectionManagerParams.CONNECTION_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT);
-    }
-
-    /**
-     * The socket timeout.
-     *
-     * @param opts The FileSystem options.
-     * @param soTimeout socket timeout.
-     * @since 2.1
-     */
-    public void setSoTimeout(final FileSystemOptions opts, final int soTimeout)
-    {
-        setParam(opts, HttpConnectionManagerParams.SO_TIMEOUT, Integer.valueOf(soTimeout));
-    }
-
-    /**
-     * Retrieve the socket timeout.
-     *
-     * @param opts The FileSystemOptions.
-     * @return The socket timeout.
-     * @since 2.1
-     */
-    public int getSoTimeout(final FileSystemOptions opts)
-    {
-        return getInteger(opts, HttpConnectionManagerParams.SO_TIMEOUT, DEFAULT_SO_TIMEOUT);
-    }
-
-    /**
-     * Assign the user agent to attach to the outgoing http methods
-     *
-     * @param userAgent User Agent String
-     */
-    public void setUserAgent(final FileSystemOptions opts, final String userAgent)
-    {
-        setParam(opts, "userAgent", userAgent);
-    }
-
-    /**
-     * Return the user agent string
-     *
-     * @return User provided User-Agent string, otherwise default of: Jakarta-Commons-VFS
-     */
-    public String getUserAgent(final FileSystemOptions opts)
-    {
-        final String userAgent = (String) getParam(opts, KEY_USER_AGENT);
-        return userAgent != null ? userAgent : DEFAULT_USER_AGENT;
-    }
-
-
-    @Override
-    protected Class<? extends FileSystem> getConfigClass()
-    {
-        return HttpFileSystem.class;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpRandomAccessContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpRandomAccessContent.java
deleted file mode 100644
index ba79fba..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/HttpRandomAccessContent.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.commons.vfs2.provider.http;
-
-import java.io.DataInputStream;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.AbstractRandomAccessStreamContent;
-import org.apache.commons.vfs2.util.MonitorInputStream;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * RandomAccess content using HTTP.
- */
-class HttpRandomAccessContent extends AbstractRandomAccessStreamContent
-{
-    protected long filePointer = 0;
-
-    private final HttpFileObject fileObject;
-    private final HttpFileSystem fileSystem;
-
-    private DataInputStream dis = null;
-    private MonitorInputStream mis = null;
-
-    HttpRandomAccessContent(final HttpFileObject fileObject, final RandomAccessMode mode)
-    {
-        super(mode);
-
-        this.fileObject = fileObject;
-        fileSystem = (HttpFileSystem) this.fileObject.getFileSystem();
-    }
-
-    @Override
-    public long getFilePointer() throws IOException
-    {
-        return filePointer;
-    }
-
-    @Override
-    public void seek(final long pos) throws IOException
-    {
-        if (pos == filePointer)
-        {
-            // no change
-            return;
-        }
-
-        if (pos < 0)
-        {
-            throw new FileSystemException("vfs.provider/random-access-invalid-position.error",
-                    Long.valueOf(pos));
-        }
-        if (dis != null)
-        {
-            close();
-        }
-
-        filePointer = pos;
-    }
-
-    @Override
-    protected DataInputStream getDataInputStream() throws IOException
-    {
-        if (dis != null)
-        {
-            return dis;
-        }
-
-        final GetMethod getMethod = new GetMethod();
-        fileObject.setupMethod(getMethod);
-        getMethod.setRequestHeader("Range", "bytes=" + filePointer + "-");
-        final int status = fileSystem.getClient().executeMethod(getMethod);
-        if (status != HttpURLConnection.HTTP_PARTIAL && status != HttpURLConnection.HTTP_OK)
-        {
-            throw new FileSystemException("vfs.provider.http/get-range.error",
-                fileObject.getName(),
-                Long.valueOf(filePointer),
-                Integer.valueOf(status));
-        }
-
-        mis = new HttpFileObject.HttpInputStream(getMethod);
-        // If the range request was ignored
-        if (status == HttpURLConnection.HTTP_OK)
-        {
-            final long skipped = mis.skip(filePointer);
-            if (skipped != filePointer)
-            {
-                throw new FileSystemException("vfs.provider.http/get-range.error",
-                    fileObject.getName(),
-                    Long.valueOf(filePointer),
-                    Integer.valueOf(status));
-            }
-        }
-        dis = new DataInputStream(new FilterInputStream(mis)
-        {
-            @Override
-            public int read() throws IOException
-            {
-                final int ret = super.read();
-                if (ret > -1)
-                {
-                    filePointer++;
-                }
-                return ret;
-            }
-
-            @Override
-            public int read(final byte[] b) throws IOException
-            {
-                final int ret = super.read(b);
-                if (ret > -1)
-                {
-                    filePointer += ret;
-                }
-                return ret;
-            }
-
-            @Override
-            public int read(final byte[] b, final int off, final int len) throws IOException
-            {
-                final int ret = super.read(b, off, len);
-                if (ret > -1)
-                {
-                    filePointer += ret;
-                }
-                return ret;
-            }
-        });
-
-        return dis;
-    }
-
-
-    @Override
-    public void close() throws IOException
-    {
-        if (dis != null)
-        {
-            dis.close();
-            dis = null;
-            mis = null;
-        }
-    }
-
-    @Override
-    public long length() throws IOException
-    {
-        return fileObject.getContent().getSize();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/package.html
deleted file mode 100644
index 242a994..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/http/package.html
+++ /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.
--->
-<body>
-<p>The HTTP File Provider</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/https/HttpsFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/https/HttpsFileNameParser.java
deleted file mode 100644
index 0298968..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/https/HttpsFileNameParser.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.commons.vfs2.provider.https;
-
-import org.apache.commons.vfs2.provider.FileNameParser;
-import org.apache.commons.vfs2.provider.URLFileNameParser;
-
-/**
- * Implementation for https. set default port to 443.
- */
-public class HttpsFileNameParser extends URLFileNameParser
-{
-    private static final int DEFAULT_PORT = 443;
-
-    private static final HttpsFileNameParser INSTANCE = new HttpsFileNameParser();
-
-    public HttpsFileNameParser()
-    {
-        super(DEFAULT_PORT);
-    }
-
-    public static FileNameParser getInstance()
-    {
-        return INSTANCE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/https/HttpsFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/https/HttpsFileProvider.java
deleted file mode 100644
index 468f13e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/https/HttpsFileProvider.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.commons.vfs2.provider.https;
-
-import org.apache.commons.vfs2.provider.http.HttpFileProvider;
-
-/**
- * An HTTPS provider that uses commons-httpclient.
- */
-public class HttpsFileProvider
-    extends HttpFileProvider
-{
-    public HttpsFileProvider()
-    {
-        super();
-        setFileNameParser(HttpsFileNameParser.getInstance());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/https/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/https/package.html
deleted file mode 100644
index 8eb9429..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/https/package.html
+++ /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.
--->
-<body>
-<p>The HTTPS File Provider</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarFileObject.java
deleted file mode 100644
index 8bb22a5..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarFileObject.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.commons.vfs2.provider.jar;
-
-import java.io.IOException;
-import java.security.cert.Certificate;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.jar.Attributes;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.zip.ZipFileObject;
-
-/**
- * A file in a Jar file system.
- */
-public class JarFileObject extends ZipFileObject
-{
-    private final JarFileSystem fs;
-
-    private Attributes attributes;
-
-    protected JarFileObject(final AbstractFileName name,
-                            final ZipEntry entry,
-                            final JarFileSystem fs,
-                            final boolean zipExists) throws FileSystemException
-    {
-        super(name, entry, fs, zipExists);
-        this.fs = fs;
-
-        try
-        {
-            getAttributes(); // early get the attributes as the zip file might be closed
-        }
-        catch (final IOException e)
-        {
-            throw new FileSystemException(e);
-        }
-    }
-
-    /**
-     * Returns the Jar manifest.
-     */
-    Manifest getManifest() throws IOException
-    {
-        if (fs.getZipFile() == null)
-        {
-            return null;
-        }
-
-        return ((JarFile) fs.getZipFile()).getManifest();
-    }
-
-    /**
-     * Returns the attributes of this file.
-     */
-    Attributes getAttributes() throws IOException
-    {
-        if (attributes == null)
-        {
-            if (entry == null)
-            {
-                attributes = new Attributes(1);
-            }
-            else
-            {
-                attributes = ((JarEntry) entry).getAttributes();
-                if (attributes == null)
-                {
-                    attributes = new Attributes(1);
-                }
-            }
-        }
-
-        return attributes;
-    }
-
-    /**
-     * Returns the value of an attribute.
-     */
-    @Override
-    protected Map<String, Object> doGetAttributes()
-        throws Exception
-    {
-        final Map<String, Object> attrs = new HashMap<String, Object>();
-
-        // Add the file system's attributes first
-        final JarFileSystem fs = (JarFileSystem) getFileSystem();
-        addAll(fs.getAttributes(), attrs);
-
-        // Add this file's attributes
-        addAll(getAttributes(), attrs);
-
-        return attrs;
-    }
-
-    /**
-     * Adds the source attributes to the destination map.
-     */
-    private void addAll(final Attributes src, final Map<String, Object> dest)
-    {
-        for (final Entry<Object, Object> entry : src.entrySet())
-        {
-            // final String name = entry.getKey().toString().toLowerCase();
-            final String name = entry.getKey().toString();
-            dest.put(name, entry.getValue());
-        }
-    }
-
-    /**
-     * Return the certificates of this JarEntry.
-     */
-    @Override
-    protected Certificate[] doGetCertificates()
-    {
-        if (entry == null)
-        {
-            return null;
-        }
-
-        return ((JarEntry) entry).getCertificates();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarFileProvider.java
deleted file mode 100644
index 08d8a73..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarFileProvider.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.commons.vfs2.provider.jar;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.LayeredFileName;
-import org.apache.commons.vfs2.provider.zip.ZipFileProvider;
-
-/**
- * A file system provider for Jar files.  Provides read-only file
- * systems.  This provides access to Jar specific features like Signing and
- * Manifest Attributes.
- */
-public class JarFileProvider extends ZipFileProvider
-{
-    static final Collection<Capability> capabilities;
-
-    static
-    {
-        final Collection<Capability> combined = new ArrayList<Capability>();
-        combined.addAll(ZipFileProvider.capabilities);
-        combined.addAll(Arrays.asList(new Capability[]
-            {
-                Capability.ATTRIBUTES,
-                Capability.FS_ATTRIBUTES,
-                Capability.SIGNING,
-                Capability.MANIFEST_ATTRIBUTES,
-                Capability.VIRTUAL
-            }));
-        capabilities = Collections.unmodifiableCollection(combined);
-    }
-
-    public JarFileProvider()
-    {
-        super();
-    }
-
-    /**
-     * Creates a layered file system.  This method is called if the file system
-     * is not cached.
-     *
-     * @param scheme The URI scheme.
-     * @param file   The file to create the file system on top of.
-     * @return The file system.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final String scheme,
-                                            final FileObject file,
-                                            final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final AbstractFileName name =
-            new LayeredFileName(scheme, file.getName(), FileName.ROOT_PATH, FileType.FOLDER);
-        return new JarFileSystem(name, file, fileSystemOptions);
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarFileSystem.java
deleted file mode 100644
index 4ed50ff..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarFileSystem.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.commons.vfs2.provider.jar;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.jar.Attributes;
-import java.util.jar.Attributes.Name;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.zip.ZipFileObject;
-import org.apache.commons.vfs2.provider.zip.ZipFileSystem;
-
-/**
- * A read-only file system for Jar files.
- */
-public class JarFileSystem extends ZipFileSystem
-{
-    private Attributes attributes;
-
-    protected JarFileSystem(final AbstractFileName rootName,
-                            final FileObject file,
-                            final FileSystemOptions fileSystemOptions) throws FileSystemException
-    {
-        super(rootName, file, fileSystemOptions);
-    }
-
-//    @Override
-//    protected FileObject createFile(AbstractFileName name) throws FileSystemException
-//    {
-//        return new JarFileObject(name, null, this, false);
-//    }
-
-    @Override
-    protected ZipFile createZipFile(final File file) throws FileSystemException
-    {
-        try
-        {
-            return new JarFile(file);
-        }
-        catch (final IOException ioe)
-        {
-            throw new FileSystemException("vfs.provider.jar/open-jar-file.error", file, ioe);
-        }
-    }
-
-    @Override
-    protected ZipFileObject createZipFileObject(final AbstractFileName name,
-                                                final ZipEntry entry) throws FileSystemException
-    {
-        return new JarFileObject(name, entry, this, true);
-    }
-
-    /**
-     * Returns the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        // super.addCapabilities(caps);
-        caps.addAll(JarFileProvider.capabilities);
-    }
-
-    Attributes getAttributes() throws IOException
-    {
-        if (attributes == null)
-        {
-            final Manifest man = ((JarFile) getZipFile()).getManifest();
-            if (man == null)
-            {
-                attributes = new Attributes(1);
-            }
-            else
-            {
-                attributes = man.getMainAttributes();
-                if (attributes == null)
-                {
-                    attributes = new Attributes(1);
-                }
-            }
-        }
-
-        return attributes;
-    }
-
-    Object getAttribute(final Name attrName)
-        throws FileSystemException
-    {
-        try
-        {
-            final Attributes attr = getAttributes();
-            final String value = attr.getValue(attrName);
-            return value;
-        }
-        catch (final IOException ioe)
-        {
-            throw new FileSystemException(attrName.toString(), ioe);
-        }
-    }
-
-    Name lookupName(final String attrName)
-    {
-        if (Name.CLASS_PATH.toString().equals(attrName))
-        {
-            return Name.CLASS_PATH;
-        }
-        else if (Name.CONTENT_TYPE.toString().equals(attrName))
-        {
-            return Name.CONTENT_TYPE;
-        }
-        else if (Name.EXTENSION_INSTALLATION.toString().equals(attrName))
-        {
-            return Name.EXTENSION_INSTALLATION;
-        }
-        else if (Name.EXTENSION_LIST.toString().equals(attrName))
-        {
-            return Name.EXTENSION_LIST;
-        }
-        else if (Name.EXTENSION_NAME.toString().equals(attrName))
-        {
-            return Name.EXTENSION_NAME;
-        }
-        else if (Name.IMPLEMENTATION_TITLE.toString().equals(attrName))
-        {
-            return Name.IMPLEMENTATION_TITLE;
-        }
-        else if (Name.IMPLEMENTATION_URL.toString().equals(attrName))
-        {
-            return Name.IMPLEMENTATION_URL;
-        }
-        else if (Name.IMPLEMENTATION_VENDOR.toString().equals(attrName))
-        {
-            return Name.IMPLEMENTATION_VENDOR;
-        }
-        else if (Name.IMPLEMENTATION_VENDOR_ID.toString().equals(attrName))
-        {
-            return Name.IMPLEMENTATION_VENDOR_ID;
-        }
-        else if (Name.IMPLEMENTATION_VERSION.toString().equals(attrName))
-        {
-            return Name.IMPLEMENTATION_VENDOR;
-        }
-        else if (Name.MAIN_CLASS.toString().equals(attrName))
-        {
-            return Name.MAIN_CLASS;
-        }
-        else if (Name.MANIFEST_VERSION.toString().equals(attrName))
-        {
-            return Name.MANIFEST_VERSION;
-        }
-        else if (Name.SEALED.toString().equals(attrName))
-        {
-            return Name.SEALED;
-        }
-        else if (Name.SIGNATURE_VERSION.toString().equals(attrName))
-        {
-            return Name.SIGNATURE_VERSION;
-        }
-        else if (Name.SPECIFICATION_TITLE.toString().equals(attrName))
-        {
-            return Name.SPECIFICATION_TITLE;
-        }
-        else if (Name.SPECIFICATION_VENDOR.toString().equals(attrName))
-        {
-            return Name.SPECIFICATION_VENDOR;
-        }
-        else if (Name.SPECIFICATION_VERSION.toString().equals(attrName))
-        {
-            return Name.SPECIFICATION_VERSION;
-        }
-        else
-        {
-            return new Name(attrName);
-        }
-    }
-
-    /**
-     * Retrives the attribute with the specified name. The default
-     * implementation simply throws an exception.
-     * @param attrName The attiribute's name.
-     * @return The value of the attribute.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public Object getAttribute(final String attrName) throws FileSystemException
-    {
-        final Name name = lookupName(attrName);
-        return getAttribute(name);
-    }
-
-
-    @Override
-    protected ZipFile getZipFile() throws FileSystemException
-    {
-        // make accessible
-        return super.getZipFile();
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarURLConnectionImpl.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarURLConnectionImpl.java
deleted file mode 100644
index 119b426..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/JarURLConnectionImpl.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.commons.vfs2.provider.jar;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.JarURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.security.cert.Certificate;
-import java.util.jar.Attributes;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * A default URL connection that will work for most file systems.
- */
-public class JarURLConnectionImpl
-    extends JarURLConnection
-{
-    // This is because JarURLConnection SUCKS
-    private static final String HACK_URL = "jar:http://somehost/somejar.jar!/";
-
-    private final FileContent content;
-    private final URL parentURL;
-    private final JarFileObject file;
-    private final String entryName;
-
-    public JarURLConnectionImpl(final JarFileObject file, final FileContent content)
-        throws MalformedURLException, FileSystemException
-    {
-        //This is because JarURLConnection SUCKS!!
-        super(new URL(HACK_URL));
-
-        this.url = file.getURL();
-        this.content = content;
-        this.parentURL = file.getURL();
-        this.entryName = file.getName().getPath();
-        this.file = file;
-    }
-
-
-    @Override
-    public URL getJarFileURL()
-    {
-        return parentURL;
-    }
-
-
-    @Override
-    public String getEntryName()
-    {
-        return entryName;
-    }
-
-
-    @Override
-    public JarFile getJarFile() throws IOException
-    {
-        throw new FileSystemException("vfs.provider.jar/jar-file-no-access.error");
-    }
-
-
-    @Override
-    public Manifest getManifest() throws IOException
-    {
-        return file.getManifest();
-    }
-
-
-    @Override
-    public JarEntry getJarEntry() throws IOException
-    {
-        throw new FileSystemException("vfs.provider.jar/jar-entry-no-access.error");
-    }
-
-
-    @Override
-    public Attributes getAttributes() throws IOException
-    {
-        return file.getAttributes();
-    }
-
-
-    @Override
-    public Certificate[] getCertificates()
-    {
-        return file.doGetCertificates();
-    }
-
-
-    @Override
-    public void connect()
-    {
-        connected = true;
-    }
-
-    @Override
-    public InputStream getInputStream()
-        throws IOException
-    {
-        return content.getInputStream();
-    }
-
-    @Override
-    public OutputStream getOutputStream()
-        throws IOException
-    {
-        return content.getOutputStream();
-    }
-
-    @Override
-    public int getContentLength()
-    {
-        try
-        {
-            return (int) content.getSize();
-        }
-        catch (final FileSystemException ignored)
-        {
-            return -1;
-        }
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/package.html
deleted file mode 100644
index 8383735..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/jar/package.html
+++ /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.
--->
-<body>
-<p>The Jar File Provider.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/DefaultLocalFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/DefaultLocalFileProvider.java
deleted file mode 100644
index dae0f5c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/DefaultLocalFileProvider.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.commons.vfs2.provider.local;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider;
-import org.apache.commons.vfs2.provider.LocalFileProvider;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.util.Os;
-
-/**
- * A file system provider, which uses direct file access.
- */
-public class DefaultLocalFileProvider
-    extends AbstractOriginatingFileProvider
-    implements LocalFileProvider
-{
-    /** The provider's capabilities. */
-    public static final Collection<Capability> capabilities =
-        Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-    {
-        Capability.CREATE,
-        Capability.DELETE,
-        Capability.RENAME,
-        Capability.GET_TYPE,
-        Capability.GET_LAST_MODIFIED,
-        Capability.SET_LAST_MODIFIED_FILE,
-        Capability.SET_LAST_MODIFIED_FOLDER,
-        Capability.LIST_CHILDREN,
-        Capability.READ_CONTENT,
-        Capability.URI,
-        Capability.WRITE_CONTENT,
-        Capability.APPEND_CONTENT,
-        Capability.RANDOM_ACCESS_READ,
-        Capability.RANDOM_ACCESS_SET_LENGTH,
-        Capability.RANDOM_ACCESS_WRITE
-    }));
-
-    /**
-     * Constructs a new provider.
-     */
-    public DefaultLocalFileProvider()
-    {
-        super();
-
-        if (Os.isFamily(Os.OS_FAMILY_WINDOWS))
-        {
-            setFileNameParser(new WindowsFileNameParser());
-        }
-        else
-        {
-            setFileNameParser(new GenericFileNameParser());
-        }
-    }
-
-    /**
-     * Determines if a name is an absolute file name.
-     * @param name The file name.
-     * @return true if the name is absolute, false otherwise.
-     */
-    @Override
-    public boolean isAbsoluteLocalName(final String name)
-    {
-        return ((LocalFileNameParser) getFileNameParser()).isAbsoluteName(name);
-    }
-
-    /**
-     * Finds a local file, from its local name.
-     * @param name The name of the file to locate.
-     * @return the located FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject findLocalFile(final String name)
-        throws FileSystemException
-    {
-        final String scheme = "file:";
-        final StringBuilder uri = new StringBuilder(name.length() + scheme.length());
-        uri.append(scheme);
-        uri.append(name);
-        final FileName filename = parseUri(null, uri.toString());
-        return findFile(filename, null);
-    }
-
-    /**
-     * Finds a local file.
-     * @param file The File to locate.
-     * @return the located FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject findLocalFile(final File file)
-        throws FileSystemException
-    {
-        return findLocalFile(UriParser.encode(file.getAbsolutePath()));
-        // return findLocalFile(file.getAbsolutePath());
-    }
-
-    /**
-     * Creates the filesystem.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        // Create the file system
-        final LocalFileName rootName = (LocalFileName) name;
-        return new LocalFileSystem(rootName, rootName.getRootFile(), fileSystemOptions);
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/GenericFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/GenericFileNameParser.java
deleted file mode 100644
index f75a828..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/GenericFileNameParser.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.commons.vfs2.provider.local;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-
-/**
- * A general-purpose file name parser.
- */
-public class GenericFileNameParser
-    extends LocalFileNameParser
-{
-    private static final GenericFileNameParser INSTANCE = new GenericFileNameParser();
-
-    /**
-     * retrieve a instance to this parser.
-     *
-     * @return the parser
-     */
-    public static GenericFileNameParser getInstance()
-    {
-        return INSTANCE;
-    }
-
-    /**
-     * Pops the root prefix off a URI, which has had the scheme removed.
-     */
-    @Override
-    protected String extractRootPrefix(final String uri,
-                                       final StringBuilder name)
-        throws FileSystemException
-    {
-        // TODO - this class isn't generic at all.  Need to fix this
-
-        // Looking for <sep>
-        if (name.length() == 0 || name.charAt(0) != '/')
-        {
-            throw new FileSystemException("vfs.provider.local/not-absolute-file-name.error", uri);
-        }
-
-        // do not strip the separator, BUT also return it ...
-        return "/";
-    }
-
-    /*
-     * ... this is why whe need this:
-     * here the rootFilename can only be "/" (see above) put this "/" is also in the pathname
-     * so its of no value for the LocalFileName instance
-     */
-    @Override
-    protected FileName createFileName(final String scheme, final String rootFile,
-                                      final String path, final FileType type)
-    {
-        return new LocalFileName(scheme, "", path, type);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.java
deleted file mode 100644
index 8d5beef..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFile.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.commons.vfs2.provider.local;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * A file object implementation which uses direct file access.
- */
-public class LocalFile extends AbstractFileObject<LocalFileSystem>
-{
-    private final String rootFile;
-
-    private File file;
-
-    /**
-     * Creates a non-root file.
-     *
-     * @param fileSystem the file system this file belongs to.
-     * @param rootFile the root file for the file system.
-     * @param name the file name on this file system.
-     * @throws FileSystemException if an error occurs.
-     */
-    protected LocalFile(final LocalFileSystem fileSystem,
-                        final String rootFile,
-                        final AbstractFileName name) throws FileSystemException
-    {
-        super(name, fileSystem);
-        this.rootFile = rootFile;
-    }
-
-    /**
-     * Returns the local file that this file object represents.
-     *
-     * @return the local file that this file object represents.
-     */
-    protected File getLocalFile()
-    {
-        return file;
-    }
-
-    /**
-     * Attaches this file object to its file resource.
-     */
-    @Override
-    protected void doAttach() throws Exception
-    {
-        if (file == null)
-        {
-            // Remove the "file:///"
-            // LocalFileName localFileName = (LocalFileName) getName();
-            final String fileName = rootFile + getName().getPathDecoded();
-            // fileName = UriParser.decode(fileName);
-            file = new File(fileName);
-        }
-    }
-
-    /**
-     * Returns the file's type.
-     */
-    @Override
-    protected FileType doGetType() throws Exception
-    {
-        // JDK BUG: 6192331
-        // if (!file.exists())
-        if (!file.exists() && file.length() < 1)
-        {
-            return FileType.IMAGINARY;
-        }
-
-        if (file.isDirectory())
-        {
-            return FileType.FOLDER;
-        }
-
-        // In doubt, treat an existing file as file
-        // if (file.isFile())
-        // {
-            return FileType.FILE;
-        // }
-
-        // throw new FileSystemException("vfs.provider.local/get-type.error", file);
-    }
-
-    /**
-     * Returns the children of the file.
-     */
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        return UriParser.encode(file.list());
-    }
-
-    /**
-     * Deletes this file, and all children.
-     */
-    @Override
-    protected void doDelete() throws Exception
-    {
-        if (!file.delete())
-        {
-            throw new FileSystemException("vfs.provider.local/delete-file.error", file);
-        }
-    }
-
-    /**
-     * rename this file
-     */
-    @Override
-    protected void doRename(final FileObject newFile) throws Exception
-    {
-        final LocalFile newLocalFile = (LocalFile) FileObjectUtils.getAbstractFileObject(newFile);
-
-        if (!file.renameTo(newLocalFile.getLocalFile()))
-        {
-            throw new FileSystemException("vfs.provider.local/rename-file.error",
-                file.toString(), newFile.toString());
-        }
-    }
-
-    /**
-     * Creates this folder.
-     */
-    @Override
-    protected void doCreateFolder() throws Exception
-    {
-        if (!file.mkdirs())
-        {
-            throw new FileSystemException("vfs.provider.local/create-folder.error", file);
-        }
-    }
-
-    /**
-     * Determines if this file can be written to.
-     */
-    @Override
-    protected boolean doIsWriteable() throws FileSystemException
-    {
-        return file.canWrite();
-    }
-
-    @Override
-    protected boolean doSetWritable(final boolean writable, final boolean ownerOnly) throws Exception
-    {
-        return file.setWritable(writable, ownerOnly);
-    }
-
-    /**
-     * Determines if this file is hidden.
-     */
-    @Override
-    protected boolean doIsExecutable()
-    {
-        return file.canExecute();
-    }
-
-    /**
-     * Determines if this file is hidden.
-     */
-    @Override
-    protected boolean doIsHidden()
-    {
-        return file.isHidden();
-    }
-
-    /**
-     * Determines if this file can be read.
-     */
-    @Override
-    protected boolean doIsReadable() throws FileSystemException
-    {
-        return file.canRead();
-    }
-
-    @Override
-    protected boolean doSetReadable(final boolean readable, final boolean ownerOnly) throws Exception
-    {
-        return file.setReadable(readable, ownerOnly);
-    }
-
-    @Override
-    protected boolean doSetExecutable(final boolean executable, final boolean ownerOnly) throws Exception
-    {
-        return file.setExecutable(executable, ownerOnly);
-    }
-
-    /**
-     * Gets the last modified time of this file.
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws FileSystemException
-    {
-        return file.lastModified();
-    }
-
-    /**
-     * Sets the last modified time of this file.
-     * @since 2.0
-     */
-    @Override
-    protected boolean doSetLastModifiedTime(final long modtime) throws FileSystemException
-    {
-        return file.setLastModified(modtime);
-    }
-
-    /**
-     * Creates an input stream to read the content from.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        return new FileInputStream(file);
-    }
-
-    /**
-     * Creates an output stream to write the file content to.
-     */
-    @Override
-    protected OutputStream doGetOutputStream(final boolean bAppend)
-        throws Exception
-    {
-        return new FileOutputStream(file.getPath(), bAppend);
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        return file.length();
-    }
-
-    @Override
-    protected RandomAccessContent doGetRandomAccessContent(final RandomAccessMode mode) throws Exception
-    {
-        return new LocalFileRandomAccessContent(file, mode);
-    }
-
-    @Override
-    protected boolean doIsSameFile(final FileObject destFile) throws FileSystemException
-    {
-        if (!FileObjectUtils.isInstanceOf(destFile, LocalFile.class))
-        {
-            return false;
-        }
-
-        final LocalFile destLocalFile = (LocalFile) FileObjectUtils.getAbstractFileObject(destFile);
-        if (!exists() || !destLocalFile.exists())
-        {
-            return false;
-        }
-
-        try
-        {
-            return file.getCanonicalPath().equals(destLocalFile.file.getCanonicalPath());
-        }
-        catch (final IOException e)
-        {
-            throw new FileSystemException(e);
-        }
-    }
-
-    /**
-     * Returns the URI of the file.
-     * @return The URI of the file.
-     */
-    @Override
-    public String toString()
-    {
-        try
-        {
-            // VFS-325: URI may contain percent-encoded values as part of filename, so decode
-            // those characters before returning
-            return UriParser.decode(getName().getURI());
-        }
-        catch (final FileSystemException e)
-        {
-            return getName().getURI();
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileName.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileName.java
deleted file mode 100644
index 74795b5..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileName.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.commons.vfs2.provider.local;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.UriParser;
-
-/**
- * A local file URI.
- */
-public class LocalFileName extends AbstractFileName
-{
-    // URI Characters that are possible in local filenames, but must be escaped
-    // for proper URI handling.
-    //
-    // How reserved URI chars were selected:
-    //
-    //  URIs can contain :, /, ?, #, @
-    //      See http://download.oracle.com/javase/6/docs/api/java/net/URI.html
-    //          http://tools.ietf.org/html/rfc3986#section-2.2
-    //
-    //  Since : and / occur before the path, only chars after path are escaped (i.e., # and ?)
-    //  ? is a reserved filesystem character for Windows and Unix, so can't be part of a filename.
-    //  Therefore only # is a reserved char in a URI as part of the path that can be in the filename.
-    private static final char[] RESERVED_URI_CHARS = {'#'};
-
-
-    private final String rootFile;
-
-    protected LocalFileName(final String scheme,
-                            final String rootFile,
-                            final String path,
-                            final FileType type)
-    {
-        super(scheme, path, type);
-        this.rootFile = rootFile;
-    }
-
-    /**
-     * Returns the root file for this file.
-     * @return The root file name.
-     */
-    public String getRootFile()
-    {
-        return rootFile;
-    }
-
-    /**
-     * Factory method for creating name instances.
-     * @param path The file path.
-     * @param type The file type.
-     * @return The FileName.
-     */
-    @Override
-    public FileName createName(final String path, final FileType type)
-    {
-        return new LocalFileName(getScheme(), rootFile, path, type);
-    }
-
-    /**
-     * Returns the absolute URI of the file.
-     * @return The absolute URI of the file.
-     */
-    @Override
-    public String getURI()
-    {
-        String uri = super.getURI();
-
-        if (uri != null && uri.length() > 0)
-        {
-            try
-            {
-                // VFS-325: Handle URI special characters in filename
-                // Decode the base uri and re-encode with URI special characters
-                uri = UriParser.decode(uri);
-
-                uri = UriParser.encode(uri, RESERVED_URI_CHARS);
-            }
-            catch (final FileSystemException e)
-            {
-                // Default to base uri value
-            }
-        }
-
-        return uri;
-    }
-
-    /**
-     * returns a "friendly path", this is a path without a password.
-     * @return The "friendly" URI.
-     */
-    @Override
-    public String getFriendlyURI()
-    {
-        String uri = super.getFriendlyURI();
-
-        if (uri != null && uri.length() > 0)
-        {
-            try
-            {
-                // VFS-325: Handle URI special characters in filename
-                // Decode the base uri and re-encode with URI special characters
-                uri = UriParser.decode(uri);
-
-                uri = UriParser.encode(uri, RESERVED_URI_CHARS);
-            }
-            catch (final FileSystemException e)
-            {
-                // Default to base uri value
-            }
-        }
-
-        return uri;
-    }
-
-    /**
-     * Returns the decoded URI of the file.
-     * @return the FileName as a URI.
-     */
-    @Override
-    public String toString()
-    {
-        try
-        {
-            return UriParser.decode(super.getURI());
-        }
-        catch (final FileSystemException e)
-        {
-            return super.getURI();
-        }
-    }
-
-
-
-    /**
-     * Builds the root URI for this file name.
-     */
-    @Override
-    protected void appendRootUri(final StringBuilder buffer, final boolean addPassword)
-    {
-        buffer.append(getScheme());
-        buffer.append("://");
-        buffer.append(rootFile);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileNameParser.java
deleted file mode 100644
index d272f93..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileNameParser.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.commons.vfs2.provider.local;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileNameParser;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.provider.VfsComponentContext;
-
-/**
- * A name parser.
- */
-public abstract class LocalFileNameParser extends AbstractFileNameParser
-{
-    /**
-     * Determines if a name is an absolute file name.
-     * @param name The file name.
-     * @return true if the name is absolute, false otherwise.
-     */
-    public boolean isAbsoluteName(final String name)
-    {
-        // TODO - this is yucky
-        final StringBuilder b = new StringBuilder(name);
-        try
-        {
-            UriParser.fixSeparators(b);
-            extractRootPrefix(name, b);
-            return true;
-        }
-        catch (final FileSystemException e)
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Pops the root prefix off a URI, which has had the scheme removed.
-     *
-     * @param name the URI to modify.
-     * @param uri the whole URI for error reporting.
-     * @return the root prefix extracted.
-     * @throws FileSystemException if an error occurs.
-     */
-    protected abstract String extractRootPrefix(final String uri,
-                                                final StringBuilder name)
-        throws FileSystemException;
-
-
-    @Override
-    public FileName parseUri(final VfsComponentContext context, final FileName base, final String uri)
-        throws FileSystemException
-    {
-        final StringBuilder name = new StringBuilder();
-
-        // Extract the scheme
-        String scheme = UriParser.extractScheme(uri, name);
-        if (scheme == null)
-        {
-            scheme = "file";
-        }
-
-        // Remove encoding, and adjust the separators
-        UriParser.canonicalizePath(name, 0, name.length(), this);
-
-        UriParser.fixSeparators(name);
-
-        // Extract the root prefix
-        final String rootFile = extractRootPrefix(uri, name);
-
-        // Normalise the path
-        final FileType fileType = UriParser.normalisePath(name);
-
-        final String path = name.toString();
-
-        return createFileName(
-            scheme,
-            rootFile,
-            path,
-            fileType);
-    }
-
-    protected abstract FileName createFileName(String scheme, final String rootFile, final String path,
-                                               final FileType type);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileRandomAccessContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileRandomAccessContent.java
deleted file mode 100644
index ba9d5a1..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileRandomAccessContent.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.local;
-
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.AbstractRandomAccessContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * Implements {@link org.apache.commons.vfs2.RandomAccessContent RandomAccessContent} for local files.
- */
-class LocalFileRandomAccessContent extends AbstractRandomAccessContent
-{
-    // private final LocalFile localFile;
-    private final RandomAccessFile raf;
-    private final InputStream rafis;
-
-    LocalFileRandomAccessContent(final File localFile, final RandomAccessMode mode) throws FileSystemException
-    {
-        super(mode);
-
-        try
-        {
-            raf = new RandomAccessFile(localFile, mode.getModeString());
-            rafis = new InputStream()
-            {
-                @Override
-                public int read() throws IOException
-                {
-                    try
-                    {
-                        return raf.readByte();
-                    }
-                    catch (final EOFException e)
-                    {
-                        return -1;
-                    }
-                }
-
-                @Override
-                public long skip(final long n) throws IOException
-                {
-                    raf.seek(raf.getFilePointer() + n);
-                    return n;
-                }
-
-                @Override
-                public void close() throws IOException
-                {
-                    raf.close();
-                }
-
-                @Override
-                public int read(final byte[] b) throws IOException
-                {
-                    return raf.read(b);
-                }
-
-                @Override
-                public int read(final byte[] b, final int off, final int len) throws IOException
-                {
-                    return raf.read(b, off, len);
-                }
-
-                @Override
-                public int available() throws IOException
-                {
-                    final long available = raf.length() - raf.getFilePointer();
-                    if (available > Integer.MAX_VALUE)
-                    {
-                        return Integer.MAX_VALUE;
-                    }
-
-                    return (int) available;
-                }
-            };
-        }
-        catch (final FileNotFoundException e)
-        {
-            throw new FileSystemException("vfs.provider/random-access-open-failed.error", localFile);
-        }
-    }
-
-    @Override
-    public long getFilePointer() throws IOException
-    {
-        return raf.getFilePointer();
-    }
-
-    @Override
-    public void seek(final long pos) throws IOException
-    {
-        raf.seek(pos);
-    }
-
-    @Override
-    public long length() throws IOException
-    {
-        return raf.length();
-    }
-
-    @Override
-    public void close() throws IOException
-    {
-        raf.close();
-    }
-
-    @Override
-    public byte readByte() throws IOException
-    {
-        return raf.readByte();
-    }
-
-    @Override
-    public char readChar() throws IOException
-    {
-        return raf.readChar();
-    }
-
-    @Override
-    public double readDouble() throws IOException
-    {
-        return raf.readDouble();
-    }
-
-    @Override
-    public float readFloat() throws IOException
-    {
-        return raf.readFloat();
-    }
-
-    @Override
-    public int readInt() throws IOException
-    {
-        return raf.readInt();
-    }
-
-    @Override
-    public int readUnsignedByte() throws IOException
-    {
-        return raf.readUnsignedByte();
-    }
-
-    @Override
-    public int readUnsignedShort() throws IOException
-    {
-        return raf.readUnsignedShort();
-    }
-
-    @Override
-    public long readLong() throws IOException
-    {
-        return raf.readLong();
-    }
-
-    @Override
-    public short readShort() throws IOException
-    {
-        return raf.readShort();
-    }
-
-    @Override
-    public boolean readBoolean() throws IOException
-    {
-        return raf.readBoolean();
-    }
-
-    @Override
-    public int skipBytes(final int n) throws IOException
-    {
-        return raf.skipBytes(n);
-    }
-
-    @Override
-    public void readFully(final byte[] b) throws IOException
-    {
-        raf.readFully(b);
-    }
-
-    @Override
-    public void readFully(final byte[] b, final int off, final int len) throws IOException
-    {
-        raf.readFully(b, off, len);
-    }
-
-    @Override
-    public String readUTF() throws IOException
-    {
-        return raf.readUTF();
-    }
-
-    @Override
-    public void writeDouble(final double v) throws IOException
-    {
-        raf.writeDouble(v);
-    }
-
-    @Override
-    public void writeFloat(final float v) throws IOException
-    {
-        raf.writeFloat(v);
-    }
-
-    @Override
-    public void write(final int b) throws IOException
-    {
-        raf.write(b);
-    }
-
-    @Override
-    public void writeByte(final int v) throws IOException
-    {
-        raf.writeByte(v);
-    }
-
-    @Override
-    public void writeChar(final int v) throws IOException
-    {
-        raf.writeChar(v);
-    }
-
-    @Override
-    public void writeInt(final int v) throws IOException
-    {
-        raf.writeInt(v);
-    }
-
-    @Override
-    public void writeShort(final int v) throws IOException
-    {
-        raf.writeShort(v);
-    }
-
-    @Override
-    public void writeLong(final long v) throws IOException
-    {
-        raf.writeLong(v);
-    }
-
-    @Override
-    public void writeBoolean(final boolean v) throws IOException
-    {
-        raf.writeBoolean(v);
-    }
-
-    @Override
-    public void write(final byte[] b) throws IOException
-    {
-        raf.write(b);
-    }
-
-    @Override
-    public void write(final byte[] b, final int off, final int len) throws IOException
-    {
-        raf.write(b, off, len);
-    }
-
-    @Override
-    public void writeBytes(final String s) throws IOException
-    {
-        raf.writeBytes(s);
-    }
-
-    @Override
-    public void writeChars(final String s) throws IOException
-    {
-        raf.writeChars(s);
-    }
-
-    @Override
-    public void writeUTF(final String str) throws IOException
-    {
-        raf.writeUTF(str);
-    }
-
-    @Override
-    public InputStream getInputStream() throws IOException
-    {
-        return rafis;
-    }
-
-    @Override
-    public void setLength(final long newLength) throws IOException
-    {
-        raf.setLength(newLength);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileSystem.java
deleted file mode 100644
index 97b700b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/LocalFileSystem.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.commons.vfs2.provider.local;
-
-import java.io.File;
-import java.io.FilePermission;
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-
-/**
- * A local file system.
- */
-public class LocalFileSystem
-    extends AbstractFileSystem
-{
-    private final String rootFile;
-
-    public LocalFileSystem(final FileName rootName,
-                           final String rootFile,
-                           final FileSystemOptions opts)
-    {
-        super(rootName, null, opts);
-        this.rootFile = rootFile;
-    }
-
-    /**
-     * Creates a file object.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws FileSystemException
-    {
-        // Create the file
-        return new LocalFile(this, rootFile, name);
-    }
-
-    /**
-     * Returns the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(DefaultLocalFileProvider.capabilities);
-    }
-
-    /**
-     * Creates a temporary local copy of a file and its descendants.
-     */
-    @Override
-    protected File doReplicateFile(final FileObject fileObject,
-                                   final FileSelector selector)
-        throws Exception
-    {
-        final LocalFile localFile = (LocalFile) FileObjectUtils.getAbstractFileObject(fileObject);
-        final File file = localFile.getLocalFile();
-        final SecurityManager sm = System.getSecurityManager();
-        if (sm != null)
-        {
-            final FilePermission requiredPerm = new FilePermission(file.getAbsolutePath(), "read");
-            sm.checkPermission(requiredPerm);
-        }
-        return file;
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileName.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileName.java
deleted file mode 100644
index 9b387b7..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileName.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.commons.vfs2.provider.local;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileType;
-
-/**
- * A local file URI.
- */
-public class WindowsFileName extends LocalFileName
-{
-    protected WindowsFileName(final String scheme,
-                              final String rootFile,
-                              final String path,
-                              final FileType type)
-    {
-        super(scheme, rootFile, path, type);
-    }
-
-    /**
-     * Factory method for creating name instances.
-     * @param path The file path.
-     * @param type The file type.
-     * @return The FileName.
-     */
-    @Override
-    public FileName createName(final String path, final FileType type)
-    {
-        return new WindowsFileName(getScheme(), getRootFile(), path, type);
-    }
-
-    /**
-     * Builds the root URI for this file name.
-     */
-    @Override
-    protected void appendRootUri(final StringBuilder buffer, final boolean addPassword)
-    {
-        buffer.append(getScheme());
-        buffer.append("://");
-        if (getRootFile() != null && !getRootFile().startsWith("/"))
-        {
-            // next is drive-letter (else unc name)
-            buffer.append("/");
-        }
-        buffer.append(getRootFile());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileNameParser.java
deleted file mode 100644
index cd5f4e5..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/WindowsFileNameParser.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.commons.vfs2.provider.local;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-
-/**
- * A parser for Windows file names.
- */
-public class WindowsFileNameParser extends LocalFileNameParser
-{
-    /**
-     * Pops the root prefix off a URI, which has had the scheme removed.
-     */
-    @Override
-    protected String extractRootPrefix(final String uri,
-                                       final StringBuilder name)
-        throws FileSystemException
-    {
-        return extractWindowsRootPrefix(uri, name);
-    }
-
-    @Override
-    protected FileName createFileName(final String scheme, final String rootFile,
-                                      final String path, final FileType type)
-    {
-        return new WindowsFileName(scheme, rootFile, path, type);
-    }
-
-    /**
-     * Extracts a Windows root prefix from a name.
-     */
-    private String extractWindowsRootPrefix(final String uri,
-                                            final StringBuilder name)
-        throws FileSystemException
-    {
-        // Looking for:
-        // ('/'){0, 3} <letter> ':' '/'
-        // ['/'] '//' <name> '/' <name> ( '/' | <end> )
-
-        // Skip over first 4 (unc) leading '/' chars
-        int startPos = 0;
-        final int maxlen = Math.min(4, name.length());
-        for (; startPos < maxlen && name.charAt(startPos) == '/'; startPos++)
-        {
-        }
-        if (startPos == maxlen && name.length() > (startPos + 1) && name.charAt(startPos + 1) == '/')
-        {
-            // Too many '/'
-            throw new FileSystemException("vfs.provider.local/not-absolute-file-name.error", uri);
-        }
-        name.delete(0, startPos);
-
-        // Look for drive name
-        final String driveName = extractDrivePrefix(name);
-        if (driveName != null)
-        {
-            return driveName;
-        }
-
-        // Look for UNC name
-        if (startPos < 2)
-        {
-            throw new FileSystemException("vfs.provider.local/not-absolute-file-name.error", uri);
-        }
-
-        return "//" + extractUNCPrefix(uri, name);
-    }
-
-    /**
-     * Extracts a drive prefix from a path.  Leading '/' chars have been removed.
-     */
-    private String extractDrivePrefix(final StringBuilder name)
-    {
-        // Looking for <letter> ':' '/'
-        if (name.length() < 3)
-        {
-            // Too short
-            return null;
-        }
-        final char ch = name.charAt(0);
-        if (ch == '/' || ch == ':')
-        {
-            // Missing drive letter
-            return null;
-        }
-        if (name.charAt(1) != ':')
-        {
-            // Missing ':'
-            return null;
-        }
-        if (name.charAt(2) != '/')
-        {
-            // Missing separator
-            return null;
-        }
-
-        final String prefix = name.substring(0, 2);
-        name.delete(0, 2);
-
-        return prefix.intern();
-    }
-
-    /**
-     * Extracts a UNC name from a path.  Leading '/' chars have been removed.
-     */
-    private String extractUNCPrefix(final String uri,
-                                    final StringBuilder name)
-        throws FileSystemException
-    {
-        // Looking for <name> '/' <name> ( '/' | <end> )
-
-        // Look for first separator
-        final int maxpos = name.length();
-        int pos = 0;
-        for (; pos < maxpos && name.charAt(pos) != '/'; pos++)
-        {
-        }
-        pos++;
-        if (pos >= maxpos)
-        {
-            throw new FileSystemException("vfs.provider.local/missing-share-name.error", uri);
-        }
-
-        // Now have <name> '/'
-        final int startShareName = pos;
-        for (; pos < maxpos && name.charAt(pos) != '/'; pos++)
-        {
-        }
-        if (pos == startShareName)
-        {
-            throw new FileSystemException("vfs.provider.local/missing-share-name.error", uri);
-        }
-
-        // Now have <name> '/' <name> ( '/' | <end> )
-        final String prefix = name.substring(0, pos);
-        name.delete(0, pos);
-        return prefix;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/package.html
deleted file mode 100644
index 2936b87..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/local/package.html
+++ /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.
--->
-<body>
-<p>The Local File Provider.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/package.html
deleted file mode 100644
index 27fac1e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/package.html
+++ /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.
--->
-<body>
-<p>The File Provider API, and utility classes.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileData.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileData.java
deleted file mode 100644
index d27a34e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileData.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.commons.vfs2.provider.ram;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-
-/**
- * RAM File Object Data.
- */
-class RamFileData implements Serializable
-{
-    static final byte[] EMPTY = new byte[0];
-
-    /**
-     * serialVersionUID format is YYYYMMDD for the date of the last binary change.
-     */
-    private static final long serialVersionUID = 20101208L;
-
-    /**
-     * File Name.
-     */
-    private FileName name;
-
-    /**
-     * File Type.
-     */
-    private FileType type;
-
-    /**
-     * Bytes.
-     */
-    private byte[] content;
-
-    /**
-     * Last modified time
-     */
-    private long lastModified;
-
-    /**
-     * Children
-     */
-    private final Collection<RamFileData> children;
-
-    /**
-     * Constructor.
-     * @param name The file name.
-     */
-    public RamFileData(final FileName name)
-    {
-        super();
-        this.children = Collections.synchronizedCollection(new ArrayList<RamFileData>());
-        this.clear();
-        if (name == null)
-        {
-            throw new IllegalArgumentException("name can not be null");
-        }
-        this.name = name;
-    }
-
-    /**
-     * @return Returns the buffer.
-     */
-    byte[] getContent()
-    {
-        return content;
-    }
-
-    /**
-     * @param content The buffer.
-     */
-    void setContent(final byte[] content)
-    {
-        updateLastModified();
-        this.content = content;
-    }
-
-    /**
-     * @return Returns the lastModified.
-     */
-    long getLastModified()
-    {
-        return lastModified;
-    }
-
-    /**
-     * @param lastModified
-     *            The lastModified to set.
-     */
-    void setLastModified(final long lastModified)
-    {
-        this.lastModified = lastModified;
-    }
-
-    /**
-     * @return Returns the type.
-     */
-    FileType getType()
-    {
-        return type;
-    }
-
-    /**
-     * @param type
-     *            The type to set.
-     */
-    void setType(final FileType type)
-    {
-        this.type = type;
-    }
-
-    /**
-     */
-    void clear()
-    {
-        this.content = EMPTY;
-        updateLastModified();
-        this.type = FileType.IMAGINARY;
-        this.children.clear();
-        this.name = null;
-    }
-
-    void updateLastModified()
-    {
-        this.lastModified = System.currentTimeMillis();
-    }
-
-    /**
-     * @return Returns the name.
-     */
-    FileName getName()
-    {
-        return name;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.lang.Object#toString()
-     */
-    @Override
-    public String toString()
-    {
-        return this.name.toString();
-    }
-
-    /**
-     * Add a child.
-     *
-     * @param data The file data.
-     * @throws FileSystemException if an error occurs.
-     */
-    void addChild(final RamFileData data) throws FileSystemException
-    {
-        if (!this.getType().hasChildren())
-        {
-            throw new FileSystemException(
-                    "A child can only be added in a folder");
-        }
-
-        if (data == null)
-        {
-            throw new FileSystemException("No child can be null");
-        }
-
-        if (this.children.contains(data))
-        {
-            throw new FileSystemException("Child already exists. " + data);
-        }
-
-        this.children.add(data);
-        updateLastModified();
-    }
-
-    /**
-     * Remove a child.
-     *
-     * @param data The file data.
-     * @throws FileSystemException if an error occurs.
-     */
-    void removeChild(final RamFileData data) throws FileSystemException
-    {
-        if (!this.getType().hasChildren())
-        {
-            throw new FileSystemException(
-                    "A child can only be removed from a folder");
-        }
-        if (!this.children.contains(data))
-        {
-            throw new FileSystemException("Child not found. " + data);
-        }
-        this.children.remove(data);
-        updateLastModified();
-    }
-
-    /**
-     * @return Returns the children.
-     */
-    Collection<RamFileData> getChildren()
-    {
-        if (name == null)
-        {
-            throw new IllegalStateException("Data is clear");
-        }
-        return children;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.lang.Object#equals(java.lang.Object)
-     */
-    @Override
-    public boolean equals(final Object o)
-    {
-        if (this == o)
-        {
-            return true;
-        }
-        if (!(o instanceof RamFileData))
-        {
-            return false;
-        }
-        final RamFileData data = (RamFileData) o;
-        return this.getName().equals(data.getName());
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.lang.Object#hashCode()
-     */
-    @Override
-    public int hashCode()
-    {
-        return this.getName().hashCode();
-    }
-
-    boolean hasChildren(final RamFileData data)
-    {
-        return this.children.contains(data);
-    }
-
-    /**
-     * @return Returns the size of the buffer
-     */
-    int size()
-    {
-        return content.length;
-    }
-
-    /**
-     * Resize the buffer
-     *
-     * @param newSize The new buffer size.
-     */
-    void resize(final long newSize)
-    {
-        // A future implementation may allow longs/multiple buffer/and so on
-        if (newSize > Integer.MAX_VALUE)
-        {
-            throw new IllegalArgumentException(String.format("newSize(%d) > Integer.MAX_VALUE(%d)", newSize,
-                    Integer.MAX_VALUE));
-        }
-        final int resize = (int) newSize;
-        final int size = this.size();
-        final byte[] newBuf = new byte[resize];
-        System.arraycopy(this.content, 0, newBuf, 0, Math.min(resize, size));
-        this.content = newBuf;
-        updateLastModified();
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileObject.java
deleted file mode 100644
index b0bad27..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileObject.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.commons.vfs2.provider.ram;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * A RAM File contains a single RAM FileData instance, it provides methods to access the data by implementing FileObject
- * interface.
- */
-public class RamFileObject extends AbstractFileObject<RamFileSystem>
-{
-    /**
-     * RAM File Object Data.
-     */
-    private RamFileData data;
-
-    /**
-     * @param name
-     *            The name of the file.
-     * @param fs
-     *            The FileSystem.
-     */
-    protected RamFileObject(final AbstractFileName name, final RamFileSystem fs)
-    {
-        super(name, fs);
-        this.getAbstractFileSystem().attach(this);
-    }
-
-    private void save() throws FileSystemException
-    {
-        this.getAbstractFileSystem().save(this);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetType()
-     */
-    @Override
-    protected FileType doGetType() throws Exception
-    {
-        return data.getType();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doListChildren()
-     */
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        return this.getAbstractFileSystem().listChildren(this.getName());
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetContentSize()
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        return this.size();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetInputStream()
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        // VFS-210: ram allows to gather an input stream even from a directory. So we need to check the type anyway.
-        if (!getType().hasContent())
-        {
-            throw new FileSystemException("vfs.provider/read-not-file.error", getName());
-        }
-
-        return new ByteArrayInputStream(this.data.getContent());
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetOutputStream(boolean)
-     */
-    @Override
-    protected OutputStream doGetOutputStream(final boolean bAppend) throws Exception
-    {
-        if (!bAppend)
-        {
-            this.data.setContent(RamFileData.EMPTY);
-        }
-        return new RamFileOutputStream(this);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doDelete()
-     */
-    @Override
-    protected void doDelete() throws Exception
-    {
-
-        if (this.isContentOpen())
-        {
-            throw new FileSystemException(this.getName() + " cannot be deleted while the file is openg");
-        }
-        getAbstractFileSystem().delete(this);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetLastModifiedTime()
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        return data.getLastModified();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doSetLastModifiedTime(long)
-     */
-    /** @since 2.0 */
-    @Override
-    protected boolean doSetLastModifiedTime(final long modtime) throws Exception
-    {
-        data.setLastModified(modtime);
-        return true;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doCreateFolder()
-     */
-    @Override
-    protected void doCreateFolder() throws Exception
-    {
-        this.injectType(FileType.FOLDER);
-        this.save();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doRename(org.apache.commons.vfs2.FileObject)
-     */
-    @Override
-    protected void doRename(final FileObject newFile) throws Exception
-    {
-        final RamFileObject newRamFileObject = (RamFileObject) FileObjectUtils.getAbstractFileObject(newFile);
-        getAbstractFileSystem().rename(this, newRamFileObject);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doGetRandomAccessContent(
-     * org.apache.commons.vfs2.util.RandomAccessMode)
-     */
-    @Override
-    protected RandomAccessContent doGetRandomAccessContent(final RandomAccessMode mode) throws Exception
-    {
-        return new RamFileRandomAccessContent(this, mode);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#doAttach()
-     */
-    @Override
-    protected void doAttach() throws Exception
-    {
-        this.getAbstractFileSystem().attach(this);
-    }
-
-    /**
-     * @return Returns the data.
-     */
-    RamFileData getData()
-    {
-        return data;
-    }
-
-    /**
-     * @param data
-     *            The data to set.
-     */
-    void setData(final RamFileData data)
-    {
-        this.data = data;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#injectType(org.apache.commons.vfs2.FileType)
-     */
-    @Override
-    protected void injectType(final FileType fileType)
-    {
-        this.data.setType(fileType);
-        super.injectType(fileType);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileObject#endOutput()
-     */
-    @Override
-    protected void endOutput() throws Exception
-    {
-        super.endOutput();
-        this.save();
-    }
-
-    /**
-     * @return Returns the size of the {@link RamFileData}.
-     */
-    int size()
-    {
-        return data == null ? 0 : data.size();
-    }
-
-    /**
-     * @param newSize
-     * @throws IOException
-     *             if the new size exceeds the limit
-     */
-    synchronized void resize(final long newSize) throws IOException
-    {
-        final RamFileSystem afs = getAbstractFileSystem();
-        final FileSystemOptions afsOptions = afs.getFileSystemOptions();
-        if (afsOptions != null)
-        {
-            final long maxSize = RamFileSystemConfigBuilder.getInstance().getLongMaxSize(afsOptions);
-            if (afs.size() + newSize - this.size() > maxSize)
-            {
-                throw new IOException("FileSystem capacity (" + maxSize + ") exceeded.");
-            }
-        }
-        this.data.resize(newSize);
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileOutputStream.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileOutputStream.java
deleted file mode 100644
index ed62961..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileOutputStream.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.commons.vfs2.provider.ram;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * OutputStream to a RamFile.
- */
-public class RamFileOutputStream extends OutputStream
-{
-
-    /**
-     * File.
-     */
-    protected RamFileObject file;
-
-    /**
-     * buffer.
-     */
-    protected byte[] buffer1 = new byte[1];
-
-    /** File is open or closed */
-    protected boolean closed = false;
-
-    private IOException exception;
-
-    /**
-     * @param file The base file.
-     */
-    public RamFileOutputStream(final RamFileObject file)
-    {
-        super();
-        this.file = file;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#write(byte[], int, int)
-     */
-    @Override
-    public void write(final byte[] b, final int off, final int len) throws IOException
-    {
-        final RamFileData data = this.file.getData();
-        final int size = data.size();
-        final int newSize = size + len;
-        // Store the Exception in order to notify the client again on close()
-        try
-        {
-            this.file.resize(newSize);
-        }
-        catch (final IOException e)
-        {
-            this.exception = e;
-            throw e;
-        }
-        System.arraycopy(b, off, data.getContent(), size, len);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#write(int)
-     */
-    @Override
-    public void write(final int b) throws IOException
-    {
-        buffer1[0] = (byte) b;
-        this.write(buffer1);
-    }
-
-    @Override
-    public void flush() throws IOException
-    {
-    }
-
-    @Override
-    public void close() throws IOException
-    {
-        if (closed)
-        {
-            return;
-        }
-        // Notify on close that there was an IOException while writing
-        if (exception != null)
-        {
-            throw exception;
-        }
-        try
-        {
-            this.closed = true;
-            // Close the
-            this.file.endOutput();
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException(e);
-        }
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileProvider.java
deleted file mode 100644
index d136232..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileProvider.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.commons.vfs2.provider.ram;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider;
-import org.apache.commons.vfs2.provider.FileProvider;
-
-/**
- * RAM File Provider.
- */
-public class RamFileProvider extends AbstractOriginatingFileProvider implements
-        FileProvider
-{
-    /** The provider's capabilities. */
-    public static final Collection<Capability> capabilities = Collections
-            .unmodifiableCollection(Arrays.asList(new Capability[]
-            {
-                    Capability.CREATE,
-                    Capability.DELETE,
-                    Capability.RENAME,
-                    Capability.GET_TYPE,
-                    Capability.GET_LAST_MODIFIED,
-                    Capability.SET_LAST_MODIFIED_FILE,
-                    Capability.SET_LAST_MODIFIED_FOLDER,
-                    Capability.LIST_CHILDREN,
-                    Capability.READ_CONTENT,
-                    Capability.URI,
-                    Capability.WRITE_CONTENT,
-                    Capability.APPEND_CONTENT,
-                    Capability.RANDOM_ACCESS_READ,
-                    Capability.RANDOM_ACCESS_SET_LENGTH,
-                    Capability.RANDOM_ACCESS_WRITE
-            }));
-
-    /**
-     * Constructs a new provider.
-     */
-    public RamFileProvider()
-    {
-        super();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider#doCreateFileSystem(
-     *      org.apache.commons.vfs2.FileName, org.apache.commons.vfs2.FileSystemOptions)
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName name,
-            final FileSystemOptions fileSystemOptions) throws FileSystemException
-    {
-        return new RamFileSystem(name, fileSystemOptions);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.FileProvider#getCapabilities()
-     */
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileRandomAccessContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileRandomAccessContent.java
deleted file mode 100644
index 7a9a2fc..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileRandomAccessContent.java
+++ /dev/null
@@ -1,652 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.ram;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * RAM File Random Access Content.
- */
-public class RamFileRandomAccessContent implements RandomAccessContent
-{
-    /**
-     * File Pointer
-     */
-    protected int filePointer = 0;
-
-    /**
-     * Buffer
-     */
-    private byte[] buf;
-
-    /**
-     * buffer
-     */
-    private final byte[] buffer8 = new byte[8];
-
-    /**
-     * buffer
-     */
-    private final byte[] buffer4 = new byte[4];
-
-    /**
-     * buffer
-     */
-    private final byte[] buffer2 = new byte[2];
-
-    /**
-     * buffer
-     */
-    private final byte[] buffer1 = new byte[1];
-
-    /**
-     * File
-     */
-    private final RamFileObject file;
-
-    private final InputStream rafis;
-
-    /**
-     * @param file The file to access.
-     * @param mode The access mode.
-     */
-    public RamFileRandomAccessContent(final RamFileObject file, final RandomAccessMode mode)
-    {
-        super();
-        this.buf = file.getData().getContent();
-        this.file = file;
-
-        rafis = new InputStream()
-        {
-            @Override
-            public int read() throws IOException
-            {
-                try
-                {
-                    return readByte();
-                }
-                catch (final EOFException e)
-                {
-                    return -1;
-                }
-            }
-
-            @Override
-            public long skip(final long n) throws IOException
-            {
-                seek(getFilePointer() + n);
-                return n;
-            }
-
-            @Override
-            public void close() throws IOException
-            {
-            }
-
-            @Override
-            public int read(final byte[] b) throws IOException
-            {
-                return read(b, 0, b.length);
-            }
-
-            @Override
-            public int read(final byte[] b, final int off, final int len) throws IOException
-            {
-                int retLen = -1;
-                final int left = getLeftBytes();
-                if (left > 0)
-                {
-                    retLen = Math.min(len, left);
-                    RamFileRandomAccessContent.this.readFully(b, off, retLen);
-                }
-                return retLen;
-            }
-
-            @Override
-            public int available() throws IOException
-            {
-                return getLeftBytes();
-            }
-        };
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.RandomAccessContent#getFilePointer()
-     */
-    @Override
-    public long getFilePointer() throws IOException
-    {
-        return this.filePointer;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.RandomAccessContent#seek(long)
-     */
-    @Override
-    public void seek(final long pos) throws IOException
-    {
-        if (pos < 0)
-        {
-            throw new IOException("Attempt to position before the start of the file");
-        }
-        this.filePointer = (int) pos;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.RandomAccessContent#length()
-     */
-    @Override
-    public long length() throws IOException
-    {
-        return buf.length;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.RandomAccessContent#close()
-     */
-    @Override
-    public void close() throws IOException
-    {
-
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readByte()
-     */
-    @Override
-    public byte readByte() throws IOException
-    {
-        return (byte) this.readUnsignedByte();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readChar()
-     */
-    @Override
-    public char readChar() throws IOException
-    {
-        final int ch1 = this.readUnsignedByte();
-        final int ch2 = this.readUnsignedByte();
-        return (char) ((ch1 << 8) + (ch2 << 0));
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readDouble()
-     */
-    @Override
-    public double readDouble() throws IOException
-    {
-        return Double.longBitsToDouble(this.readLong());
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readFloat()
-     */
-    @Override
-    public float readFloat() throws IOException
-    {
-        return Float.intBitsToFloat(this.readInt());
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readInt()
-     */
-    @Override
-    public int readInt() throws IOException
-    {
-        return (readUnsignedByte() << 24) | (readUnsignedByte() << 16)
-                | (readUnsignedByte() << 8) | readUnsignedByte();
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readUnsignedByte()
-     */
-    @Override
-    public int readUnsignedByte() throws IOException
-    {
-        if (filePointer < buf.length)
-        {
-            return buf[filePointer++] & 0xFF;
-        }
-        else
-        {
-            throw new EOFException();
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readUnsignedShort()
-     */
-    @Override
-    public int readUnsignedShort() throws IOException
-    {
-        this.readFully(buffer2);
-        return toUnsignedShort(buffer2);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readLong()
-     */
-    @Override
-    public long readLong() throws IOException
-    {
-        this.readFully(buffer8);
-        return toLong(buffer8);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readShort()
-     */
-    @Override
-    public short readShort() throws IOException
-    {
-        this.readFully(buffer2);
-        return toShort(buffer2);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readBoolean()
-     */
-    @Override
-    public boolean readBoolean() throws IOException
-    {
-        return this.readUnsignedByte() != 0;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#skipBytes(int)
-     */
-    @Override
-    public int skipBytes(final int n) throws IOException
-    {
-        if (n < 0)
-        {
-            throw new IndexOutOfBoundsException(
-                    "The skip number can't be negative");
-        }
-
-        final long newPos = filePointer + n;
-
-        if (newPos > buf.length)
-        {
-            throw new IndexOutOfBoundsException("Tyring to skip too much bytes");
-        }
-
-        seek(newPos);
-
-        return n;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readFully(byte[])
-     */
-    @Override
-    public void readFully(final byte[] b) throws IOException
-    {
-        this.readFully(b, 0, b.length);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readFully(byte[], int, int)
-     */
-    @Override
-    public void readFully(final byte[] b, final int off, final int len) throws IOException
-    {
-        if (len < 0)
-        {
-            throw new IndexOutOfBoundsException("Length is lower than 0");
-        }
-
-        if (len > this.getLeftBytes())
-        {
-            throw new IndexOutOfBoundsException("Read length (" + len
-                    + ") is higher than buffer left bytes ("
-                    + this.getLeftBytes() + ") ");
-        }
-
-        System.arraycopy(buf, filePointer, b, off, len);
-
-        filePointer += len;
-    }
-
-    private int getLeftBytes()
-    {
-        return buf.length - filePointer;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readUTF()
-     */
-    @Override
-    public String readUTF() throws IOException
-    {
-        return DataInputStream.readUTF(this);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#write(byte[], int, int)
-     */
-    @Override
-    public void write(final byte[] b, final int off, final int len) throws IOException
-    {
-        if (this.getLeftBytes() < len)
-        {
-            final int newSize = this.buf.length + len - this.getLeftBytes();
-            this.file.resize(newSize);
-            this.buf = this.file.getData().getContent();
-        }
-        System.arraycopy(b, off, this.buf, filePointer, len);
-        this.filePointer += len;
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#write(byte[])
-     */
-    @Override
-    public void write(final byte[] b) throws IOException
-    {
-        this.write(b, 0, b.length);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeByte(int)
-     */
-    @Override
-    public void writeByte(final int i) throws IOException
-    {
-        this.write(i);
-    }
-
-    /**
-     * Build a long from first 8 bytes of the array.
-     *
-     * @param b The byte[] to convert.
-     * @return A long.
-     */
-    public static long toLong(final byte[] b)
-    {
-        return ((((long) b[7]) & 0xFF) + ((((long) b[6]) & 0xFF) << 8)
-                + ((((long) b[5]) & 0xFF) << 16)
-                + ((((long) b[4]) & 0xFF) << 24)
-                + ((((long) b[3]) & 0xFF) << 32)
-                + ((((long) b[2]) & 0xFF) << 40)
-                + ((((long) b[1]) & 0xFF) << 48) + ((((long) b[0]) & 0xFF) << 56));
-    }
-
-    /**
-     * Build a 8-byte array from a long. No check is performed on the array
-     * length.
-     *
-     * @param n The number to convert.
-     * @param b The array to fill.
-     * @return A byte[].
-     */
-    public static byte[] toBytes(long n, final byte[] b)
-    {
-        b[7] = (byte) (n);
-        n >>>= 8;
-        b[6] = (byte) (n);
-        n >>>= 8;
-        b[5] = (byte) (n);
-        n >>>= 8;
-        b[4] = (byte) (n);
-        n >>>= 8;
-        b[3] = (byte) (n);
-        n >>>= 8;
-        b[2] = (byte) (n);
-        n >>>= 8;
-        b[1] = (byte) (n);
-        n >>>= 8;
-        b[0] = (byte) (n);
-        return b;
-    }
-
-    /**
-     * Build a short from first 2 bytes of the array.
-     * @param b The byte[] to convert.
-     * @return A short.
-     */
-    public static short toShort(final byte[] b)
-    {
-        return (short) toUnsignedShort(b);
-    }
-
-    /**
-     * Build a short from first 2 bytes of the array.
-     *
-     * @param b The byte[] to convert.
-     * @return A short.
-     */
-    public static int toUnsignedShort(final byte[] b)
-    {
-        return ((b[1] & 0xFF) + ((b[0] & 0xFF) << 8));
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#write(int)
-     */
-    @Override
-    public void write(final int b) throws IOException
-    {
-        buffer1[0] = (byte) b;
-        this.write(buffer1);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeBoolean(boolean)
-     */
-    @Override
-    public void writeBoolean(final boolean v) throws IOException
-    {
-        this.write(v ? 1 : 0);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeBytes(java.lang.String)
-     */
-    @Override
-    public void writeBytes(final String s) throws IOException
-    {
-        write(s.getBytes());
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeChar(int)
-     */
-    @Override
-    public void writeChar(final int v) throws IOException
-    {
-        buffer2[0] = (byte) ((v >>> 8) & 0xFF);
-        buffer2[1] = (byte) ((v >>> 0) & 0xFF);
-        write(buffer2);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeChars(java.lang.String)
-     */
-    @Override
-    public void writeChars(final String s) throws IOException
-    {
-        final int len = s.length();
-        for (int i = 0; i < len; i++)
-        {
-            writeChar(s.charAt(i));
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeDouble(double)
-     */
-    @Override
-    public void writeDouble(final double v) throws IOException
-    {
-        writeLong(Double.doubleToLongBits(v));
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeFloat(float)
-     */
-    @Override
-    public void writeFloat(final float v) throws IOException
-    {
-        writeInt(Float.floatToIntBits(v));
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeInt(int)
-     */
-    @Override
-    public void writeInt(final int v) throws IOException
-    {
-        buffer4[0] = (byte) ((v >>> 24) & 0xFF);
-        buffer4[1] = (byte) ((v >>> 16) & 0xFF);
-        buffer4[2] = (byte) ((v >>> 8) & 0xFF);
-        buffer4[3] = (byte) (v & 0xFF);
-        write(buffer4);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeLong(long)
-     */
-    @Override
-    public void writeLong(final long v) throws IOException
-    {
-        write(toBytes(v, buffer8));
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeShort(int)
-     */
-    @Override
-    public void writeShort(final int v) throws IOException
-    {
-        buffer2[0] = (byte) ((v >>> 8) & 0xFF);
-        buffer2[1] = (byte) (v & 0xFF);
-        write(buffer2);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataOutput#writeUTF(java.lang.String)
-     */
-    @Override
-    public void writeUTF(final String str) throws IOException
-    {
-        final ByteArrayOutputStream out = new ByteArrayOutputStream(str.length());
-        final DataOutputStream dataOut = new DataOutputStream(out);
-        dataOut.writeUTF(str);
-        dataOut.flush();
-        dataOut.close();
-        final byte[] b = out.toByteArray();
-        write(b);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see java.io.DataInput#readLine()
-     */
-    @Override
-    public String readLine() throws IOException
-    {
-        throw new UnsupportedOperationException("deprecated");
-    }
-
-    @Override
-    public InputStream getInputStream() throws IOException
-    {
-        return rafis;
-    }
-
-    @Override
-    public void setLength(final long newLength) throws IOException
-    {
-        this.file.resize(newLength);
-        this.buf = this.file.getData().getContent();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystem.java
deleted file mode 100644
index 77050ea..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystem.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.commons.vfs2.provider.ram;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-
-/**
- * A RAM File System.
- */
-public class RamFileSystem extends AbstractFileSystem implements Serializable
-{
-    private static final int BUFFER_SIZE = 512;
-
-    /**
-     * serialVersionUID format is YYYYMMDD for the date of the last binary change.
-     */
-    private static final long serialVersionUID = 20101208L;
-
-    /**
-     * Cache of RAM File Data
-     */
-    private final Map<FileName, RamFileData> cache;
-
-    /**
-     * @param rootName The root file name.
-     * @param fileSystemOptions The FileSystem options.
-     */
-    protected RamFileSystem(final FileName rootName, final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, null, fileSystemOptions);
-        this.cache = Collections.synchronizedMap(new HashMap<FileName, RamFileData>());
-        // create root
-        final RamFileData rootData = new RamFileData(rootName);
-        rootData.setType(FileType.FOLDER);
-        rootData.setLastModified(System.currentTimeMillis());
-        this.cache.put(rootName, rootData);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileSystem#createFile(org.apache.commons.vfs2.FileName)
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws Exception
-    {
-        return new RamFileObject(name, this);
-    }
-
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.commons.vfs2.provider.AbstractFileSystem#addCapabilities(java.util.Collection)
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(RamFileProvider.capabilities);
-    }
-
-    /**
-     * @param name The name of the file.
-     * @return children The names of the children.
-     */
-    String[] listChildren(final FileName name)
-    {
-        final RamFileData data = this.cache.get(name);
-        if (data == null || !data.getType().hasChildren())
-        {
-            return null;
-        }
-        final Collection<RamFileData> children = data.getChildren();
-        String[] names;
-
-        synchronized (children)
-        {
-            names = new String[children.size()];
-
-            int pos = 0;
-            final Iterator<RamFileData> iter = children.iterator();
-            while (iter.hasNext())
-            {
-                final RamFileData childData = iter.next();
-                names[pos] = childData.getName().getBaseName();
-                pos++;
-            }
-        }
-
-        return names;
-    }
-
-    /**
-     * Delete a file
-     *
-     * @param file
-     * @throws FileSystemException
-     */
-    void delete(final RamFileObject file) throws FileSystemException
-    {
-        // root is read only check
-        if (file.getParent() == null)
-        {
-            throw new FileSystemException("unable to delete root");
-        }
-
-        // Remove reference from cache
-        this.cache.remove(file.getName());
-        // Notify the parent
-        final RamFileObject parent = (RamFileObject) this.resolveFile(file
-                .getParent().getName());
-        parent.getData().removeChild(file.getData());
-        parent.close();
-        // Close the file
-        file.getData().clear();
-        file.close();
-    }
-
-    /**
-     * Saves a file
-     *
-     * @param file
-     * @throws FileSystemException
-     */
-    void save(final RamFileObject file) throws FileSystemException
-    {
-
-        // Validate name
-        if (file.getData().getName() == null)
-        {
-            throw new FileSystemException(new IllegalStateException(
-                    "The data has no name. " + file));
-        }
-
-        // Add to the parent
-        if (file.getName().getDepth() > 0)
-        {
-            final RamFileData parentData = this.cache.get(file.getParent().getName());
-            // Only if not already added
-            if (!parentData.hasChildren(file.getData()))
-            {
-                final RamFileObject parent = (RamFileObject) file.getParent();
-                parent.getData().addChild(file.getData());
-                parent.close();
-            }
-        }
-        // Store in cache
-        cache.put(file.getName(), file.getData());
-        file.getData().updateLastModified();
-        file.close();
-    }
-
-    /**
-     * @param from The original file.
-     * @param to The new file.
-     * @throws FileSystemException if an error occurs.
-     */
-    void rename(final RamFileObject from, final RamFileObject to)
-            throws FileSystemException
-    {
-        if (!this.cache.containsKey(from.getName()))
-        {
-            throw new FileSystemException("File does not exist: "
-                    + from.getName());
-        }
-        // Copy data
-
-        to.getData().setContent(from.getData().getContent());
-        to.getData().setLastModified(from.getData().getLastModified());
-        to.getData().setType(from.getData().getType());
-
-        this.save(to);
-        this.delete(from);
-    }
-
-    public void attach(final RamFileObject fo)
-    {
-        if (fo.getName() == null)
-        {
-            throw new IllegalArgumentException("Null argument");
-        }
-        RamFileData data = this.cache.get(fo.getName());
-        if (data == null)
-        {
-            data = new RamFileData(fo.getName());
-        }
-        fo.setData(data);
-    }
-
-    /**
-     * Import a Tree.
-     *
-     * @param file The File
-     * @throws FileSystemException if an error occurs.
-     */
-    public void importTree(final File file) throws FileSystemException
-    {
-        final FileObject fileFo = getFileSystemManager().toFileObject(file);
-        this.toRamFileObject(fileFo, fileFo);
-    }
-
-    /**
-     * Import the given file with the name relative to the given root
-     *
-     * @param fo
-     * @param root
-     * @throws FileSystemException
-     */
-    void toRamFileObject(final FileObject fo, final FileObject root)
-            throws FileSystemException
-    {
-        final RamFileObject memFo = (RamFileObject) this.resolveFile(fo.getName()
-                .getPath().substring(root.getName().getPath().length()));
-        if (fo.getType().hasChildren())
-        {
-            // Create Folder
-            memFo.createFolder();
-            // Import recursively
-            final FileObject[] fos = fo.getChildren();
-            for (final FileObject child : fos)
-            {
-                this.toRamFileObject(child, root);
-            }
-        }
-        else if (fo.isFile())
-        {
-            // Read bytes
-            try
-            {
-                final InputStream is = fo.getContent().getInputStream();
-                try
-                {
-                    final OutputStream os = new BufferedOutputStream(memFo
-                            .getOutputStream(), BUFFER_SIZE);
-                    int i;
-                    while ((i = is.read()) != -1)
-                    {
-                        os.write(i);
-                    }
-                    os.close();
-                }
-                finally
-                {
-                    try
-                    {
-                        is.close();
-                    }
-                    catch (final IOException ignored)
-                    {
-                        /* ignore on close exception. */
-                    }
-                    // TODO: close os
-                }
-            }
-            catch (final IOException e)
-            {
-                throw new FileSystemException(e.getClass().getName() + " "
-                        + e.getMessage());
-            }
-        }
-        else
-        {
-            throw new FileSystemException("File is not a folder nor a file "
-                    + memFo);
-        }
-    }
-
-    /**
-     * @return Returns the size of the FileSystem
-     */
-    long size()
-    {
-        long size = 0;
-        synchronized (cache)
-        {
-            final Iterator<RamFileData> iter = cache.values().iterator();
-            while (iter.hasNext())
-            {
-                final RamFileData data = iter.next();
-                size += data.size();
-            }
-        }
-        return size;
-    }
-
-    /**
-     * Close the RAMFileSystem.
-     */
-    @Override
-    public void close()
-    {
-        this.cache.clear();
-        super.close();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystemConfigBuilder.java
deleted file mode 100644
index 4571b22..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/RamFileSystemConfigBuilder.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.commons.vfs2.provider.ram;
-
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * Config Builder for the RAM filesystem.
- */
-public final class RamFileSystemConfigBuilder extends FileSystemConfigBuilder
-{
-
-    /** max size key. */
-    private static final String MAX_SIZE_KEY = "maxsize";
-
-    /** config builder SINGLETON. */
-    private static final RamFileSystemConfigBuilder SINGLETON = new RamFileSystemConfigBuilder();
-
-    /**
-     * Constructor
-     */
-    private RamFileSystemConfigBuilder()
-    {
-        super("ram.");
-    }
-
-    /**
-     * Gets the singleton builder.
-     *
-     * @return the singleton builder.
-     */
-    public static RamFileSystemConfigBuilder getInstance()
-    {
-        return SINGLETON;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected Class<? extends FileSystem> getConfigClass()
-    {
-        return RamFileSystem.class;
-    }
-
-    /**
-     * Defaults to {@link Integer#MAX_VALUE}.
-     *
-     * @param opts The FileSystem options.
-     * @return The maximum size of the file.
-     * @see #setMaxSize(FileSystemOptions, long)
-     * @since 2.1
-     */
-    public long getLongMaxSize(final FileSystemOptions opts)
-    {
-        return getLong(opts, MAX_SIZE_KEY, Long.MAX_VALUE);
-    }
-
-    /**
-     * Defaults to {@link Integer#MAX_VALUE}.
-     *
-     * @param opts The FileSystem options.
-     * @return The maximum size of the file. The next major version will change the return type to a long.
-     * @see #setMaxSize(FileSystemOptions, int)
-     */
-    public int getMaxSize(final FileSystemOptions opts)
-    {
-        return getLong(opts, MAX_SIZE_KEY, Long.valueOf(Integer.MAX_VALUE)).intValue();
-    }
-
-    /**
-     * Sets the maximum size of the file system.
-     *
-     * @param opts The FileSystem options.
-     * @param sizeInBytes The maximum file size.
-     * @deprecated Use {@link #setMaxSize(FileSystemOptions, long)}
-     */
-    @Deprecated
-    public void setMaxSize(final FileSystemOptions opts, final int sizeInBytes)
-    {
-        setParam(opts, MAX_SIZE_KEY, Long.valueOf(sizeInBytes));
-    }
-
-    /**
-     * Sets the maximum size of the file system.
-     *
-     * @param opts The FileSystem options.
-     * @param sizeInBytes The maximum file size.
-     */
-    public void setMaxSize(final FileSystemOptions opts, final long sizeInBytes)
-    {
-        setParam(opts, MAX_SIZE_KEY, Long.valueOf(sizeInBytes));
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/package.html
deleted file mode 100644
index aca6904..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/ram/package.html
+++ /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.
--->
-<body>
-<p>The RAM File Provider.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/res/ResourceFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/res/ResourceFileProvider.java
deleted file mode 100644
index 325de04..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/res/ResourceFileProvider.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.commons.vfs2.provider.res;
-
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileProvider;
-import org.apache.commons.vfs2.provider.UriParser;
-
-/**
- * The Resource provider.
- */
-public class ResourceFileProvider extends AbstractFileProvider
-{
-    /** The provider's capabilities */
-    protected static final Collection<Capability> capabilities =
-        Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-    {
-        Capability.DISPATCHER
-    }));
-
-    private static final int BUFFER_SIZE = 80;
-
-    public ResourceFileProvider()
-    {
-        super();
-    }
-
-    /**
-     * Locates a file object, by absolute URI.
-     * @param baseFile The base file.
-     * @param uri The URI of the file to locate.
-     * @param fileSystemOptions The FileSystem options.
-     * @return the FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public FileObject findFile(final FileObject baseFile,
-                               final String uri,
-                               final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final StringBuilder buf = new StringBuilder(BUFFER_SIZE);
-        UriParser.extractScheme(uri, buf);
-        final String resourceName = buf.toString();
-
-        ClassLoader cl = ResourceFileSystemConfigBuilder.getInstance().getClassLoader(fileSystemOptions);
-        if (cl == null)
-        {
-            cl = getClass().getClassLoader();
-        }
-        final URL url = cl.getResource(resourceName);
-
-        if (url == null)
-        {
-            throw new FileSystemException("vfs.provider.url/badly-formed-uri.error", uri);
-        }
-
-        return getContext().getFileSystemManager().resolveFile(url.toExternalForm());
-    }
-
-    @Override
-    public FileSystemConfigBuilder getConfigBuilder()
-    {
-        return org.apache.commons.vfs2.provider.res.ResourceFileSystemConfigBuilder.getInstance();
-    }
-
-    @Override
-    public void closeFileSystem(final FileSystem filesystem)
-    {
-        // no filesystem created here - so nothing to do
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/res/ResourceFileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/res/ResourceFileSystemConfigBuilder.java
deleted file mode 100644
index e73768f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/res/ResourceFileSystemConfigBuilder.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.commons.vfs2.provider.res;
-
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.url.UrlFileSystem;
-
-/**
- * The config BUILDER for various ftp configuration options.
- */
-public final class ResourceFileSystemConfigBuilder extends FileSystemConfigBuilder
-{
-    private static final ResourceFileSystemConfigBuilder BUILDER = new ResourceFileSystemConfigBuilder();
-
-    private ResourceFileSystemConfigBuilder()
-    {
-        super("resource.");
-    }
-
-    /**
-     * Gets the singleton builder.
-     *
-     * @return the singleton builder.
-     */
-    public static ResourceFileSystemConfigBuilder getInstance()
-    {
-        return BUILDER;
-    }
-
-
-    public void setClassLoader(final FileSystemOptions opts, final ClassLoader classLoader)
-    {
-        setParam(opts, ClassLoader.class.getName(), classLoader);
-    }
-
-    public ClassLoader getClassLoader(final FileSystemOptions opts)
-    {
-        return (ClassLoader) getParam(opts, ClassLoader.class.getName());
-    }
-
-    @Override
-    protected Class<? extends FileSystem> getConfigClass()
-    {
-        return UrlFileSystem.class;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/res/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/res/package.html
deleted file mode 100644
index 64dfc9f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/res/package.html
+++ /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.
--->
-<body>
-<p>The Resource File Provider</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/IdentityInfo.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/IdentityInfo.java
deleted file mode 100644
index cd7cb6b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/IdentityInfo.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.commons.vfs2.provider.sftp;
-
-import java.io.File;
-
-
-/**
- * Structure for an identity.
- *
- * @since 2.1
- */
-public class IdentityInfo
-{
-    private final File privateKey;
-    private final File publicKey;
-    private final byte[] passPhrase;
-
-    /**
-     * Constructs an identity info with private key.
-     * <p>
-     * The key is not passphrase protected.
-     * <p>
-     * We use java.io.File because JSch cannot deal with VFS FileObjects.
-     *
-     * @param privateKey The file with the private key
-     * @since 2.1
-     */
-    public IdentityInfo(final File privateKey)
-    {
-        this(privateKey, null, null);
-    }
-
-    /**
-     * Constructs an identity info with private key and its passphrase.
-     * <p>
-     * We use java.io.File because JSch cannot deal with VFS FileObjects.
-     *
-     * @param privateKey The file with the private key
-     * @param passPhrase The passphrase to decrypt the private key (can be {@code null} if no passphrase is used)
-     * @since 2.1
-     */
-    public IdentityInfo(final File privateKey, final byte[] passPhrase)
-    {
-        this(privateKey, null, passPhrase);
-    }
-
-    /**
-     * Constructs an identity info with private and public key and passphrase for the private key.
-     * <p>
-     * We use java.io.File because JSch cannot deal with VFS FileObjects.
-     *
-     * @param privateKey The file with the private key
-     * @param publicKey The public key part used for connections with exchange of certificates (can be {@code null})
-     * @param passPhrase The passphrase to decrypt the private key (can be {@code null} if no passphrase is used)
-     * @since 2.1
-     */
-    public IdentityInfo(final File privateKey, final File publicKey, final byte[] passPhrase)
-    {
-        this.privateKey = privateKey;
-        this.publicKey = publicKey;
-        this.passPhrase = passPhrase;
-    }
-
-    /**
-     * Get the file with the private key.
-     *
-     * @return the file
-     * @since 2.1
-     */
-    public File getPrivateKey()
-    {
-        return privateKey;
-    }
-
-    /**
-     * Get the file with the public key.
-     *
-     * @return the file
-     * @since 2.1
-     */
-    public File getPublicKey()
-    {
-        return publicKey;
-    }
-
-    /**
-     * Get the passphrase of the private key.
-     *
-     * @return the passphrase
-     * @since 2.1
-     */
-    public byte[] getPassPhrase()
-    {
-        return passPhrase;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/IdentityRepositoryFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/IdentityRepositoryFactory.java
deleted file mode 100644
index 627b2dc..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/IdentityRepositoryFactory.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.commons.vfs2.provider.sftp;
-
-import com.jcraft.jsch.IdentityRepository;
-import com.jcraft.jsch.JSch;
-
-/**
- * Creates instances of JSch {@link IdentityRepository}.
- *
- * @version $Id$
- */
-public interface IdentityRepositoryFactory
-{
-    /**
-     * Creates an Identity repository for a given JSch instance.
-     *
-     * @param jsch
-     *            JSch context
-     * @return a new IdentityRepository
-     */
-    IdentityRepository create(JSch jsch);
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.java
deleted file mode 100644
index cdd0e1b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpClientFactory.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.commons.vfs2.provider.sftp;
-
-import java.io.File;
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.util.Os;
-
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Logger;
-import com.jcraft.jsch.Proxy;
-import com.jcraft.jsch.ProxyHTTP;
-import com.jcraft.jsch.ProxySOCKS5;
-import com.jcraft.jsch.Session;
-import com.jcraft.jsch.UserInfo;
-
-/**
- * Create a JSch Session instance.
- */
-public final class SftpClientFactory
-{
-    private static final String SSH_DIR_NAME = ".ssh";
-
-    private static final Log LOG = LogFactory.getLog(SftpClientFactory.class);
-
-    static
-    {
-        JSch.setLogger(new JSchLogger());
-    }
-
-    private SftpClientFactory()
-    {
-    }
-
-    /**
-     * Creates a new connection to the server.
-     *
-     * @param hostname The name of the host to connect to.
-     * @param port The port to use.
-     * @param username The user's id.
-     * @param password The user's password.
-     * @param fileSystemOptions The FileSystem options.
-     * @return A Session.
-     * @throws FileSystemException if an error occurs.
-     */
-    public static Session createConnection(final String hostname, final int port, final char[] username,
-                                           final char[] password, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final JSch jsch = new JSch();
-
-        File sshDir = null;
-
-        // new style - user passed
-        final SftpFileSystemConfigBuilder builder = SftpFileSystemConfigBuilder.getInstance();
-        final File knownHostsFile = builder.getKnownHosts(fileSystemOptions);
-        final IdentityInfo[] identities = builder.getIdentityInfo(fileSystemOptions);
-        final IdentityRepositoryFactory repositoryFactory = builder.getIdentityRepositoryFactory(fileSystemOptions);
-
-        sshDir = findSshDir();
-
-        setKnownHosts(jsch, sshDir, knownHostsFile);
-
-        if (repositoryFactory != null)
-        {
-            jsch.setIdentityRepository(repositoryFactory.create(jsch));
-        }
-
-        addIdentities(jsch, sshDir, identities);
-
-        Session session;
-        try
-        {
-            session = jsch.getSession(new String(username), hostname, port);
-            if (password != null)
-            {
-                session.setPassword(new String(password));
-            }
-
-            final Integer timeout = builder.getTimeout(fileSystemOptions);
-            if (timeout != null)
-            {
-                session.setTimeout(timeout.intValue());
-            }
-
-            final UserInfo userInfo = builder.getUserInfo(fileSystemOptions);
-            if (userInfo != null)
-            {
-                session.setUserInfo(userInfo);
-            }
-
-            final Properties config = new Properties();
-
-            // set StrictHostKeyChecking property
-            final String strictHostKeyChecking = builder.getStrictHostKeyChecking(fileSystemOptions);
-            if (strictHostKeyChecking != null)
-            {
-                config.setProperty("StrictHostKeyChecking", strictHostKeyChecking);
-            }
-            // set PreferredAuthentications property
-            final String preferredAuthentications = builder.getPreferredAuthentications(fileSystemOptions);
-            if (preferredAuthentications != null)
-            {
-                config.setProperty("PreferredAuthentications", preferredAuthentications);
-            }
-
-            // set compression property
-            final String compression = builder.getCompression(fileSystemOptions);
-            if (compression != null)
-            {
-                config.setProperty("compression.s2c", compression);
-                config.setProperty("compression.c2s", compression);
-            }
-
-            final String proxyHost = builder.getProxyHost(fileSystemOptions);
-            if (proxyHost != null)
-            {
-                final int proxyPort = builder.getProxyPort(fileSystemOptions);
-                final SftpFileSystemConfigBuilder.ProxyType proxyType = builder.getProxyType(fileSystemOptions);
-                Proxy proxy = null;
-                if (SftpFileSystemConfigBuilder.PROXY_HTTP.equals(proxyType))
-                {
-                    proxy = createProxyHTTP(proxyHost, proxyPort);
-                }
-                else if (SftpFileSystemConfigBuilder.PROXY_SOCKS5.equals(proxyType))
-                {
-                    proxy = createProxySOCKS5(proxyHost, proxyPort);
-                }
-                else if (SftpFileSystemConfigBuilder.PROXY_STREAM.equals(proxyType))
-                {
-                    proxy = createStreamProxy(proxyHost, proxyPort, fileSystemOptions, builder);
-                }
-
-                if (proxy != null)
-                {
-                    session.setProxy(proxy);
-                }
-            }
-
-            // set properties for the session
-            if (config.size() > 0)
-            {
-                session.setConfig(config);
-            }
-            session.setDaemonThread(true);
-            session.connect();
-        }
-        catch (final Exception exc)
-        {
-            throw new FileSystemException("vfs.provider.sftp/connect.error", exc, hostname);
-        }
-
-        return session;
-    }
-
-    private static void addIdentities(final JSch jsch, final File sshDir, final IdentityInfo[] identities)
-        throws FileSystemException
-    {
-        if (identities != null)
-        {
-            for (final IdentityInfo info : identities)
-            {
-                addIndentity(jsch, info);
-            }
-        }
-        else
-        {
-            // Load the private key (rsa-key only)
-            final File privateKeyFile = new File(sshDir, "id_rsa");
-            if (privateKeyFile.isFile() && privateKeyFile.canRead())
-            {
-                addIndentity(jsch, new IdentityInfo(privateKeyFile));
-            }
-        }
-    }
-
-    private static void addIndentity(final JSch jsch, final IdentityInfo info)
-        throws FileSystemException
-    {
-        try
-        {
-            final String privateKeyFile = info.getPrivateKey() != null ? info.getPrivateKey().getAbsolutePath() : null;
-            final String publicKeyFile = info.getPublicKey() != null ? info.getPublicKey().getAbsolutePath() : null;
-            jsch.addIdentity(privateKeyFile, publicKeyFile, info.getPassPhrase());
-        }
-        catch (final JSchException e)
-        {
-            throw new FileSystemException("vfs.provider.sftp/load-private-key.error", info, e);
-        }
-    }
-
-    private static void setKnownHosts(final JSch jsch, final File sshDir, File knownHostsFile)
-        throws FileSystemException
-    {
-        try
-        {
-            if (knownHostsFile != null)
-            {
-                jsch.setKnownHosts(knownHostsFile.getAbsolutePath());
-            }
-            else
-            {
-                // Load the known hosts file
-                knownHostsFile = new File(sshDir, "known_hosts");
-                if (knownHostsFile.isFile() && knownHostsFile.canRead())
-                {
-                    jsch.setKnownHosts(knownHostsFile.getAbsolutePath());
-                }
-            }
-        }
-        catch (final JSchException e)
-        {
-            throw new FileSystemException("vfs.provider.sftp/known-hosts.error", knownHostsFile.getAbsolutePath(), e);
-        }
-
-    }
-
-    private static Proxy createStreamProxy(final String proxyHost, final int proxyPort,
-                                           final FileSystemOptions fileSystemOptions,
-                                           final SftpFileSystemConfigBuilder builder)
-    {
-        Proxy proxy;
-        // Use a stream proxy, i.e. it will use a remote host as a proxy
-        // and run a command (e.g. netcat) that forwards input/output
-        // to the target host.
-
-        // Here we get the settings for connecting to the proxy:
-        // user, password, options and a command
-        final String proxyUser = builder.getProxyUser(fileSystemOptions);
-        final String proxyPassword = builder.getProxyPassword(fileSystemOptions);
-        final FileSystemOptions proxyOptions = builder.getProxyOptions(fileSystemOptions);
-
-        final String proxyCommand = builder.getProxyCommand(fileSystemOptions);
-
-        // Create the stream proxy
-        proxy = new SftpStreamProxy(proxyCommand, proxyUser, proxyHost, proxyPort, proxyPassword, proxyOptions);
-        return proxy;
-    }
-
-    private static ProxySOCKS5 createProxySOCKS5(final String proxyHost, final int proxyPort)
-    {
-        return proxyPort == 0 ? new ProxySOCKS5(proxyHost) : new ProxySOCKS5(proxyHost, proxyPort);
-    }
-
-    private static ProxyHTTP createProxyHTTP(final String proxyHost, final int proxyPort)
-    {
-        return proxyPort == 0 ? new ProxyHTTP(proxyHost) : new ProxyHTTP(proxyHost, proxyPort);
-    }
-
-    /**
-     * Finds the .ssh directory.
-     * <p>
-     * The lookup order is:
-     * <ol>
-     * <li>The system property {@code vfs.sftp.sshdir} (the override
-     * mechanism)</li>
-     * <li>{user.home}/.ssh</li>
-     * <li>On Windows only: C:\cygwin\home\{user.name}\.ssh</li>
-     * <li>The current directory, as a last resort.</li>
-     * <ol>
-     * Windows Notes:<br>
-     * The default installation directory for Cygwin is {@code C:\cygwin}.
-     * On my set up (Gary here), I have Cygwin in C:\bin\cygwin, not the default.
-     * Also, my .ssh directory was created in the {user.home} directory.
-     *
-     * @return The .ssh directory
-     */
-    private static File findSshDir()
-    {
-        String sshDirPath;
-        sshDirPath = System.getProperty("vfs.sftp.sshdir");
-        if (sshDirPath != null)
-        {
-            final File sshDir = new File(sshDirPath);
-            if (sshDir.exists())
-            {
-                return sshDir;
-            }
-        }
-
-        File sshDir = new File(System.getProperty("user.home"), SSH_DIR_NAME);
-        if (sshDir.exists())
-        {
-            return sshDir;
-        }
-
-        if (Os.isFamily(Os.OS_FAMILY_WINDOWS))
-        {
-            // TODO - this may not be true
-            final String userName = System.getProperty("user.name");
-            sshDir = new File("C:\\cygwin\\home\\" + userName + "\\" + SSH_DIR_NAME);
-            if (sshDir.exists())
-            {
-                return sshDir;
-            }
-        }
-        return new File("");
-    }
-
-    /** Interface JSchLogger with JCL. */
-    private static class JSchLogger implements Logger
-    {
-        @Override
-        public boolean isEnabled(final int level)
-        {
-            switch (level)
-            {
-                case FATAL:
-                    return LOG.isFatalEnabled();
-                case ERROR:
-                    return LOG.isErrorEnabled();
-                case WARN:
-                    return LOG.isDebugEnabled();
-                case DEBUG:
-                    return LOG.isDebugEnabled();
-                case INFO:
-                    return LOG.isInfoEnabled();
-                default:
-                    return LOG.isDebugEnabled();
-
-            }
-        }
-
-        @Override
-        public void log(final int level, final String msg)
-        {
-            switch (level)
-            {
-                case FATAL:
-                    LOG.fatal(msg);
-                    break;
-                case ERROR:
-                    LOG.error(msg);
-                    break;
-                case WARN:
-                    LOG.warn(msg);
-                    break;
-                case DEBUG:
-                    LOG.debug(msg);
-                    break;
-                case INFO:
-                    LOG.info(msg);
-                    break;
-                default:
-                    LOG.debug(msg);
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileNameParser.java
deleted file mode 100644
index c0ab465..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileNameParser.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.commons.vfs2.provider.sftp;
-
-import org.apache.commons.vfs2.provider.FileNameParser;
-import org.apache.commons.vfs2.provider.URLFileNameParser;
-
-/**
- * Implementation for SFTP. Sets the default port to 22.
- */
-public class SftpFileNameParser extends URLFileNameParser
-{
-    private static final int DEFAULT_PORT = 22;
-
-    private static final SftpFileNameParser INSTANCE = new SftpFileNameParser();
-
-    /**
-     * Creates a new instance with a the default port 22.
-     */
-    public SftpFileNameParser()
-    {
-        super(DEFAULT_PORT);
-    }
-
-    /**
-     * Gets the singleton instance.
-     *
-     * @return the singleton instance.
-     */
-    public static FileNameParser getInstance()
-    {
-        return INSTANCE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileObject.java
deleted file mode 100644
index a3d5617..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileObject.java
+++ /dev/null
@@ -1,686 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.sftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Vector;
-
-import org.apache.commons.vfs2.FileNotFoundException;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.VFS;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-import org.apache.commons.vfs2.util.MonitorInputStream;
-import org.apache.commons.vfs2.util.MonitorOutputStream;
-import org.apache.commons.vfs2.util.PosixPermissions;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-import com.jcraft.jsch.ChannelSftp;
-import com.jcraft.jsch.ChannelSftp.LsEntry;
-import com.jcraft.jsch.SftpATTRS;
-import com.jcraft.jsch.SftpException;
-
-/**
- * An SFTP file.
- */
-public class SftpFileObject extends AbstractFileObject<SftpFileSystem>
-{
-    private static final long MOD_TIME_FACTOR = 1000L;
-
-    private SftpATTRS attrs;
-    private final String relPath;
-
-    private boolean inRefresh;
-
-    protected SftpFileObject(final AbstractFileName name,
-            final SftpFileSystem fileSystem) throws FileSystemException
-    {
-        super(name, fileSystem);
-        relPath = UriParser.decode(fileSystem.getRootName().getRelativeName(
-                name));
-    }
-
-    /** @since 2.0 */
-    @Override
-    protected void doDetach() throws Exception
-    {
-        attrs = null;
-    }
-
-    /**
-     * @throws FileSystemException if error occurs.
-     * @since 2.0
-     */
-    @Override
-    public void refresh() throws FileSystemException
-    {
-        if (!inRefresh)
-        {
-            try
-            {
-                inRefresh = true;
-                super.refresh();
-                try
-                {
-                    attrs = null;
-                    getType();
-                }
-                catch (final IOException e)
-                {
-                    throw new FileSystemException(e);
-                }
-            }
-            finally
-            {
-                inRefresh = false;
-            }
-        }
-    }
-
-    /**
-     * Determines the type of this file, returns null if the file does not
-     * exist.
-     */
-    @Override
-    protected FileType doGetType() throws Exception
-    {
-        if (attrs == null)
-        {
-            statSelf();
-        }
-
-        if (attrs == null)
-        {
-            return FileType.IMAGINARY;
-        }
-
-        if ((attrs.getFlags() & SftpATTRS.SSH_FILEXFER_ATTR_PERMISSIONS) == 0)
-        {
-            throw new FileSystemException(
-                    "vfs.provider.sftp/unknown-permissions.error");
-        }
-        if (attrs.isDir())
-        {
-            return FileType.FOLDER;
-        }
-        else
-        {
-            return FileType.FILE;
-        }
-    }
-
-    /**
-     * Called when the type or content of this file changes.
-     */
-    @Override
-    protected void onChange() throws Exception
-    {
-        statSelf();
-    }
-
-    /**
-     * Fetches file attributes from server.
-     *
-     * @throws IOException
-     */
-    private void statSelf() throws IOException
-    {
-        ChannelSftp channel = getAbstractFileSystem().getChannel();
-        try
-        {
-            setStat(channel.stat(relPath));
-        }
-        catch (final SftpException e)
-        {
-            try
-            {
-                // maybe the channel has some problems, so recreate the channel and retry
-                if (e.id != ChannelSftp.SSH_FX_NO_SUCH_FILE)
-                {
-                    channel.disconnect();
-                    channel = getAbstractFileSystem().getChannel();
-                    setStat(channel.stat(relPath));
-                }
-                else
-                {
-                    // Really does not exist
-                    attrs = null;
-                }
-            }
-            catch (final SftpException innerEx)
-            {
-                // TODO - not strictly true, but jsch 0.1.2 does not give us
-                // enough info in the exception. Should be using:
-                // if ( e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE )
-                // However, sometimes the exception has the correct id, and
-                // sometimes
-                // it does not. Need to look into why.
-
-                // Does not exist
-                attrs = null;
-            }
-        }
-        finally
-        {
-            getAbstractFileSystem().putChannel(channel);
-        }
-    }
-
-    /**
-     * Set attrs from listChildrenResolved
-     */
-    private void setStat(final SftpATTRS attrs)
-    {
-        this.attrs = attrs;
-    }
-
-    /**
-     * Creates this file as a folder.
-     */
-    @Override
-    protected void doCreateFolder() throws Exception
-    {
-        final ChannelSftp channel = getAbstractFileSystem().getChannel();
-        try
-        {
-            channel.mkdir(relPath);
-        }
-        finally
-        {
-            getAbstractFileSystem().putChannel(channel);
-        }
-    }
-
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        if (attrs == null
-                || (attrs.getFlags() & SftpATTRS.SSH_FILEXFER_ATTR_ACMODTIME) == 0)
-        {
-            throw new FileSystemException(
-                    "vfs.provider.sftp/unknown-modtime.error");
-        }
-        return attrs.getMTime() * MOD_TIME_FACTOR;
-    }
-
-    /**
-     * Sets the last modified time of this file. Is only called if
-     * {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     *
-     * @param modtime
-     *            is modification time in milliseconds. SFTP protocol can send
-     *            times with nanosecond precision but at the moment jsch send
-     *            them with second precision.
-     */
-    @Override
-    protected boolean doSetLastModifiedTime(final long modtime) throws Exception
-    {
-        final int newMTime = (int) (modtime / MOD_TIME_FACTOR);
-        attrs.setACMODTIME(attrs.getATime(), newMTime);
-        flushStat();
-        return true;
-    }
-
-    private void flushStat() throws IOException, SftpException
-    {
-        final ChannelSftp channel = getAbstractFileSystem().getChannel();
-        try
-        {
-            channel.setStat(relPath, attrs);
-        }
-        finally
-        {
-            getAbstractFileSystem().putChannel(channel);
-        }
-    }
-
-    /**
-     * Deletes the file.
-     */
-    @Override
-    protected void doDelete() throws Exception
-    {
-        final ChannelSftp channel = getAbstractFileSystem().getChannel();
-        try
-        {
-            if (isFile())
-            {
-                channel.rm(relPath);
-            }
-            else
-            {
-                channel.rmdir(relPath);
-            }
-        }
-        finally
-        {
-            getAbstractFileSystem().putChannel(channel);
-        }
-    }
-
-    /**
-     * Rename the file.
-     */
-    @Override
-    protected void doRename(final FileObject newFile) throws Exception
-    {
-        final ChannelSftp channel = getAbstractFileSystem().getChannel();
-        try
-        {
-            final SftpFileObject newSftpFileObject = (SftpFileObject) FileObjectUtils.getAbstractFileObject(newFile);
-            channel.rename(relPath, newSftpFileObject.relPath);
-        }
-        finally
-        {
-            getAbstractFileSystem().putChannel(channel);
-        }
-    }
-
-    /**
-     * Returns the POSIX type permissions of the file.
-     *
-     * @param checkIds {@code true} if user and group ID should be checked (needed for some access rights checks)
-     * @return A PosixPermission object
-     * @throws Exception If an error occurs
-     * @since 2.1
-     */
-    protected PosixPermissions getPermissions(final boolean checkIds) throws Exception
-    {
-        statSelf();
-        boolean isInGroup = false;
-        if (checkIds)
-        {
-            for (final int groupId : getAbstractFileSystem().getGroupsIds())
-            {
-                if (groupId == attrs.getGId())
-                {
-                    isInGroup = true;
-                    break;
-                }
-            }
-        }
-        final boolean isOwner = checkIds ?  attrs.getUId() == getAbstractFileSystem().getUId() : false;
-        final PosixPermissions permissions = new PosixPermissions(attrs.getPermissions(), isOwner, isInGroup);
-
-        return permissions;
-    }
-
-    @Override
-    protected boolean doIsReadable() throws Exception
-    {
-        return getPermissions(true).isReadable();
-    }
-
-    @Override
-    protected boolean doSetReadable(final boolean readable, final boolean ownerOnly) throws Exception
-    {
-        final PosixPermissions permissions = getPermissions(false);
-        final int newPermissions = permissions.makeReadable(readable, ownerOnly);
-        if (newPermissions == permissions.getPermissions())
-        {
-            return true;
-        }
-
-        attrs.setPERMISSIONS(newPermissions);
-        flushStat();
-
-        return true;
-    }
-
-    @Override
-    protected boolean doIsWriteable() throws Exception
-    {
-        return getPermissions(true).isWritable();
-    }
-
-    @Override
-    protected boolean doSetWritable(final boolean writable, final boolean ownerOnly) throws Exception
-    {
-        final PosixPermissions permissions = getPermissions(false);
-        final int newPermissions = permissions.makeWritable(writable, ownerOnly);
-        if (newPermissions == permissions.getPermissions())
-        {
-            return true;
-        }
-
-        attrs.setPERMISSIONS(newPermissions);
-        flushStat();
-
-        return true;
-    }
-
-    @Override
-    protected boolean doIsExecutable() throws Exception
-    {
-        return getPermissions(true).isExecutable();
-    }
-
-
-    @Override
-    protected boolean doSetExecutable(final boolean executable, final boolean ownerOnly) throws Exception
-    {
-        final PosixPermissions permissions = getPermissions(false);
-        final int newPermissions = permissions.makeExecutable(executable, ownerOnly);
-        if (newPermissions == permissions.getPermissions())
-        {
-            return true;
-        }
-
-        attrs.setPERMISSIONS(newPermissions);
-        flushStat();
-
-        return true;
-    }
-
-    /**
-     * Lists the children of this file.
-     */
-    @Override
-    protected FileObject[] doListChildrenResolved() throws Exception
-    {
-        // should not require a round-trip because type is already set.
-        if (this.isFile())
-        {
-            return null;
-        }
-        // List the contents of the folder
-        Vector<?> vector = null;
-        final ChannelSftp channel = getAbstractFileSystem().getChannel();
-
-        try
-        {
-            // try the direct way to list the directory on the server to avoid too many roundtrips
-            vector = channel.ls(relPath);
-        }
-        catch (final SftpException e)
-        {
-            String workingDirectory = null;
-            try
-            {
-                if (relPath != null)
-                {
-                    workingDirectory = channel.pwd();
-                    channel.cd(relPath);
-                }
-            }
-            catch (final SftpException ex)
-            {
-                // VFS-210: seems not to be a directory
-                return null;
-            }
-
-            SftpException lsEx = null;
-            try
-            {
-                vector = channel.ls(".");
-            }
-            catch (final SftpException ex)
-            {
-                lsEx = ex;
-            }
-            finally
-            {
-                try
-                {
-                    if (relPath != null)
-                    {
-                        channel.cd(workingDirectory);
-                    }
-                }
-                catch (final SftpException xe)
-                {
-                    throw new FileSystemException("vfs.provider.sftp/change-work-directory-back.error",
-                                                  workingDirectory, lsEx);
-                }
-            }
-
-            if (lsEx != null)
-            {
-                throw lsEx;
-            }
-        }
-        finally
-        {
-            getAbstractFileSystem().putChannel(channel);
-        }
-        if (vector == null)
-        {
-            throw new FileSystemException(
-                    "vfs.provider.sftp/list-children.error");
-        }
-
-        // Extract the child names
-        final ArrayList<FileObject> children = new ArrayList<FileObject>();
-        for (@SuppressWarnings("unchecked") // OK because ChannelSftp.ls() is documented to return Vector<LsEntry>
-        final
-            Iterator<LsEntry> iterator = (Iterator<LsEntry>) vector.iterator(); iterator.hasNext();)
-        {
-            final LsEntry stat = iterator.next();
-
-            String name = stat.getFilename();
-            if (VFS.isUriStyle() && stat.getAttrs().isDir()
-                    && name.charAt(name.length() - 1) != '/')
-            {
-                name = name + "/";
-            }
-
-            if (name.equals(".") || name.equals("..") || name.equals("./")
-                    || name.equals("../"))
-            {
-                continue;
-            }
-
-            final FileObject fo =
-                getFileSystem()
-                    .resolveFile(
-                            getFileSystem().getFileSystemManager().resolveName(
-                                    getName(), UriParser.encode(name),
-                                    NameScope.CHILD));
-
-            ((SftpFileObject) FileObjectUtils.getAbstractFileObject(fo)).setStat(stat.getAttrs());
-
-            children.add(fo);
-        }
-
-        return children.toArray(new FileObject[children.size()]);
-    }
-
-    /**
-     * Lists the children of this file.
-     */
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        // use doListChildrenResolved for performance
-        return null;
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        if (attrs == null
-                || (attrs.getFlags() & SftpATTRS.SSH_FILEXFER_ATTR_SIZE) == 0)
-        {
-            throw new FileSystemException(
-                    "vfs.provider.sftp/unknown-size.error");
-        }
-        return attrs.getSize();
-    }
-
-    @Override
-    protected RandomAccessContent doGetRandomAccessContent(
-            final RandomAccessMode mode) throws Exception
-    {
-        return new SftpRandomAccessContent(this, mode);
-    }
-
-    /**
-     * Creates an input stream to read the file content from.
-     * The input stream is starting at the given position in the file.
-     */
-    InputStream getInputStream(final long filePointer) throws IOException
-    {
-        final ChannelSftp channel = getAbstractFileSystem().getChannel();
-        // Using InputStream directly from the channel
-        // is much faster than the memory method.
-        try
-        {
-            final InputStream is = channel.get(getName().getPathDecoded(), null, filePointer);
-            return new SftpInputStream(channel, is);
-        }
-        catch (final SftpException e)
-        {
-            getAbstractFileSystem().putChannel(channel);
-            throw new FileSystemException(e);
-        }
-    }
-
-    /**
-     * Creates an input stream to read the file content from.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        // VFS-113: avoid npe
-        synchronized (getAbstractFileSystem())
-        {
-            final ChannelSftp channel = getAbstractFileSystem().getChannel();
-            try
-            {
-                // return channel.get(getName().getPath());
-                // hmmm - using the in memory method is soooo much faster ...
-
-                // TODO - Don't read the entire file into memory. Use the
-                // stream-based methods on ChannelSftp once they work properly
-
-                /*
-                final ByteArrayOutputStream outstr = new ByteArrayOutputStream();
-                channel.get(relPath, outstr);
-                outstr.close();
-                return new ByteArrayInputStream(outstr.toByteArray());
-                */
-
-                InputStream is;
-                try
-                {
-                    // VFS-210: sftp allows to gather an input stream even from a directory and will
-                    // fail on first read. So we need to check the type anyway
-                    if (!getType().hasContent())
-                    {
-                        throw new FileSystemException("vfs.provider/read-not-file.error", getName());
-                    }
-
-                    is = channel.get(relPath);
-                }
-                catch (final SftpException e)
-                {
-                    if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE)
-                    {
-                        throw new FileNotFoundException(getName());
-                    }
-
-                    throw new FileSystemException(e);
-                }
-
-                return new SftpInputStream(channel, is);
-
-            }
-            finally
-            {
-//              getAbstractFileSystem().putChannel(channel);
-            }
-        }
-    }
-
-    /**
-     * Creates an output stream to write the file content to.
-     */
-    @Override
-    protected OutputStream doGetOutputStream(final boolean bAppend) throws Exception
-    {
-        // TODO - Don't write the entire file into memory. Use the stream-based
-        // methods on ChannelSftp once the work properly
-        /*
-        final ChannelSftp channel = getAbstractFileSystem().getChannel();
-        return new SftpOutputStream(channel);
-        */
-
-        final ChannelSftp channel = getAbstractFileSystem().getChannel();
-        return new SftpOutputStream(channel, channel.put(relPath));
-    }
-
-    /**
-     * An InputStream that monitors for end-of-file.
-     */
-    private class SftpInputStream extends MonitorInputStream
-    {
-        private final ChannelSftp channel;
-
-        public SftpInputStream(final ChannelSftp channel, final InputStream in)
-        {
-            super(in);
-            this.channel = channel;
-        }
-
-        /**
-         * Called after the stream has been closed.
-         */
-        @Override
-        protected void onClose() throws IOException
-        {
-            getAbstractFileSystem().putChannel(channel);
-        }
-    }
-
-    /**
-     * An OutputStream that wraps an sftp OutputStream, and closes the channel
-     * when the stream is closed.
-     */
-    private class SftpOutputStream extends MonitorOutputStream
-    {
-        private final ChannelSftp channel;
-
-        public SftpOutputStream(final ChannelSftp channel, final OutputStream out)
-        {
-            super(out);
-            this.channel = channel;
-        }
-
-        /**
-         * Called after this stream is closed.
-         */
-        @Override
-        protected void onClose() throws IOException
-        {
-            getAbstractFileSystem().putChannel(channel);
-        }
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileProvider.java
deleted file mode 100644
index 27fbf23..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileProvider.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.commons.vfs2.provider.sftp;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-import com.jcraft.jsch.Session;
-
-/**
- * A provider for accessing files over SFTP.
- */
-public class SftpFileProvider extends AbstractOriginatingFileProvider
-{
-    /** User Information. */
-    public static final String ATTR_USER_INFO = "UI";
-
-    /** Authentication types. */
-    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES =
-        new UserAuthenticationData.Type[]
-            {
-                UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD
-            };
-
-    /** The provider's capabilities. */
-    protected static final Collection<Capability> capabilities =
-        Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-    {
-        Capability.CREATE,
-        Capability.DELETE,
-        Capability.RENAME,
-        Capability.GET_TYPE,
-        Capability.LIST_CHILDREN,
-        Capability.READ_CONTENT,
-        Capability.URI,
-        Capability.WRITE_CONTENT,
-        Capability.GET_LAST_MODIFIED,
-        Capability.SET_LAST_MODIFIED_FILE,
-        Capability.RANDOM_ACCESS_READ
-    }));
-
-    // private JSch jSch = new JSch();
-
-    /**
-     * Constructs a new provider.
-     */
-    public SftpFileProvider()
-    {
-        super();
-        setFileNameParser(SftpFileNameParser.getInstance());
-    }
-
-    /**
-     * Creates a {@link FileSystem}.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        // JSch jsch = createJSch(fileSystemOptions);
-
-        // Create the file system
-        final GenericFileName rootName = (GenericFileName) name;
-
-        Session session;
-        UserAuthenticationData authData = null;
-        try
-        {
-            authData = UserAuthenticatorUtils.authenticate(fileSystemOptions, AUTHENTICATOR_TYPES);
-
-            session = SftpClientFactory.createConnection(
-                rootName.getHostName(),
-                rootName.getPort(),
-                UserAuthenticatorUtils.getData(authData, UserAuthenticationData.USERNAME,
-                    UserAuthenticatorUtils.toChar(rootName.getUserName())),
-                UserAuthenticatorUtils.getData(authData, UserAuthenticationData.PASSWORD,
-                    UserAuthenticatorUtils.toChar(rootName.getPassword())),
-                fileSystemOptions);
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider.sftp/connect.error",
-                name,
-                e);
-        }
-        finally
-        {
-            UserAuthenticatorUtils.cleanup(authData);
-        }
-
-        return new SftpFileSystem(rootName, session, fileSystemOptions);
-    }
-
-
-    /**
-     * Returns the JSch.
-     *
-     * @return Returns the jSch.
-     */
-    /*
-    private JSch getJSch()
-    {
-        return this.jSch;
-    }
-    */
-
-    /**
-     * Initializes the component.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public void init() throws FileSystemException
-    {
-    }
-
-    @Override
-    public FileSystemConfigBuilder getConfigBuilder()
-    {
-        return SftpFileSystemConfigBuilder.getInstance();
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystem.java
deleted file mode 100644
index 4de3885..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystem.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.sftp;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-import com.jcraft.jsch.ChannelExec;
-import com.jcraft.jsch.ChannelSftp;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Session;
-import com.jcraft.jsch.SftpException;
-
-/**
- * Represents the files on an SFTP server.
- */
-public class SftpFileSystem
-    extends AbstractFileSystem
-{
-    private static final int SLEEP_MILLIS = 100;
-
-    private static final int EXEC_BUFFER_SIZE = 128;
-
-    private static final long LAST_MOD_TIME_ACCURACY = 1000L;
-
-    private Session session;
-
-    // private final JSch jSch;
-
-    private ChannelSftp idleChannel;
-
-    /**
-     * Cache for the user ID (-1 when not set)
-     */
-    private int uid = -1;
-
-    /**
-     * Cache for the user groups ids (null when not set)
-     */
-    private int[] groupsIds;
-
-    protected SftpFileSystem(final GenericFileName rootName,
-                             final Session session,
-                             final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, null, fileSystemOptions);
-        this.session = session;
-    }
-
-    @Override
-    protected void doCloseCommunicationLink()
-    {
-        if (idleChannel != null)
-        {
-            idleChannel.disconnect();
-            idleChannel = null;
-        }
-
-        if (session != null)
-        {
-            session.disconnect();
-            session = null;
-        }
-    }
-
-    /**
-     * Returns an SFTP channel to the server.
-     *
-     * @return new or reused channel, never null.
-     * @throws FileSystemException if a session cannot be created.
-     * @throws IOException if an I/O error is detected.
-     */
-    protected ChannelSftp getChannel() throws IOException
-    {
-        ensureSession();
-        try
-        {
-            // Use the pooled channel, or create a new one
-            final ChannelSftp channel;
-            if (idleChannel != null)
-            {
-                channel = idleChannel;
-                idleChannel = null;
-            }
-            else
-            {
-                channel = (ChannelSftp) session.openChannel("sftp");
-                channel.connect();
-                final Boolean userDirIsRoot =
-                    SftpFileSystemConfigBuilder.getInstance().getUserDirIsRoot(getFileSystemOptions());
-                final String workingDirectory = getRootName().getPath();
-                if (workingDirectory != null && (userDirIsRoot == null || !userDirIsRoot.booleanValue()))
-                {
-                    try
-                    {
-                        channel.cd(workingDirectory);
-                    }
-                    catch (final SftpException e)
-                    {
-                        throw new FileSystemException("vfs.provider.sftp/change-work-directory.error",
-                            workingDirectory, e);
-                    }
-                }
-            }
-
-            final String fileNameEncoding = SftpFileSystemConfigBuilder.getInstance().getFileNameEncoding(
-                    getFileSystemOptions());
-
-            if (fileNameEncoding != null)
-            {
-                try
-                {
-                    channel.setFilenameEncoding(fileNameEncoding);
-                }
-                catch (final SftpException e)
-                {
-                    throw new FileSystemException("vfs.provider.sftp/filename-encoding.error", fileNameEncoding);
-                }
-            }
-            return channel;
-        }
-        catch (final JSchException e)
-        {
-            throw new FileSystemException("vfs.provider.sftp/connect.error", getRootName(), e);
-        }
-    }
-
-    /**
-     * Ensures that the session link is established.
-     *
-     * @throws FileSystemException if a session cannot be created.
-     */
-    private void ensureSession() throws FileSystemException
-    {
-        if (this.session == null || !this.session.isConnected())
-        {
-            doCloseCommunicationLink();
-
-            // channel closed. e.g. by freeUnusedResources, but now we need it again
-            Session session;
-            UserAuthenticationData authData = null;
-            try
-            {
-                final GenericFileName rootName = (GenericFileName) getRootName();
-
-                authData = UserAuthenticatorUtils.authenticate(getFileSystemOptions(),
-                        SftpFileProvider.AUTHENTICATOR_TYPES);
-
-                session = SftpClientFactory.createConnection(
-                        rootName.getHostName(),
-                        rootName.getPort(),
-                        UserAuthenticatorUtils.getData(authData, UserAuthenticationData.USERNAME,
-                                UserAuthenticatorUtils.toChar(rootName.getUserName())),
-                        UserAuthenticatorUtils.getData(authData, UserAuthenticationData.PASSWORD,
-                                UserAuthenticatorUtils.toChar(rootName.getPassword())),
-                        getFileSystemOptions());
-            }
-            catch (final Exception e)
-            {
-                throw new FileSystemException("vfs.provider.sftp/connect.error", getRootName(), e);
-            }
-            finally
-            {
-                UserAuthenticatorUtils.cleanup(authData);
-            }
-            this.session = session;
-        }
-    }
-
-    /**
-     * Returns a channel to the pool.
-     *
-     * @param channel the used channel.
-     */
-    protected void putChannel(final ChannelSftp channel)
-    {
-        if (idleChannel == null)
-        {
-            // put back the channel only if it is still connected
-            if (channel.isConnected() && !channel.isClosed())
-            {
-                idleChannel = channel;
-            }
-        }
-        else
-        {
-            channel.disconnect();
-        }
-    }
-
-    /**
-     * Adds the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(SftpFileProvider.capabilities);
-    }
-
-    /**
-     * Creates a file object.  This method is called only if the requested
-     * file is not cached.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name)
-        throws FileSystemException
-    {
-        return new SftpFileObject(name, this);
-    }
-
-    /**
-     * Last modification time is only an int and in seconds, thus can be off by 999.
-     *
-     * @return 1000
-     */
-    @Override
-    public double getLastModTimeAccuracy()
-    {
-        return LAST_MOD_TIME_ACCURACY;
-    }
-
-    /**
-     * Gets the (numeric) group IDs.
-     *
-     * @return the (numeric) group IDs.
-     * @throws JSchException If a problem occurs while retrieving the group IDs.
-     * @throws IOException if an I/O error is detected.
-     * @since 2.1
-     */
-    public int[] getGroupsIds() throws JSchException, IOException
-    {
-        if (groupsIds == null)
-        {
-            final StringBuilder output = new StringBuilder();
-            final int code = executeCommand("id -G", output);
-            if (code != 0)
-            {
-                throw new JSchException("Could not get the groups id of the current user (error code: " + code + ")");
-            }
-
-            // Retrieve the different groups
-            final String[] groups = output.toString().trim().split("\\s+");
-
-            final int[] groupsIds = new int[groups.length];
-            for (int i = 0; i < groups.length; i++)
-            {
-                groupsIds[i] = Integer.parseInt(groups[i]);
-            }
-
-            this.groupsIds = groupsIds;
-        }
-        return groupsIds;
-    }
-
-    /**
-     * Get the (numeric) group IDs.
-     *
-     * @return The numeric user ID
-     * @throws JSchException If a problem occurs while retrieving the group ID.
-     * @throws IOException if an I/O error is detected.
-     * @since 2.1
-     */
-    public int getUId() throws JSchException, IOException
-    {
-        if (uid < 0)
-        {
-            final StringBuilder output = new StringBuilder();
-            final int code = executeCommand("id -u", output);
-            if (code != 0)
-            {
-                throw new FileSystemException("Could not get the user id of the current user (error code: " + code
-                        + ")");
-            }
-            uid = Integer.parseInt(output.toString().trim());
-        }
-        return uid;
-    }
-
-    /**
-     * Execute a command and returns the (standard) output through a StringBuilder.
-     *
-     * @param command The command
-     * @param output The output
-     * @return The exit code of the command
-     * @throws JSchException if a JSch error is detected.
-     * @throws FileSystemException if a session cannot be created.
-     * @throws IOException if an I/O error is detected.
-     */
-    private int executeCommand(final String command, final StringBuilder output) throws JSchException, IOException
-    {
-        ensureSession();
-        final ChannelExec channel = (ChannelExec) session.openChannel("exec");
-
-        channel.setCommand(command);
-        channel.setInputStream(null);
-        final InputStreamReader stream = new InputStreamReader(channel.getInputStream());
-        channel.setErrStream(System.err, true);
-        channel.connect();
-
-        // Read the stream
-        final char[] buffer = new char[EXEC_BUFFER_SIZE];
-        int read;
-        while ((read = stream.read(buffer, 0, buffer.length)) >= 0)
-        {
-            output.append(buffer, 0, read);
-        }
-        stream.close();
-
-        // Wait until the command finishes (should not be long since we read the output stream)
-        while (!channel.isClosed())
-        {
-            try
-            {
-                Thread.sleep(SLEEP_MILLIS);
-            }
-            catch (final Exception ee)
-            {
-                // TODO: swallow exception, really?
-            }
-        }
-        channel.disconnect();
-        return channel.getExitStatus();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java
deleted file mode 100644
index af2c6cd..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpFileSystemConfigBuilder.java
+++ /dev/null
@@ -1,708 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.sftp;
-
-import java.io.File;
-import java.io.Serializable;
-
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-import com.jcraft.jsch.UserInfo;
-
-/**
- * The config builder for various SFTP configuration options.
- */
-public final class SftpFileSystemConfigBuilder extends FileSystemConfigBuilder
-{
-    /**
-     * Proxy type.
-     */
-    public static final class ProxyType implements Serializable, Comparable<ProxyType>
-    {
-        /**
-         * serialVersionUID format is YYYYMMDD for the date of the last binary change.
-         */
-        private static final long serialVersionUID = 20101208L;
-
-        private final String proxyType;
-
-        private ProxyType(final String proxyType)
-        {
-            this.proxyType = proxyType;
-        }
-
-        @Override
-        public int compareTo(final ProxyType pType)
-        {
-            return this.proxyType.compareTo(pType.proxyType);
-        }
-
-        @Override
-        public boolean equals(final Object obj)
-        {
-            if (this == obj)
-            {
-                return true;
-            }
-            if (obj == null || this.getClass() != obj.getClass())
-            {
-                return false;
-            }
-
-            final ProxyType pType = (ProxyType) obj;
-
-            if (this.proxyType != null ? !this.proxyType.equals(pType.proxyType) : pType.proxyType != null)
-            {
-                return false;
-            }
-
-            return true;
-        }
-
-        /**
-         * @return a hash code value for this object.
-         * @since 2.0
-         */
-        @Override
-        public int hashCode()
-        {
-            return this.proxyType.hashCode();
-        }
-    }
-
-    /** HTTP Proxy. */
-    public static final ProxyType PROXY_HTTP = new ProxyType("http");
-
-    /** SOCKS Proxy. */
-    public static final ProxyType PROXY_SOCKS5 = new ProxyType("socks");
-
-    /**
-     * Connects to the SFTP server through a remote host reached by SSH.
-     * <p>
-     * On this proxy host, a command
-     * (e.g. {@linkplain SftpStreamProxy#NETCAT_COMMAND}
-     * or {@linkplain SftpStreamProxy#NETCAT_COMMAND}) is run to forward
-     * input/output streams between the target host and the VFS host.
-     * <p>
-     * When used, the proxy username ({@linkplain #setProxyUser}) and
-     * hostname ({@linkplain #setProxyHost}) <b>must</b> be set.
-     * Optionnaly, the command ({@linkplain #setProxyCommand}),
-     * password ({@linkplain #setProxyPassword}) and connection options
-     * ({@linkplain #setProxyOptions}) can be set.
-     */
-    public static final ProxyType PROXY_STREAM = new ProxyType("stream");
-
-    private static final String _PREFIX = SftpFileSystemConfigBuilder.class.getName();
-    private static final SftpFileSystemConfigBuilder BUILDER = new SftpFileSystemConfigBuilder();
-    private static final String COMPRESSION = _PREFIX + "COMPRESSION";
-    private static final String HOST_KEY_CHECK_ASK = "ask";
-    private static final String HOST_KEY_CHECK_NO = "no";
-    private static final String HOST_KEY_CHECK_YES = "yes";
-    private static final String IDENTITIES = _PREFIX + ".IDENTITIES";
-    private static final String IDENTITY_REPOSITORY_FACTORY = _PREFIX + "IDENTITY_REPOSITORY_FACTORY";
-    private static final String KNOWN_HOSTS = _PREFIX + ".KNOWN_HOSTS";
-    private static final String PREFERRED_AUTHENTICATIONS = _PREFIX + ".PREFERRED_AUTHENTICATIONS";
-
-    private static final String PROXY_HOST = _PREFIX + ".PROXY_HOST";
-    private static final String PROXY_USER = _PREFIX + ".PROXY_USER";
-    private static final String PROXY_OPTIONS = _PREFIX + ".PROXY_OPTIONS";
-    private static final String PROXY_TYPE = _PREFIX + ".PROXY_TYPE";
-    private static final String PROXY_PORT = _PREFIX + ".PROXY_PORT";
-    private static final String PROXY_PASSWORD = _PREFIX + ".PROXY_PASSWORD";
-    private static final String PROXY_COMMAND = _PREFIX + ".PROXY_COMMAND";
-
-    private static final String STRICT_HOST_KEY_CHECKING = _PREFIX + ".STRICT_HOST_KEY_CHECKING";
-    private static final String TIMEOUT = _PREFIX + ".TIMEOUT";
-    private static final String USER_DIR_IS_ROOT = _PREFIX + ".USER_DIR_IS_ROOT";
-    private static final String ENCODING = _PREFIX + ".ENCODING";
-
-    private SftpFileSystemConfigBuilder()
-    {
-        super("sftp.");
-    }
-
-    /**
-     * Gets the singleton builder.
-     *
-     * @return the singleton builder.
-     */
-    public static SftpFileSystemConfigBuilder getInstance()
-    {
-        return BUILDER;
-    }
-
-    /**
-     * @param opts
-     *            The FileSystem options.
-     * @return The names of the compression algorithms, comma-separated.
-     * @see #setCompression
-     */
-    public String getCompression(final FileSystemOptions opts)
-    {
-        return this.getString(opts, COMPRESSION);
-    }
-
-    @Override
-    protected Class<? extends FileSystem> getConfigClass()
-    {
-        return SftpFileSystem.class;
-    }
-
-    /**
-     * Gets the file name encoding.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return the file name encoding
-     */
-    public String getFileNameEncoding(final FileSystemOptions opts)
-    {
-        return this.getString(opts, ENCODING);
-    }
-
-    /**
-     * Gets the identity files (your private key files).
-     * <p>
-     * We use java.io.File because JSch cannot deal with VFS FileObjects.
-     *
-     * @param opts The FileSystem options.
-     * @return the array of identity Files.
-     * @see #setIdentities
-     * @deprecated As of 2.1 use {@link #getIdentityInfo(FileSystemOptions)}
-     */
-    @Deprecated
-    public File[] getIdentities(final FileSystemOptions opts)
-    {
-        final IdentityInfo[] info = getIdentityInfo(opts);
-        if (info != null)
-        {
-            final File[] files = new File[info.length];
-            for (int i = 0; i < files.length; ++i)
-            {
-                files[i] = info[i].getPrivateKey();
-            }
-            return files;
-        }
-        return null;
-    }
-
-    /**
-     * Gets the identity info.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return the array of identity info instances.
-     * @see #setIdentityInfo
-     */
-    public IdentityInfo[] getIdentityInfo(final FileSystemOptions opts)
-    {
-        return (IdentityInfo[]) this.getParam(opts, IDENTITIES);
-    }
-
-    /**
-     * Get the identity repository factory.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return the IdentityRepositoryFactory
-     */
-    public IdentityRepositoryFactory getIdentityRepositoryFactory(final FileSystemOptions opts)
-    {
-        return (IdentityRepositoryFactory) this.getParam(opts, IDENTITY_REPOSITORY_FACTORY);
-    }
-
-    /**
-     * @param opts
-     *            The FileSystem options.
-     * @return the known hosts File.
-     * @see #setKnownHosts
-     */
-    public File getKnownHosts(final FileSystemOptions opts)
-    {
-        return (File) this.getParam(opts, KNOWN_HOSTS);
-    }
-
-    /**
-     * Gets authentication order.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return The authentication order.
-     * @since 2.0
-     */
-    public String getPreferredAuthentications(final FileSystemOptions opts)
-    {
-        return getString(opts, PREFERRED_AUTHENTICATIONS);
-    }
-
-    /**
-     * Gets the command that will be run on the proxy
-     * host when using a {@linkplain SftpStreamProxy}. The
-     * command defaults to {@linkplain SftpStreamProxy#NETCAT_COMMAND}.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return proxyOptions
-     * @see SftpStreamProxy
-     * @see #setProxyOptions
-     * @since 2.1
-     */
-    public String getProxyCommand(final FileSystemOptions opts)
-    {
-        return this.getString(opts, PROXY_COMMAND, SftpStreamProxy.NETCAT_COMMAND);
-    }
-
-    /**
-     * Gets the proxy to use for the SFTP connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return proxyHost
-     * @see #getProxyPort
-     * @see #setProxyHost
-     */
-    public String getProxyHost(final FileSystemOptions opts)
-    {
-        return this.getString(opts, PROXY_HOST);
-    }
-
-    /**
-     * Gets the proxy options that are used to connect
-     * to the proxy host.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return proxyOptions
-     * @see SftpStreamProxy
-     * @see #setProxyOptions
-     * @since 2.1
-     */
-    public FileSystemOptions getProxyOptions(final FileSystemOptions opts)
-    {
-        return (FileSystemOptions) this.getParam(opts, PROXY_OPTIONS);
-    }
-
-    /**
-     * Gets the proxy password that are used to connect
-     * to the proxy host.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return proxyOptions
-     * @see SftpStreamProxy
-     * @see #setProxyPassword
-     * @since 2.1
-     */
-    public String getProxyPassword(final FileSystemOptions opts)
-    {
-        return this.getString(opts, PROXY_PASSWORD);
-    }
-
-    /**
-     * Gets the proxy-port to use for the SFTP the connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return proxyPort: the port number or 0 if it is not set
-     * @see #setProxyPort
-     * @see #getProxyHost
-     */
-    public int getProxyPort(final FileSystemOptions opts)
-    {
-        return this.getInteger(opts, PROXY_PORT, 0);
-    }
-
-    /**
-     * Gets the proxy type to use for the SFTP connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return The ProxyType.
-     */
-    public ProxyType getProxyType(final FileSystemOptions opts)
-    {
-        return (ProxyType) this.getParam(opts, PROXY_TYPE);
-    }
-
-    /**
-     * Gets the user name for the proxy used for the SFTP connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return proxyUser
-     * @see #setProxyUser
-     * @since 2.1
-     */
-    public String getProxyUser(final FileSystemOptions opts)
-    {
-        return this.getString(opts, PROXY_USER);
-    }
-
-    /**
-     * @param opts
-     *            The FileSystem options.
-     * @return the option value The host key checking.
-     * @see #setStrictHostKeyChecking(FileSystemOptions, String)
-     */
-    public String getStrictHostKeyChecking(final FileSystemOptions opts)
-    {
-        return this.getString(opts, STRICT_HOST_KEY_CHECKING, HOST_KEY_CHECK_NO);
-    }
-
-    /**
-     * @param opts
-     *            The FileSystem options.
-     * @return The timeout value in milliseconds.
-     * @see #setTimeout
-     */
-    public Integer getTimeout(final FileSystemOptions opts)
-    {
-        return this.getInteger(opts, TIMEOUT);
-    }
-
-    /**
-     * Returns {@link Boolean#TRUE} if VFS should treat the user directory as the root directory. Defaults to
-     * <code>Boolean.TRUE</code> if the method {@link #setUserDirIsRoot(FileSystemOptions, boolean)} has not been
-     * invoked.
-     *
-     * @param opts
-     *            The FileSystemOptions.
-     * @return <code>Boolean.TRUE</code> if VFS treats the user directory as the root directory.
-     * @see #setUserDirIsRoot
-     */
-    public Boolean getUserDirIsRoot(final FileSystemOptions opts)
-    {
-        return this.getBoolean(opts, USER_DIR_IS_ROOT, Boolean.TRUE);
-    }
-
-    /**
-     * @param opts
-     *            The FileSystem options.
-     * @return The UserInfo.
-     * @see #setUserInfo
-     */
-    public UserInfo getUserInfo(final FileSystemOptions opts)
-    {
-        return (UserInfo) this.getParam(opts, UserInfo.class.getName());
-    }
-
-    /**
-     * Configures the compression algorithms to use.
-     * <p>
-     * For example, use {@code "zlib,none"} to enable compression.
-     * <p>
-     * See the Jsch documentation (in particular the README file) for details.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param compression
-     *            The names of the compression algorithms, comma-separated.
-     * @throws FileSystemException
-     *             if an error occurs.
-     */
-    public void setCompression(final FileSystemOptions opts, final String compression) throws FileSystemException
-    {
-        this.setParam(opts, COMPRESSION, compression);
-    }
-
-    /**
-     * Sets the file name encoding.
-     *
-     * @param opts The FileSystem options.
-     * @param fileNameEncoding The name of the encoding to use for file names.
-     */
-    public void setFileNameEncoding(final FileSystemOptions opts, final String fileNameEncoding)
-    {
-        this.setParam(opts, ENCODING, fileNameEncoding);
-    }
-
-    /**
-     * Sets the identity files (your private key files).
-     * <p>
-     * We use {@link java.io.File} because JSch cannot deal with VFS FileObjects.
-     *
-     * @param opts The FileSystem options.
-     * @param identityFiles An array of identity Files.
-     * @throws FileSystemException if an error occurs.
-     * @deprecated As of 2.1 use {@link #setIdentityInfo(FileSystemOptions, IdentityInfo...)}
-     */
-    @Deprecated
-    public void setIdentities(final FileSystemOptions opts, final File... identityFiles)
-        throws FileSystemException
-    {
-        IdentityInfo[] info = null;
-        if (identityFiles != null)
-        {
-            info = new IdentityInfo[identityFiles.length];
-            for (int i = 0; i < identityFiles.length; i++)
-            {
-                info[i] = new IdentityInfo(identityFiles[i]);
-            }
-        }
-        this.setParam(opts, IDENTITIES, info);
-    }
-
-    /**
-     * Sets the identity info (your private key files).
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param identites
-     *            An array of identity info.
-     * @throws FileSystemException
-     *             if an error occurs.
-     * @since 2.1
-     */
-    public void setIdentityInfo(final FileSystemOptions opts, final IdentityInfo... identites)
-        throws FileSystemException
-    {
-        this.setParam(opts, IDENTITIES, identites);
-    }
-
-    /**
-     * Set the identity repository.
-     * <p>
-     * This is useful when you want to use e.g. an SSH agent as provided.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param factory
-     *            An identity repository.
-     * @throws FileSystemException
-     *             if an error occurs.
-     * @see <a href="http://www.jcraft.com/jsch-agent-proxy/">JSch agent proxy</a>
-     */
-    public void setIdentityRepositoryFactory(final FileSystemOptions opts, final IdentityRepositoryFactory factory)
-            throws FileSystemException
-    {
-        this.setParam(opts, IDENTITY_REPOSITORY_FACTORY, factory);
-    }
-
-    /**
-     * Sets the known_hosts file. e.g. {@code /home/user/.ssh/known_hosts2}.
-     * <p>
-     * We use {@link java.io.File} because JSch cannot deal with VFS FileObjects.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param knownHosts
-     *            The known hosts file.
-     * @throws FileSystemException
-     *             if an error occurs.
-     */
-    public void setKnownHosts(final FileSystemOptions opts, final File knownHosts) throws FileSystemException
-    {
-        this.setParam(opts, KNOWN_HOSTS, knownHosts);
-    }
-
-    /**
-     * Configures authentication order.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param preferredAuthentications
-     *            The authentication order.
-     * @since 2.0
-     */
-    public void setPreferredAuthentications(final FileSystemOptions opts, final String preferredAuthentications)
-    {
-        this.setParam(opts, PREFERRED_AUTHENTICATIONS, preferredAuthentications);
-    }
-
-    /**
-     * Sets the proxy username to use for the SFTP connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param proxyCommand
-     *            the port
-     * @see #getProxyOptions
-     * @since 2.1
-     */
-    public void setProxyCommand(final FileSystemOptions opts, final String proxyCommand)
-    {
-        this.setParam(opts, PROXY_COMMAND, proxyCommand);
-    }
-
-    /**
-     * Sets the proxy to use for the SFTP connection.
-     *
-     * You MUST also set the proxy port to use the proxy.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param proxyHost
-     *            the host
-     * @see #setProxyPort
-     */
-    public void setProxyHost(final FileSystemOptions opts, final String proxyHost)
-    {
-        this.setParam(opts, PROXY_HOST, proxyHost);
-    }
-
-    /**
-     * Sets the proxy username to use for the SFTP connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param proxyOptions
-     *            the options
-     * @see #getProxyOptions
-     * @since 2.1
-     */
-    public void setProxyOptions(final FileSystemOptions opts, final FileSystemOptions proxyOptions)
-    {
-        this.setParam(opts, PROXY_OPTIONS, proxyOptions);
-    }
-
-    /**
-     * Sets the proxy password to use for the SFTP connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param proxyPassword
-     *            the username used to connect to the proxy
-     * @see #getProxyPassword
-     * @since 2.1
-     */
-    public void setProxyPassword(final FileSystemOptions opts, final String proxyPassword)
-    {
-        this.setParam(opts, PROXY_PASSWORD, proxyPassword);
-    }
-
-    /**
-     * Sets the proxy port to use for the SFTP connection.
-     * <p>
-     * You MUST also set the proxy host to use the proxy.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param proxyPort
-     *            the port
-     * @see #setProxyHost
-     */
-    public void setProxyPort(final FileSystemOptions opts, final int proxyPort)
-    {
-        this.setParam(opts, PROXY_PORT, Integer.valueOf(proxyPort));
-    }
-
-    /**
-     * Sets the proxy type to use for the SFTP connection.
-     *
-     * The possibles values are:
-     * <ul>
-     * <li>{@linkplain #PROXY_HTTP} connects using an HTTP proxy</li>
-     * <li>{@linkplain #PROXY_SOCKS5} connects using an Socket5 proxy</li>
-     * <li>{@linkplain #PROXY_STREAM} connects through a remote host stream command</li>
-     * </ul>
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param proxyType
-     *            the type of the proxy to use.
-     */
-    public void setProxyType(final FileSystemOptions opts, final ProxyType proxyType)
-    {
-        this.setParam(opts, PROXY_TYPE, proxyType);
-    }
-
-    /**
-     * Sets the proxy username to use for the SFTP connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param proxyUser
-     *            the username used to connect to the proxy
-     * @see #getProxyUser
-     * @since 2.1
-     */
-    public void setProxyUser(final FileSystemOptions opts, final String proxyUser)
-    {
-        this.setParam(opts, PROXY_USER, proxyUser);
-    }
-
-    /**
-     * Configures the host key checking to use.
-     * <p>
-     * Valid arguments are: {@code "yes"}, {@code "no"} and {@code "ask"}.
-     * </p>
-     * <p>
-     * See the jsch documentation for details.
-     * </p>
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param hostKeyChecking
-     *            The host key checking to use.
-     * @throws FileSystemException
-     *             if an error occurs.
-     */
-    public void setStrictHostKeyChecking(final FileSystemOptions opts, final String hostKeyChecking)
-            throws FileSystemException
-    {
-        if (hostKeyChecking == null
-                || (!hostKeyChecking.equals(HOST_KEY_CHECK_ASK) && !hostKeyChecking.equals(HOST_KEY_CHECK_NO) &&
-                    !hostKeyChecking.equals(HOST_KEY_CHECK_YES)))
-        {
-            throw new FileSystemException("vfs.provider.sftp/StrictHostKeyChecking-arg.error", hostKeyChecking);
-        }
-
-        this.setParam(opts, STRICT_HOST_KEY_CHECKING, hostKeyChecking);
-    }
-
-    /**
-     * Sets the timeout value on Jsch session.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param timeout
-     *            The timeout in milliseconds.
-     */
-    public void setTimeout(final FileSystemOptions opts, final Integer timeout)
-    {
-        this.setParam(opts, TIMEOUT, timeout);
-    }
-
-    /**
-     * Sets the whether to use the user directory as root (do not change to file system root).
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param userDirIsRoot
-     *            true if the user directory is the root directory.
-     */
-    public void setUserDirIsRoot(final FileSystemOptions opts, final boolean userDirIsRoot)
-    {
-        this.setParam(opts, USER_DIR_IS_ROOT, userDirIsRoot ? Boolean.TRUE : Boolean.FALSE);
-    }
-
-    /**
-     * Sets the Jsch UserInfo class to use.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @param info
-     *            User information.
-     */
-    public void setUserInfo(final FileSystemOptions opts, final UserInfo info)
-    {
-        this.setParam(opts, UserInfo.class.getName(), info);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpRandomAccessContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpRandomAccessContent.java
deleted file mode 100644
index 30d6e2e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpRandomAccessContent.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.commons.vfs2.provider.sftp;
-
-import java.io.DataInputStream;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.AbstractRandomAccessStreamContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * Random access content.
- */
-class SftpRandomAccessContent extends AbstractRandomAccessStreamContent
-{
-    /** file pointer */
-    protected long filePointer = 0;
-
-    private final SftpFileObject fileObject;
-    private DataInputStream dis = null;
-    private InputStream mis = null;
-
-    SftpRandomAccessContent(final SftpFileObject fileObject, final RandomAccessMode mode)
-    {
-        super(mode);
-
-        this.fileObject = fileObject;
-        // fileSystem = (FtpFileSystem) this.fileObject.getFileSystem();
-    }
-
-    @Override
-    public long getFilePointer() throws IOException
-    {
-        return filePointer;
-    }
-
-    @Override
-    public void seek(final long pos) throws IOException
-    {
-        if (pos == filePointer)
-        {
-            // no change
-            return;
-        }
-
-        if (pos < 0)
-        {
-            throw new FileSystemException("vfs.provider/random-access-invalid-position.error",
-                    Long.valueOf(pos));
-        }
-        if (dis != null)
-        {
-            close();
-        }
-
-        filePointer = pos;
-    }
-
-    @Override
-    protected DataInputStream getDataInputStream() throws IOException
-    {
-        if (dis != null)
-        {
-            return dis;
-        }
-
-        // FtpClient client = fileSystem.getClient();
-        mis = fileObject.getInputStream(filePointer);
-        dis = new DataInputStream(new FilterInputStream(mis)
-        {
-            @Override
-            public int read() throws IOException
-            {
-                final int ret = super.read();
-                if (ret > -1)
-                {
-                    filePointer++;
-                }
-                return ret;
-            }
-
-            @Override
-            public int read(final byte[] b) throws IOException
-            {
-                final int ret = super.read(b);
-                if (ret > -1)
-                {
-                    filePointer += ret;
-                }
-                return ret;
-            }
-
-            @Override
-            public int read(final byte[] b, final int off, final int len) throws IOException
-            {
-                final int ret = super.read(b, off, len);
-                if (ret > -1)
-                {
-                    filePointer += ret;
-                }
-                return ret;
-            }
-
-            @Override
-            public void close() throws IOException
-            {
-                SftpRandomAccessContent.this.close();
-            }
-        });
-
-        return dis;
-    }
-
-
-    @Override
-    public void close() throws IOException
-    {
-        if (dis != null)
-        {
-            // mis.abort();
-            mis.close();
-
-            // this is to avoid recursive close
-            final DataInputStream oldDis = dis;
-            dis = null;
-            oldDis.close();
-            mis = null;
-        }
-    }
-
-    @Override
-    public long length() throws IOException
-    {
-        return fileObject.getContent().getSize();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpStreamProxy.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpStreamProxy.java
deleted file mode 100644
index c595b14..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/SftpStreamProxy.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.commons.vfs2.provider.sftp;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.Socket;
-
-import org.apache.commons.vfs2.FileSystemOptions;
-
-import com.jcraft.jsch.ChannelExec;
-import com.jcraft.jsch.Proxy;
-import com.jcraft.jsch.Session;
-import com.jcraft.jsch.SocketFactory;
-
-/**
- * Stream based proxy for JSch.
- *
- * <p>
- * Use a command on the proxy that will forward the SSH stream to the target host and port.
- * </p>
- *
- * @since 2.1
- */
-public class SftpStreamProxy implements Proxy
-{
-    /**
-     * Command format using bash built-in TCP stream.
-     */
-    public static final String BASH_TCP_COMMAND = "/bin/bash -c 'exec 3<>/dev/tcp/%s/%d; cat <&3 & cat >&3; kill $!";
-
-    /**
-     * Command format using netcat command.
-     */
-    public static final String NETCAT_COMMAND = "nc -q 0 %s %d";
-
-    private ChannelExec channel;
-
-    /**
-     * Command pattern to execute on the proxy host.
-     * <p>
-     * When run, the command output should be forwarded to the target host and port, and its input should be forwarded
-     * from the target host and port.
-     * <p>
-     * The command will be created for each host/port pair by using {@linkplain String#format(String, Object...)} with
-     * two objects: the target host name ({@linkplain String}) and the target port ({@linkplain Integer}).
-     * <p>
-     * Here are two examples (that can be easily used by using the static members of this class):
-     * <ul>
-     * <li><code>nc -q 0 %s %d</code> to use the netcat command ({@linkplain #NETCAT_COMMAND})</li>
-     * <li><code>/bin/bash -c 'exec 3<>/dev/tcp/%s/%d; cat <&3 & cat >&3; kill $!</code> will use bash built-in TCP
-     * stream, which can be useful when there is no netcat available. ({@linkplain #BASH_TCP_COMMAND})</li>
-     * </ul>
-     */
-    private final String commandFormat;
-
-    /**
-     * Hostname used to connect to the proxy host.
-     */
-    private final String proxyHost;
-
-    /**
-     * The options for connection.
-     */
-    private final FileSystemOptions proxyOptions;
-
-    /**
-     * The password to be used for connection.
-     */
-    private final String proxyPassword;
-
-    /**
-     * Port used to connect to the proxy host.
-     */
-    private final int proxyPort;
-
-    /**
-     * Username used to connect to the proxy host.
-     */
-    private final String proxyUser;
-
-    private Session session;
-
-    /**
-     * Creates a stream proxy.
-     *
-     * @param commandFormat
-     *            A format string that will be used to create the command to execute on the proxy host using
-     *            {@linkplain String#format(String, Object...)}. Two parameters are given to the format command, the
-     *            target host name (String) and port (Integer).
-     * @param proxyUser
-     *            The proxy user
-     * @param proxyPassword
-     *            The proxy password
-     * @param proxyHost
-     *            The proxy host
-     * @param proxyPort
-     *            The port to connect to on the proxy
-     * @param proxyOptions
-     *            Options used when connecting to the proxy
-     */
-    public SftpStreamProxy(final String commandFormat, final String proxyUser, final String proxyHost,
-                           final int proxyPort, final String proxyPassword, final FileSystemOptions proxyOptions)
-    {
-        this.proxyHost = proxyHost;
-        this.proxyPort = proxyPort;
-        this.proxyUser = proxyUser;
-        this.proxyPassword = proxyPassword;
-        this.commandFormat = commandFormat;
-        this.proxyOptions = proxyOptions;
-    }
-
-    @Override
-    public void close()
-    {
-        if (channel != null)
-        {
-            channel.disconnect();
-        }
-        if (session != null)
-        {
-            session.disconnect();
-        }
-    }
-
-    @Override
-    public void connect(final SocketFactory socketFactory, final String targetHost,
-                        final int targetPort, final int timeout)
-        throws Exception
-    {
-        session = SftpClientFactory.createConnection(proxyHost, proxyPort, proxyUser.toCharArray(),
-                proxyPassword.toCharArray(), proxyOptions);
-        channel = (ChannelExec) session.openChannel("exec");
-        channel.setCommand(String.format(commandFormat, targetHost, targetPort));
-        channel.connect(timeout);
-    }
-
-    @Override
-    public InputStream getInputStream()
-    {
-        try
-        {
-            return channel.getInputStream();
-        }
-        catch (final IOException e)
-        {
-            throw new IllegalStateException("IOException getting the SSH proxy input stream", e);
-        }
-    }
-
-    @Override
-    public OutputStream getOutputStream()
-    {
-        try
-        {
-            return channel.getOutputStream();
-        }
-        catch (final IOException e)
-        {
-            throw new IllegalStateException("IOException getting the SSH proxy output stream", e);
-        }
-    }
-
-    @Override
-    public Socket getSocket()
-    {
-        return null;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/TrustEveryoneUserInfo.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/TrustEveryoneUserInfo.java
deleted file mode 100644
index d8ef515..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/TrustEveryoneUserInfo.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.commons.vfs2.provider.sftp;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.jcraft.jsch.UserInfo;
-
-/**
- * Helper class to trust a new host.
- */
-public class TrustEveryoneUserInfo implements UserInfo
-{
-    private static final Log log = LogFactory.getLog(TrustEveryoneUserInfo.class);
-
-    @Override
-    public String getPassphrase()
-    {
-        return null;
-    }
-
-    @Override
-    public String getPassword()
-    {
-        return null;
-    }
-
-    @Override
-    public boolean promptPassword(final String s)
-    {
-        log.info(s + " - Answer: False");
-        return false;
-    }
-
-    @Override
-    public boolean promptPassphrase(final String s)
-    {
-        log.info(s + " - Answer: False");
-        return false;
-    }
-
-    @Override
-    public boolean promptYesNo(final String s)
-    {
-        log.debug(s + " - Answer: Yes");
-
-        // trust
-        return true;
-    }
-
-    @Override
-    public void showMessage(final String s)
-    {
-        log.debug(s);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/package.html
deleted file mode 100644
index e33b51b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/sftp/package.html
+++ /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.
--->
-<body>
-<p>The SFTP Provider.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileObject.java
deleted file mode 100644
index 7d8d0f6..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileObject.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.tar;
-
-import java.io.InputStream;
-import java.util.HashSet;
-
-import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-
-/**
- * A file in a Tar file system.
- */
-public class TarFileObject extends AbstractFileObject<TarFileSystem>
-{
-    /** The TarArchiveEntry */
-    private TarArchiveEntry entry;
-    private final HashSet<String> children = new HashSet<String>();
-    private FileType type;
-
-    protected TarFileObject(final AbstractFileName name,
-                            final TarArchiveEntry entry,
-                            final TarFileSystem fs,
-                            final boolean tarExists) throws FileSystemException
-    {
-        super(name, fs);
-        setTarEntry(entry);
-        if (!tarExists)
-        {
-            type = FileType.IMAGINARY;
-        }
-    }
-
-    /**
-     * Sets the details for this file object.
-     */
-    void setTarEntry(final TarArchiveEntry entry)
-    {
-        if (this.entry != null)
-        {
-            return;
-        }
-
-        if (entry == null || entry.isDirectory())
-        {
-            type = FileType.FOLDER;
-        }
-        else
-        {
-            type = FileType.FILE;
-        }
-
-        this.entry = entry;
-    }
-
-    /**
-     * Attaches a child.
-     * @param childName Name of child to remember.
-     */
-    protected void attachChild(final FileName childName)
-    {
-        children.add(childName.getBaseName());
-    }
-
-    /**
-     * Determines if this file can be written to.
-     *
-     * @return {@code true} if this file is writeable, {@code false} if not.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean isWriteable() throws FileSystemException
-    {
-        return false;
-    }
-
-    /**
-     * Returns the file's type.
-     */
-    @Override
-    protected FileType doGetType()
-    {
-        return type;
-    }
-
-    /**
-     * Lists the children of the file.
-     */
-    @Override
-    protected String[] doListChildren()
-    {
-        try
-        {
-            if (!getType().hasChildren())
-            {
-                return null;
-            }
-        }
-        catch (final FileSystemException e)
-        {
-            // should not happen as the type has already been cached.
-            throw new RuntimeException(e);
-        }
-
-        return children.toArray(new String[children.size()]);
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).  Is only called if
-     * {@link #doGetType} returns {@link FileType#FILE}.
-     */
-    @Override
-    protected long doGetContentSize()
-    {
-        if (entry == null)
-        {
-            return 0;
-        }
-
-        return entry.getSize();
-    }
-
-    /**
-     * Returns the last modified time of this file.
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        if (entry == null)
-        {
-            return 0;
-        }
-
-        return entry.getModTime().getTime();
-    }
-
-    /**
-     * Creates an input stream to read the file content from.  Is only called
-     * if  {@link #doGetType} returns {@link FileType#FILE}.  The input stream
-     * returned by this method is guaranteed to be closed before this
-     * method is called again.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        // VFS-210: zip allows to gather an input stream even from a directory and will
-        // return -1 on the first read. getType should not be expensive and keeps the tests
-        // running
-        if (!getType().hasContent())
-        {
-            throw new FileSystemException("vfs.provider/read-not-file.error", getName());
-        }
-
-        return getAbstractFileSystem().getInputStream(entry);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileProvider.java
deleted file mode 100644
index 63a4ef0..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileProvider.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.commons.vfs2.provider.tar;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractLayeredFileProvider;
-import org.apache.commons.vfs2.provider.FileProvider;
-import org.apache.commons.vfs2.provider.LayeredFileName;
-
-/**
- * A file system provider for Tar files.  Provides read-only file systems.
- */
-public class TarFileProvider extends AbstractLayeredFileProvider implements FileProvider
-{
-    /** The provider's capabilities */
-    protected static final Collection<Capability> capabilities =
-        Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-        {
-            Capability.GET_LAST_MODIFIED,
-            Capability.GET_TYPE,
-            Capability.LIST_CHILDREN,
-            Capability.READ_CONTENT,
-            Capability.URI,
-            Capability.VIRTUAL
-        }));
-
-    public TarFileProvider()
-    {
-        super();
-    }
-
-    /**
-     * Creates a layered file system.  This method is called if the file system
-     * is not cached.
-     *
-     * @param scheme The URI scheme.
-     * @param file   The file to create the file system on top of.
-     * @return The file system.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final String scheme,
-                                            final FileObject file,
-                                            final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final AbstractFileName rootName =
-            new LayeredFileName(scheme, file.getName(), FileName.ROOT_PATH, FileType.FOLDER);
-        return new TarFileSystem(rootName, file, fileSystemOptions);
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileSystem.java
deleted file mode 100644
index bc783e5..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TarFileSystem.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.commons.vfs2.provider.tar;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.zip.GZIPInputStream;
-
-import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
-import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.VfsLog;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.provider.bzip2.Bzip2FileObject;
-
-/**
- * A read-only file system for Tar files.
- */
-public class TarFileSystem extends AbstractFileSystem
-{
-    private static final int DEFAULT_INDEX_SIZE = 100;
-
-    private static final Log LOG = LogFactory.getLog(TarFileSystem.class);
-
-    private final File file;
-    private TarArchiveInputStream tarFile;
-
-    protected TarFileSystem(final AbstractFileName rootName,
-                            final FileObject parentLayer,
-                            final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        super(rootName, parentLayer, fileSystemOptions);
-
-        // Make a local copy of the file
-        file = parentLayer.getFileSystem().replicateFile(parentLayer, Selectors.SELECT_SELF);
-
-        // Open the Tar file
-        if (!file.exists())
-        {
-            // Don't need to do anything
-            tarFile = null;
-            return;
-        }
-
-        // tarFile = createTarFile(this.file);
-    }
-
-    @Override
-    public void init() throws FileSystemException
-    {
-        super.init();
-
-        // Build the index
-        try
-        {
-            final List<TarFileObject> strongRef = new ArrayList<TarFileObject>(DEFAULT_INDEX_SIZE);
-            TarArchiveEntry entry;
-            while ((entry = getTarFile().getNextTarEntry()) != null)
-            {
-                final AbstractFileName name = (AbstractFileName) getFileSystemManager().resolveName(getRootName(),
-                    UriParser.encode(entry.getName()));
-
-                // Create the file
-                TarFileObject fileObj;
-                if (entry.isDirectory() && getFileFromCache(name) != null)
-                {
-                    fileObj = (TarFileObject) getFileFromCache(name);
-                    fileObj.setTarEntry(entry);
-                    continue;
-                }
-
-                fileObj = createTarFileObject(name, entry);
-                putFileToCache(fileObj);
-                strongRef.add(fileObj);
-                fileObj.holdObject(strongRef);
-
-                // Make sure all ancestors exist
-                // TODO - create these on demand
-                TarFileObject parent = null;
-                for (AbstractFileName parentName = (AbstractFileName) name.getParent();
-                     parentName != null;
-                     fileObj = parent, parentName = (AbstractFileName) parentName.getParent())
-                {
-                    // Locate the parent
-                    parent = (TarFileObject) getFileFromCache(parentName);
-                    if (parent == null)
-                    {
-                        parent = createTarFileObject(parentName, null);
-                        putFileToCache(parent);
-                        strongRef.add(parent);
-                        parent.holdObject(strongRef);
-                    }
-
-                    // Attach child to parent
-                    parent.attachChild(fileObj.getName());
-                }
-            }
-        }
-        catch (final IOException e)
-        {
-            throw new FileSystemException(e);
-        }
-        finally
-        {
-            closeCommunicationLink();
-        }
-    }
-
-    public InputStream getInputStream(final TarArchiveEntry entry) throws FileSystemException
-    {
-        resetTarFile();
-        try
-        {
-            while (!tarFile.getNextEntry().equals(entry))
-            {
-            }
-            return tarFile;
-        }
-        catch (final IOException e)
-        {
-            throw new FileSystemException(e);
-        }
-    }
-
-    protected void resetTarFile() throws FileSystemException
-    {
-        // Reading specific entries requires skipping through the tar file from the beginning
-        // Not especially elegant, but we don't have the ability to seek to specific positions
-        // with an input stream.
-        if (this.file.exists())
-        {
-            recreateTarFile();
-        }
-    }
-
-    private void recreateTarFile() throws FileSystemException
-    {
-        if (this.tarFile != null)
-        {
-            try
-            {
-                this.tarFile.close();
-            }
-            catch (final IOException e)
-            {
-                throw new FileSystemException("vfs.provider.tar/close-tar-file.error", file, e);
-            }
-            tarFile = null;
-        }
-        final TarArchiveInputStream tarFile = createTarFile(this.file);
-        this.tarFile = tarFile;
-    }
-
-    protected TarArchiveInputStream getTarFile() throws FileSystemException
-    {
-        if (tarFile == null && this.file.exists())
-        {
-            recreateTarFile();
-        }
-
-        return tarFile;
-    }
-
-    protected TarFileObject createTarFileObject(final AbstractFileName name,
-                                                final TarArchiveEntry entry) throws FileSystemException
-    {
-        return new TarFileObject(name, entry, this, true);
-    }
-
-    protected TarArchiveInputStream createTarFile(final File file) throws FileSystemException
-    {
-        try
-        {
-            if ("tgz".equalsIgnoreCase(getRootName().getScheme()))
-            {
-                return new TarArchiveInputStream(new GZIPInputStream(new FileInputStream(file)));
-            }
-            else if ("tbz2".equalsIgnoreCase(getRootName().getScheme()))
-            {
-                return new TarArchiveInputStream(Bzip2FileObject.wrapInputStream(file.getAbsolutePath(),
-                    new FileInputStream(file)));
-            }
-            return new TarArchiveInputStream(new FileInputStream(file));
-        }
-        catch (final IOException ioe)
-        {
-            throw new FileSystemException("vfs.provider.tar/open-tar-file.error", file, ioe);
-        }
-    }
-
-    @Override
-    protected void doCloseCommunicationLink()
-    {
-        // Release the tar file
-        try
-        {
-            if (tarFile != null)
-            {
-                tarFile.close();
-                tarFile = null;
-            }
-        }
-        catch (final IOException e)
-        {
-            // getLogger().warn("vfs.provider.tar/close-tar-file.error :" + file, e);
-            VfsLog.warn(getLogger(), LOG, "vfs.provider.tar/close-tar-file.error :" + file, e);
-        }
-    }
-
-    /**
-     * Returns the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(TarFileProvider.capabilities);
-    }
-
-    /**
-     * Creates a file object.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws FileSystemException
-    {
-        // This is only called for files which do not exist in the Tar file
-        return new TarFileObject(name, null, this, false);
-    }
-
-    /**
-     * will be called after all file-objects closed their streams.
-    protected void notifyAllStreamsClosed()
-    {
-        closeCommunicationLink();
-    }
-     */
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/Tbz2FileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/Tbz2FileProvider.java
deleted file mode 100644
index e31884f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/Tbz2FileProvider.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.commons.vfs2.provider.tar;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.provider.CompositeFileProvider;
-
-/**
- * A file system provider for Tar files.  Provides read-only file systems.
- */
-public class Tbz2FileProvider extends CompositeFileProvider
-{
-    /** The provider's capabilities */
-    protected static final Collection<Capability> capabilities = TarFileProvider.capabilities;
-
-    private static final String[] SCHEMES = new String[]
-    {
-        "bz2",
-        "tar"
-    };
-
-    public Tbz2FileProvider()
-    {
-        super();
-    }
-
-    @Override
-    protected String[] getSchemes()
-    {
-        return SCHEMES;
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TgzFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TgzFileProvider.java
deleted file mode 100644
index b63bfcb..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/TgzFileProvider.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.commons.vfs2.provider.tar;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.provider.CompositeFileProvider;
-
-/**
- * A file system provider for Tar files.  Provides read-only file systems.
- */
-public class TgzFileProvider extends CompositeFileProvider
-{
-    /** The provider's capabilities */
-    protected static final Collection<Capability> capabilities = TarFileProvider.capabilities;
-
-    private static final String[] SCHEMES = new String[]
-    {
-        "gz",
-        "tar"
-    };
-
-    public TgzFileProvider()
-    {
-        super();
-    }
-
-    @Override
-    protected String[] getSchemes()
-    {
-        return SCHEMES;
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/package.html
deleted file mode 100644
index a70bf44..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/tar/package.html
+++ /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.
--->
-<body>
-<p>The Tar File Provider.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/temp/TemporaryFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/temp/TemporaryFileProvider.java
deleted file mode 100644
index 4dda935..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/temp/TemporaryFileProvider.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.commons.vfs2.provider.temp;
-
-import java.io.File;
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileProvider;
-import org.apache.commons.vfs2.provider.FileProvider;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider;
-import org.apache.commons.vfs2.provider.local.LocalFileSystem;
-
-/**
- * A provider for temporary files.
- */
-public class TemporaryFileProvider
-    extends AbstractFileProvider
-    implements FileProvider, Comparable<Object>
-{
-    private File rootFile;
-
-    /*
-    private final static FileName tmpFileName = new AbstractFileName("tmp", "/")
-    {
-        protected FileName createName(String absPath)
-        {
-            return null;
-        }
-
-        protected void appendRootUri(StringBuffer buffer)
-        {
-        }
-    };
-*/
-
-    public TemporaryFileProvider(final File rootFile)
-    {
-        this();
-
-        this.rootFile = rootFile;
-    }
-
-    public TemporaryFileProvider()
-    {
-        super();
-    }
-
-    @Override
-    public int compareTo(final Object o)
-    {
-        final int h1 = hashCode();
-        final int h2 = o.hashCode();
-        if (h1 < h2)
-        {
-            return -1;
-        }
-        if (h1 > h2)
-        {
-            return 1;
-        }
-
-        return 0;
-    }
-
-    /**
-     * Locates a file object, by absolute URI.
-     * @param baseFile The base FileObject.
-     * @param uri The URI of the file to be located.
-     * @param properties FileSystemOptions to use to locate or create the file.
-     * @return The FileObject.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public synchronized FileObject findFile(final FileObject baseFile, final String uri,
-                                            final FileSystemOptions properties)
-        throws FileSystemException
-    {
-        // Parse the name
-        final StringBuilder buffer = new StringBuilder(uri);
-        final String scheme = UriParser.extractScheme(uri, buffer);
-        UriParser.fixSeparators(buffer);
-        UriParser.normalisePath(buffer);
-        final String path = buffer.toString();
-
-        // Create the temp file system if it does not exist
-        // FileSystem filesystem = findFileSystem( this, (Properties) null);
-        FileSystem filesystem = findFileSystem(this, properties);
-        if (filesystem == null)
-        {
-            if (rootFile == null)
-            {
-                rootFile = getContext().getTemporaryFileStore().allocateFile("tempfs");
-            }
-            final FileName rootName =
-                getContext().parseURI(scheme + ":" + FileName.ROOT_PATH);
-            // final FileName rootName =
-            //    new LocalFileName(scheme, scheme + ":", FileName.ROOT_PATH);
-            filesystem = new LocalFileSystem(rootName, rootFile.getAbsolutePath(), properties);
-            addFileSystem(this, filesystem);
-        }
-
-        // Find the file
-        return filesystem.resolveFile(path);
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return DefaultLocalFileProvider.capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/temp/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/temp/package.html
deleted file mode 100644
index 4b027ea..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/temp/package.html
+++ /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.
--->
-<body>
-<p>The Temporary Filespace Provider.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileName.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileName.java
deleted file mode 100644
index 01684be..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileName.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.commons.vfs2.provider.url;
-
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.URLFileName;
-
-/**
- * A URL FileName.
- */
-public class UrlFileName extends URLFileName
-{
-    /**
-     * The constructor.
-     * @param scheme The scheme to use.
-     * @param hostName The host name.
-     * @param port The port.
-     * @param defaultPort The default port.
-     * @param userName The user's login id.
-     * @param password The user's credentials.
-     * @param path The file path.
-     * @param type The file type.
-     * @param queryString Parameters to use when locating or creating the file name.
-     */
-    public UrlFileName(final String scheme, final String hostName, final int port, final int defaultPort,
-                       final String userName, final String password, final String path, final FileType type,
-                       final String queryString)
-    {
-        super(scheme, hostName, port, defaultPort, userName, password, path, type, queryString);
-    }
-
-    @Override
-    protected void appendRootUri(final StringBuilder buffer, final boolean addPassword)
-    {
-        if (getHostName() != null && !"".equals(getHostName()))
-        {
-            super.appendRootUri(buffer, addPassword);
-            return;
-        }
-
-        buffer.append(getScheme());
-        buffer.append(":");
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileNameParser.java
deleted file mode 100644
index f97fd26..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileNameParser.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.commons.vfs2.provider.url;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.AbstractFileNameParser;
-import org.apache.commons.vfs2.provider.URLFileName;
-import org.apache.commons.vfs2.provider.URLFileNameParser;
-import org.apache.commons.vfs2.provider.VfsComponentContext;
-import org.apache.commons.vfs2.provider.local.GenericFileNameParser;
-
-/**
- * Implementation for any java.net.url based filesystem.
- * <p>
- * Composite of URLFilenameParser and GenericFilenameParser
- */
-public class UrlFileNameParser extends AbstractFileNameParser
-{
-    private final URLFileNameParser url = new URLFileNameParser(80);
-    private final GenericFileNameParser generic = new GenericFileNameParser();
-
-    public UrlFileNameParser()
-    {
-        super();
-    }
-
-    @Override
-    public boolean encodeCharacter(final char ch)
-    {
-        return super.encodeCharacter(ch) || ch == '?';
-    }
-
-  /**
-   * Parse a URI.
-   * @param context The component context.
-   * @param base The base FileName.
-   * @param uri The target file name.
-   * @return The FileName.
-   * @throws FileSystemException if an error occurs
-   */
-    @Override
-    public FileName parseUri(final VfsComponentContext context, final FileName base, final String uri)
-        throws FileSystemException
-    {
-        if (isUrlBased(base, uri))
-        {
-            return url.parseUri(context, base, uri);
-        }
-
-        return generic.parseUri(context, base, uri);
-    }
-
-    /**
-     * Guess if the given file name is an URL with host or not.
-     * <p>
-     * VFS treats such URLs differently.
-     * <p>
-     * A file name is URL-based if the base is a {@code URLFileName} or there are only 2 slashes
-     * after the scheme.
-     * e.g: {@code http://host/path}, {@code file:/path/to/file}, {@code file:///path/to/file}.
-     * @param base The filename is relative to this base.
-     * @param filename The filename.
-     * @return true if filename contains two slashes or base was URLFileName.
-     */
-    protected boolean isUrlBased(final FileName base, final String filename)
-    {
-        if (base instanceof URLFileName)
-        {
-            return true;
-        }
-
-        return countSlashes(filename) == 2;
-    }
-
-    /**
-     * This method counts the slashes after the scheme.
-     *
-     * @param filename The file name.
-     * @return number of slashes
-     */
-    protected int countSlashes(final String filename)
-    {
-        int state = 0;
-        int nuofSlash = 0;
-        for (int pos = 0; pos < filename.length(); pos++)
-        {
-            final char c = filename.charAt(pos);
-            if (state == 0)
-            {
-                if (c >= 'a' && c <= 'z')
-                {
-                    continue;
-                }
-                if (c == ':')
-                {
-                    state++;
-                    continue;
-                }
-            }
-            else if (state == 1)
-            {
-                if (c == '/')
-                {
-                    nuofSlash++;
-                }
-                else
-                {
-                    return nuofSlash;
-                }
-            }
-        }
-        return nuofSlash;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileObject.java
deleted file mode 100644
index 4ff201d..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileObject.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.commons.vfs2.provider.url;
-
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import org.apache.commons.httpclient.URIException;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.provider.URLFileName;
-
-/**
- * A {@link org.apache.commons.vfs2.FileObject FileObject}
- * implementation backed by a {@link URL}.
- * <p>
- * TODO - Implement set lastModified and get/set attribute
- * <p>
- * TODO - Implement getOutputStream().
- */
-public class UrlFileObject extends AbstractFileObject<UrlFileSystem>
-{
-    private URL url;
-
-    protected UrlFileObject(final UrlFileSystem fs,
-                            final AbstractFileName fileName)
-    {
-        super(fileName, fs);
-    }
-
-    /**
-     * Attaches this file object to its file resource.  This method is called
-     * before any of the doBlah() or onBlah() methods.  Sub-classes can use
-     * this method to perform lazy initialisation.
-     */
-    @Override
-    protected void doAttach() throws Exception
-    {
-        if (url == null)
-        {
-            // url = new URL(getName().getURI());
-            url = createURL(getName());
-        }
-    }
-
-    protected URL createURL(final FileName name) throws MalformedURLException, FileSystemException, URIException
-    {
-        if (name instanceof URLFileName)
-        {
-            final URLFileName urlName = (URLFileName) getName();
-
-            // TODO: charset
-            return new URL(urlName.getURIEncoded(null));
-        }
-        return new URL(getName().getURI());
-    }
-
-    /**
-     * Determines the type of the file.
-     */
-    @Override
-    protected FileType doGetType() throws Exception
-    {
-        try
-        {
-            // Attempt to connect & check status
-            final URLConnection conn = url.openConnection();
-            final InputStream in = conn.getInputStream();
-            try
-            {
-                if (conn instanceof HttpURLConnection)
-                {
-                    final int status = ((HttpURLConnection) conn).getResponseCode();
-                    // 200 is good, maybe add more later...
-                    if (HttpURLConnection.HTTP_OK != status)
-                    {
-                        return FileType.IMAGINARY;
-                    }
-                }
-
-                return FileType.FILE;
-            }
-            finally
-            {
-                in.close();
-            }
-        }
-        catch (final FileNotFoundException e)
-        {
-            return FileType.IMAGINARY;
-        }
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        final URLConnection conn = url.openConnection();
-        final InputStream in = conn.getInputStream();
-        try
-        {
-            return conn.getContentLength();
-        }
-        finally
-        {
-            in.close();
-        }
-    }
-
-    /**
-     * Returns the last modified time of this file.
-     */
-    @Override
-    protected long doGetLastModifiedTime()
-        throws Exception
-    {
-        final URLConnection conn = url.openConnection();
-        final InputStream in = conn.getInputStream();
-        try
-        {
-            return conn.getLastModified();
-        }
-        finally
-        {
-            in.close();
-        }
-    }
-
-    /**
-     * Lists the children of the file.
-     */
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        throw new FileSystemException("Not implemented.");
-    }
-
-    /**
-     * Creates an input stream to read the file content from.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        return url.openStream();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileProvider.java
deleted file mode 100644
index 507280c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileProvider.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.commons.vfs2.provider.url;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileProvider;
-
-/**
- * A file provider backed by Java's URL API.
- */
-public class UrlFileProvider
-    extends AbstractFileProvider
-{
-    /** The provider's capabilities */
-    protected static final Collection<Capability> capabilities =
-        Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-    {
-        Capability.READ_CONTENT,
-        Capability.URI,
-        Capability.GET_LAST_MODIFIED
-    }));
-
-    public UrlFileProvider()
-    {
-        super();
-        setFileNameParser(new UrlFileNameParser());
-    }
-
-    /**
-     * Locates a file object, by absolute URI.
-     * @param baseFile The base FileObject.
-     * @param uri The uri of the file to locate.
-     * @param fileSystemOptions The FileSystemOptions
-     * @return The FileObject
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public synchronized FileObject findFile(final FileObject baseFile,
-                                            final String uri,
-                                            final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        try
-        {
-            final URL url = new URL(uri);
-
-            final URL rootUrl = new URL(url, "/");
-            final String key = this.getClass().getName() + rootUrl.toString();
-            FileSystem fs = findFileSystem(key, fileSystemOptions);
-            if (fs == null)
-            {
-                final String extForm = rootUrl.toExternalForm();
-                final FileName rootName =
-                    getContext().parseURI(extForm);
-                // final FileName rootName =
-                //    new BasicFileName(rootUrl, FileName.ROOT_PATH);
-                fs = new UrlFileSystem(rootName, fileSystemOptions);
-                addFileSystem(key, fs);
-            }
-            return fs.resolveFile(url.getPath());
-        }
-        catch (final MalformedURLException e)
-        {
-            throw new FileSystemException("vfs.provider.url/badly-formed-uri.error", uri, e);
-        }
-    }
-
-    @Override
-    public FileSystemConfigBuilder getConfigBuilder()
-    {
-        return org.apache.commons.vfs2.provider.res.ResourceFileSystemConfigBuilder.getInstance();
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileSystem.java
deleted file mode 100644
index 5e2d198..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/UrlFileSystem.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.commons.vfs2.provider.url;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-
-/**
- * A File system backed by Java's URL API.
- */
-public class UrlFileSystem
-    extends AbstractFileSystem
-{
-    protected UrlFileSystem(final FileName rootName, final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, null, fileSystemOptions);
-    }
-
-    /**
-     * Creates a file object.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name)
-    {
-        return new UrlFileObject(this, name);
-    }
-
-    /**
-     * Returns the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(UrlFileProvider.capabilities);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/package.html
deleted file mode 100644
index 2200b03..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/url/package.html
+++ /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.
--->
-<body>
-<p>The Default File Provider, which wraps java.net.URL.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/ExceptionConverter.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/ExceptionConverter.java
deleted file mode 100644
index 122feb0..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/ExceptionConverter.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.commons.vfs2.provider.webdav;
-
-import java.lang.reflect.Constructor;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.client.methods.DavMethod;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Element;
-
-/**
- * {@code ExceptionConverter} converts WebDAV exceptions into FileSystemExceptions.
- * @since 2.0
- */
-public final class ExceptionConverter
-{
-    // avoid instanciation
-    private ExceptionConverter()
-    {
-    }
-
-    public static FileSystemException generate(final DavException davExc) throws FileSystemException
-    {
-        return generate(davExc, null);
-    }
-
-    public static FileSystemException generate(final DavException davExc, final DavMethod method)
-            throws FileSystemException
-    {
-        String msg = davExc.getMessage();
-        if (davExc.hasErrorCondition())
-        {
-            try
-            {
-                final Element error = davExc.toXml(DomUtil.BUILDER_FACTORY.newDocumentBuilder().newDocument());
-                if (DomUtil.matches(error, DavException.XML_ERROR, DavConstants.NAMESPACE))
-                {
-                    if (DomUtil.hasChildElement(error, "exception", null))
-                    {
-                        final Element exc = DomUtil.getChildElement(error, "exception", null);
-                        if (DomUtil.hasChildElement(exc, "message", null))
-                        {
-                            msg = DomUtil.getChildText(exc, "message", null);
-                        }
-                        if (DomUtil.hasChildElement(exc, "class", null))
-                        {
-                            final Class<?> cl = Class.forName(DomUtil.getChildText(exc, "class", null));
-                            final Constructor<?> excConstr = cl.getConstructor(new Class[]{String.class});
-                            if (excConstr != null)
-                            {
-                                final Object o = excConstr.newInstance(new Object[]{msg});
-                                if (o instanceof FileSystemException)
-                                {
-                                    return (FileSystemException) o;
-                                }
-                                else if (o instanceof Exception)
-                                {
-                                    return new FileSystemException(msg, (Exception) o);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            catch (final Exception e)
-            {
-                throw new FileSystemException(e);
-            }
-        }
-
-        return new FileSystemException(msg);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileContentInfoFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileContentInfoFactory.java
deleted file mode 100644
index f738da9..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileContentInfoFactory.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.commons.vfs2.provider.webdav;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileContentInfo;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.impl.DefaultFileContentInfo;
-import org.apache.commons.vfs2.provider.URLFileName;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-
-/**
- * Determines the content information for files accessed via WebDAV.
- *
- * @since 2.0
- */
-public class WebdavFileContentInfoFactory implements FileContentInfoFactory
-{
-    @Override
-    public FileContentInfo create(final FileContent fileContent) throws FileSystemException
-    {
-        final WebdavFileObject file = (WebdavFileObject) FileObjectUtils
-            .getAbstractFileObject(fileContent.getFile());
-
-        String contentType = null;
-        String contentEncoding = null;
-
-        final DavPropertyNameSet nameSet = new DavPropertyNameSet();
-        nameSet.add(DavPropertyName.GETCONTENTTYPE);
-        final DavPropertySet propertySet = file.getProperties((URLFileName) file.getName(), nameSet, true);
-
-        DavProperty property = propertySet.get(DavPropertyName.GETCONTENTTYPE);
-        if (property != null)
-        {
-            contentType = (String) property.getValue();
-        }
-        property = propertySet.get(WebdavFileObject.RESPONSE_CHARSET);
-        if (property != null)
-        {
-            contentEncoding = (String) property.getValue();
-        }
-
-        return new DefaultFileContentInfo(contentType, contentEncoding);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileNameParser.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileNameParser.java
deleted file mode 100644
index 6386a74..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileNameParser.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.commons.vfs2.provider.webdav;
-
-import org.apache.commons.vfs2.provider.FileNameParser;
-import org.apache.commons.vfs2.provider.http.HttpFileNameParser;
-
-/**
- * Implementation for http. set default port to 80
- * @since 2.0
- */
-public class WebdavFileNameParser extends HttpFileNameParser
-{
-    private static final WebdavFileNameParser INSTANCE = new WebdavFileNameParser();
-
-    public WebdavFileNameParser()
-    {
-        super();
-    }
-
-    public static FileNameParser getInstance()
-    {
-        return INSTANCE;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileObject.java
deleted file mode 100644
index 1e30859..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileObject.java
+++ /dev/null
@@ -1,802 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.webdav;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.HttpMethodBase;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.URIException;
-import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
-import org.apache.commons.httpclient.methods.RequestEntity;
-import org.apache.commons.httpclient.params.HttpMethodParams;
-import org.apache.commons.httpclient.util.DateUtil;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileNotFolderException;
-import org.apache.commons.vfs2.FileNotFoundException;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.DefaultFileContent;
-import org.apache.commons.vfs2.provider.URLFileName;
-import org.apache.commons.vfs2.provider.http.HttpFileObject;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-import org.apache.commons.vfs2.util.MonitorOutputStream;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.DavException;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.client.methods.CheckinMethod;
-import org.apache.jackrabbit.webdav.client.methods.CheckoutMethod;
-import org.apache.jackrabbit.webdav.client.methods.DavMethod;
-import org.apache.jackrabbit.webdav.client.methods.DeleteMethod;
-import org.apache.jackrabbit.webdav.client.methods.MkColMethod;
-import org.apache.jackrabbit.webdav.client.methods.MoveMethod;
-import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
-import org.apache.jackrabbit.webdav.client.methods.PropPatchMethod;
-import org.apache.jackrabbit.webdav.client.methods.PutMethod;
-import org.apache.jackrabbit.webdav.client.methods.UncheckoutMethod;
-import org.apache.jackrabbit.webdav.client.methods.VersionControlMethod;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.version.VersionControlledResource;
-import org.apache.jackrabbit.webdav.xml.Namespace;
-import org.w3c.dom.Node;
-
-/**
- * A WebDAV file.
- *
- * @since 2.0
- */
-public class WebdavFileObject extends HttpFileObject<WebdavFileSystem>
-{
-    /**
-     * An OutputStream that writes to a Webdav resource.
-     * <p>
-     * TODO - Use piped stream to avoid temporary file.
-     */
-    private class WebdavOutputStream extends MonitorOutputStream
-    {
-        private final WebdavFileObject file;
-
-        public WebdavOutputStream(final WebdavFileObject file)
-        {
-            super(new ByteArrayOutputStream());
-            this.file = file;
-        }
-
-        private boolean createVersion(final String urlStr)
-        {
-            try
-            {
-                final VersionControlMethod method = new VersionControlMethod(urlStr);
-                setupMethod(method);
-                execute(method);
-                return true;
-            }
-            catch (final Exception ex)
-            {
-                return false;
-            }
-        }
-
-        /**
-         * Called after this stream is closed.
-         */
-        @Override
-        protected void onClose() throws IOException
-        {
-            final RequestEntity entity = new ByteArrayRequestEntity(((ByteArrayOutputStream) out).toByteArray());
-            final URLFileName fileName = (URLFileName) getName();
-            final String urlStr = toUrlString(fileName);
-            if (builder.isVersioning(getFileSystem().getFileSystemOptions()))
-            {
-                DavPropertySet set = null;
-                boolean fileExists = true;
-                boolean isCheckedIn = true;
-                try
-                {
-                    set = getPropertyNames(fileName);
-                }
-                catch (final FileNotFoundException fnfe)
-                {
-                    fileExists = false;
-                }
-                if (fileExists && set != null)
-                {
-                    if (set.contains(VersionControlledResource.CHECKED_OUT))
-                    {
-                        isCheckedIn = false;
-                    }
-                    else if (!set.contains(VersionControlledResource.CHECKED_IN))
-                    {
-                        DavProperty prop = set.get(VersionControlledResource.AUTO_VERSION);
-                        if (prop != null)
-                        {
-                            prop = getProperty(fileName, VersionControlledResource.AUTO_VERSION);
-                            if (DeltaVConstants.XML_CHECKOUT_CHECKIN.equals(prop.getValue()))
-                            {
-                                createVersion(urlStr);
-                            }
-                        }
-                    }
-                }
-                if (fileExists && isCheckedIn)
-                {
-                    try
-                    {
-                        final CheckoutMethod checkout = new CheckoutMethod(urlStr);
-                        setupMethod(checkout);
-                        execute(checkout);
-                        isCheckedIn = false;
-                    }
-                    catch (final FileSystemException ex)
-                    {
-                        // Ignore the exception checking out.
-                    }
-                }
-
-                try
-                {
-                    final PutMethod method = new PutMethod(urlStr);
-                    method.setRequestEntity(entity);
-                    setupMethod(method);
-                    execute(method);
-                    setUserName(fileName, urlStr);
-                }
-                catch (final FileSystemException ex)
-                {
-                    if (!isCheckedIn)
-                    {
-                        try
-                        {
-                            final UncheckoutMethod method = new UncheckoutMethod(urlStr);
-                            setupMethod(method);
-                            execute(method);
-                            isCheckedIn = true;
-                        }
-                        catch (final Exception e)
-                        {
-                            // Ignore the exception. Going to throw original.
-                        }
-                        throw ex;
-                    }
-                }
-                if (!fileExists)
-                {
-                    createVersion(urlStr);
-                    try
-                    {
-                        final DavPropertySet props = getPropertyNames(fileName);
-                        isCheckedIn = !props.contains(VersionControlledResource.CHECKED_OUT);
-                    }
-                    catch (final FileNotFoundException fnfe)
-                    {
-                        // Ignore the error
-                    }
-                }
-                if (!isCheckedIn)
-                {
-                  final CheckinMethod checkin = new CheckinMethod(urlStr);
-                  setupMethod(checkin);
-                  execute(checkin);
-                }
-            }
-            else
-            {
-                final PutMethod method = new PutMethod(urlStr);
-                method.setRequestEntity(entity);
-                setupMethod(method);
-                execute(method);
-                try
-                {
-                    setUserName(fileName, urlStr);
-                }
-                catch (final IOException e)
-                {
-                    // Ignore the exception if unable to set the user name.
-                }
-            }
-            ((DefaultFileContent) this.file.getContent()).resetAttributes();
-        }
-
-        private void setUserName(final URLFileName fileName, final String urlStr)
-                throws IOException
-        {
-            final List<DefaultDavProperty> list = new ArrayList<DefaultDavProperty>();
-            String name = builder.getCreatorName(getFileSystem().getFileSystemOptions());
-            final String userName = fileName.getUserName();
-            if (name == null)
-            {
-                name = userName;
-            }
-            else
-            {
-                if (userName != null)
-                {
-                    final String comment = "Modified by user " + userName;
-                    list.add(new DefaultDavProperty(DeltaVConstants.COMMENT, comment));
-                }
-            }
-            list.add(new DefaultDavProperty(DeltaVConstants.CREATOR_DISPLAYNAME, name));
-            final PropPatchMethod method = new PropPatchMethod(urlStr, list);
-            setupMethod(method);
-            execute(method);
-        }
-    }
-
-    /** The character set property name. */
-    public static final DavPropertyName RESPONSE_CHARSET = DavPropertyName.create(
-            "response-charset");
-
-    /** The FileSystemConfigBuilder */
-    private final WebdavFileSystemConfigBuilder builder;
-
-    private final WebdavFileSystem fileSystem;
-
-    protected WebdavFileObject(final AbstractFileName name, final WebdavFileSystem fileSystem)
-    {
-        super(name, fileSystem, WebdavFileSystemConfigBuilder.getInstance());
-        this.fileSystem = fileSystem;
-        builder = (WebdavFileSystemConfigBuilder) WebdavFileSystemConfigBuilder.getInstance();
-    }
-
-    protected void configureMethod(final HttpMethodBase httpMethod)
-    {
-        httpMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, WebdavMethodRetryHandler.getInstance());
-    }
-
-    /**
-     * Creates this file as a folder.
-     */
-    @Override
-    protected void doCreateFolder() throws Exception
-    {
-        final DavMethod method = new MkColMethod(toUrlString((URLFileName) getName()));
-        setupMethod(method);
-        try
-        {
-            execute(method);
-        }
-        catch (final FileSystemException fse)
-        {
-            throw new FileSystemException("vfs.provider.webdav/create-collection.error", getName(),
-                    fse);
-        }
-    }
-
-    /**
-     * Deletes the file.
-     */
-    @Override
-    protected void doDelete() throws Exception
-    {
-        final DavMethod method = new DeleteMethod(toUrlString((URLFileName) getName()));
-        setupMethod(method);
-        execute(method);
-    }
-
-    /**
-     * Returns the properties of the Webdav resource.
-     */
-    @Override
-    protected Map<String, Object> doGetAttributes() throws Exception
-    {
-        final Map<String, Object> attributes = new HashMap<String, Object>();
-        try
-        {
-            final URLFileName fileName = (URLFileName) getName();
-            DavPropertySet properties = getProperties(fileName, DavConstants.PROPFIND_ALL_PROP,
-                    new DavPropertyNameSet(), false);
-            @SuppressWarnings("unchecked") // iterator() is documented to return DavProperty instances
-            final
-            Iterator<DavProperty> iter = properties.iterator();
-            while (iter.hasNext())
-            {
-                final DavProperty property = iter.next();
-                attributes.put(property.getName().toString(), property.getValue());
-            }
-            properties = getPropertyNames(fileName);
-            @SuppressWarnings("unchecked") // iterator() is documented to return DavProperty instances
-            final
-            Iterator<DavProperty> iter2 = properties.iterator();
-            while (iter2.hasNext())
-            {
-                DavProperty property = iter2.next();
-                if (!attributes.containsKey(property.getName().getName()))
-                {
-                    property = getProperty(fileName, property.getName());
-                    if (property != null)
-                    {
-                        final Object name = property.getName();
-                        final Object value = property.getValue();
-                        if (name != null && value != null)
-                        {
-                            attributes.put(name.toString(), value);
-                        }
-                    }
-                }
-            }
-            return attributes;
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider.webdav/get-attributes.error", getName(), e);
-        }
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        final DavProperty property = getProperty((URLFileName) getName(),
-                DavConstants.PROPERTY_GETCONTENTLENGTH);
-        if (property != null)
-        {
-            final String value = (String) property.getValue();
-            return Long.parseLong(value);
-        }
-        return 0;
-    }
-
-    /**
-     * Returns the last modified time of this file.  Is only called if
-     * {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        final DavProperty property = getProperty((URLFileName) getName(),
-                DavConstants.PROPERTY_GETLASTMODIFIED);
-        if (property != null)
-        {
-            final String value = (String) property.getValue();
-            return DateUtil.parseDate(value).getTime();
-        }
-        return 0;
-    }
-
-    @Override
-    protected OutputStream doGetOutputStream(final boolean bAppend) throws Exception
-    {
-        return new WebdavOutputStream(this);
-    }
-
-    /**
-     * Determines the type of this file.  Must not return null.  The return
-     * value of this method is cached, so the implementation can be expensive.
-     */
-    @Override
-    protected FileType doGetType() throws Exception
-    {
-        try
-        {
-            return isDirectory((URLFileName) getName()) ? FileType.FOLDER : FileType.FILE;
-        }
-        catch (final FileNotFolderException fnfe)
-        {
-            return FileType.IMAGINARY;
-        }
-        catch (final FileNotFoundException fnfe)
-        {
-            return FileType.IMAGINARY;
-        }
-
-    }
-
-    /**
-     * Determines if this file can be written to.  Is only called if
-     * {@link #doGetType} does not return {@link FileType#IMAGINARY}.
-     * <p>
-     * This implementation always returns true.
-     *
-     * @return true if the file is writable.
-     * @throws Exception if an error occurs.
-     */
-    @Override
-    protected boolean doIsWriteable() throws Exception
-    {
-        return true;
-    }
-
-    /**
-     * Lists the children of the file.
-     */
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        // use doListChildrenResolved for performance
-        return null;
-    }
-
-    /**
-     * Lists the children of the file.
-     */
-    @Override
-    protected FileObject[] doListChildrenResolved() throws Exception
-    {
-        PropFindMethod method = null;
-        try
-        {
-            final URLFileName name = (URLFileName) getName();
-            if (isDirectory(name))
-            {
-                final DavPropertyNameSet nameSet = new DavPropertyNameSet();
-                nameSet.add(DavPropertyName.create(DavConstants.PROPERTY_DISPLAYNAME));
-
-                method = new PropFindMethod(toUrlString(name), nameSet,
-                        DavConstants.DEPTH_1);
-
-                execute(method);
-                final List<WebdavFileObject> vfs = new ArrayList<WebdavFileObject>();
-                if (method.succeeded())
-                {
-                    final MultiStatusResponse[] responses =
-                            method.getResponseBodyAsMultiStatus().getResponses();
-
-                    for (final MultiStatusResponse response : responses)
-                    {
-                        if (isCurrentFile(response.getHref(), name))
-                        {
-                            continue;
-                        }
-                        final String resourceName = resourceName(response.getHref());
-                        if (resourceName != null && resourceName.length() > 0)
-                        {
-                            final WebdavFileObject fo = (WebdavFileObject) FileObjectUtils.
-                                    getAbstractFileObject(getFileSystem().resolveFile(
-                                            getFileSystem().getFileSystemManager().
-                                                    resolveName(getName(), resourceName,
-                                                    NameScope.CHILD)));
-                            vfs.add(fo);
-                        }
-                    }
-                }
-                return vfs.toArray(new WebdavFileObject[vfs.size()]);
-            }
-            throw new FileNotFolderException(getName());
-        }
-        catch (final FileNotFolderException fnfe)
-        {
-            throw fnfe;
-        }
-        catch (final DavException e)
-        {
-            throw new FileSystemException(e.getMessage(), e);
-        }
-        catch (final IOException e)
-        {
-            throw new FileSystemException(e.getMessage(), e);
-        }
-        finally
-        {
-            if (method != null)
-            {
-                method.releaseConnection();
-            }
-        }
-    }
-
-    /**
-     * Rename the file.
-     */
-    @Override
-    protected void doRename(final FileObject newFile) throws Exception
-    {
-        final String url = encodePath(toUrlString((URLFileName) getName()));
-        final String dest = toUrlString((URLFileName) newFile.getName(), false);
-        final DavMethod method = new MoveMethod(url, dest, false);
-        setupMethod(method);
-        execute(method);
-    }
-
-    /**
-     * Sets an attribute of this file.  Is only called if {@link #doGetType}
-     * does not return {@link FileType#IMAGINARY}.
-     */
-    @Override
-    protected void doSetAttribute(final String attrName, final Object value)
-        throws Exception
-    {
-        try
-        {
-            final URLFileName fileName = (URLFileName) getName();
-            final String urlStr = toUrlString(fileName);
-            final DavPropertySet properties = new DavPropertySet();
-            final DavPropertyNameSet propertyNameSet = new DavPropertyNameSet();
-            final DavProperty property = new DefaultDavProperty(attrName, value, Namespace.EMPTY_NAMESPACE);
-            if (value != null)
-            {
-                properties.add(property);
-            }
-            else
-            {
-                propertyNameSet.add(property.getName()); // remove property
-            }
-
-            final PropPatchMethod method = new PropPatchMethod(urlStr, properties, propertyNameSet);
-            setupMethod(method);
-            execute(method);
-            if (!method.succeeded())
-            {
-                throw new FileSystemException("Property '" + attrName + "' could not be set.");
-            }
-        }
-        catch (final FileSystemException fse)
-        {
-            throw fse;
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider.webdav/set-attributes", e, getName(), attrName);
-        }
-    }
-
-    /**
-     * Execute a 'Workspace' operation.
-     *
-     * @param method The DavMethod to invoke.
-     * @throws FileSystemException If an error occurs.
-     */
-    private void execute(final DavMethod method) throws FileSystemException
-    {
-        try
-        {
-            final int status = fileSystem.getClient().executeMethod(method);
-            if (status == HttpURLConnection.HTTP_NOT_FOUND
-                    || status == HttpURLConnection.HTTP_GONE)
-            {
-                throw new FileNotFoundException(method.getURI());
-            }
-            method.checkSuccess();
-        }
-        catch (final FileSystemException fse)
-        {
-            throw fse;
-        }
-        catch (final IOException e)
-        {
-            throw new FileSystemException(e);
-        }
-        catch (final DavException e)
-        {
-            throw ExceptionConverter.generate(e);
-        }
-        finally
-        {
-            if (method != null)
-            {
-                method.releaseConnection();
-            }
-        }
-    }
-
-    @Override
-    protected FileContentInfoFactory getFileContentInfoFactory()
-    {
-        return new WebdavFileContentInfoFactory();
-    }
-
-    DavPropertySet getProperties(final URLFileName name) throws FileSystemException
-    {
-        return getProperties(name, DavConstants.PROPFIND_ALL_PROP, new DavPropertyNameSet(),
-                false);
-    }
-
-    DavPropertySet getProperties(final URLFileName name, final DavPropertyNameSet nameSet, final boolean addEncoding)
-            throws FileSystemException
-    {
-        return getProperties(name, DavConstants.PROPFIND_BY_PROPERTY, nameSet, addEncoding);
-    }
-
-    DavPropertySet getProperties(final URLFileName name, final int type, final DavPropertyNameSet nameSet,
-                                 final boolean addEncoding)
-            throws FileSystemException
-    {
-        try
-        {
-            final String urlStr = toUrlString(name);
-            final PropFindMethod method = new PropFindMethod(urlStr, type, nameSet, DavConstants.DEPTH_0);
-            setupMethod(method);
-            execute(method);
-            if (method.succeeded())
-            {
-                final MultiStatus multiStatus = method.getResponseBodyAsMultiStatus();
-                final MultiStatusResponse response = multiStatus.getResponses()[0];
-                final DavPropertySet props = response.getProperties(HttpStatus.SC_OK);
-                if (addEncoding)
-                {
-                    final DavProperty prop = new DefaultDavProperty(RESPONSE_CHARSET,
-                            method.getResponseCharSet());
-                    props.add(prop);
-                }
-                return props;
-            }
-            return new DavPropertySet();
-        }
-        catch (final FileSystemException fse)
-        {
-            throw fse;
-        }
-        catch (final Exception e)
-        {
-            throw new FileSystemException("vfs.provider.webdav/get-property.error", e, getName(), name, type,
-                    nameSet.getContent(), addEncoding);
-        }
-    }
-
-    DavProperty getProperty(final URLFileName fileName, final DavPropertyName name)
-            throws FileSystemException
-    {
-        final DavPropertyNameSet nameSet = new DavPropertyNameSet();
-        nameSet.add(name);
-        final DavPropertySet propertySet = getProperties(fileName, nameSet, false);
-        return propertySet.get(name);
-    }
-
-    DavProperty getProperty(final URLFileName fileName, final String property)
-            throws FileSystemException
-    {
-        return getProperty(fileName, DavPropertyName.create(property));
-    }
-
-
-    DavPropertySet getPropertyNames(final URLFileName name) throws FileSystemException
-    {
-        return getProperties(name, DavConstants.PROPFIND_PROPERTY_NAMES,
-                new DavPropertyNameSet(), false);
-    }
-
-    /**
-     * Convert the FileName to an encoded url String.
-     *
-     * @param name The FileName.
-     * @return The encoded URL String.
-     */
-    private String hrefString(final URLFileName name)
-    {
-        final URLFileName newFile = new URLFileName("http", name.getHostName(), name.getPort(),
-                name.getDefaultPort(), null, null,
-                name.getPath(), name.getType(), name.getQueryString());
-        try
-        {
-            return newFile.getURIEncoded(this.getUrlCharset());
-        }
-        catch (final Exception e)
-        {
-            return name.getURI();
-        }
-    }
-
-    private boolean isCurrentFile(final String href, final URLFileName fileName)
-    {
-        String name = hrefString(fileName);
-        if (href.endsWith("/") && !name.endsWith("/"))
-        {
-            name += "/";
-        }
-        return href.equals(name) || href.equals(fileName.getPath());
-    }
-
-    private boolean isDirectory(final URLFileName name) throws IOException
-    {
-        try
-        {
-            final DavProperty property = getProperty(name, DavConstants.PROPERTY_RESOURCETYPE);
-            Node node;
-            if (property != null && (node = (Node) property.getValue()) != null)
-            {
-                return node.getLocalName().equals(DavConstants.XML_COLLECTION);
-            }
-            else
-            {
-                return false;
-            }
-        }
-        catch (final FileNotFoundException fse)
-        {
-            throw new FileNotFolderException(name);
-        }
-    }
-
-    /**
-     * Returns the resource name from the path.
-     *
-     * @param path the path to the file.
-     * @return The resource name
-     */
-    private String resourceName(String path)
-    {
-        if (path.endsWith("/"))
-        {
-            path = path.substring(0, path.length() - 1);
-        }
-        final int i = path.lastIndexOf("/");
-        return i >= 0 ? path.substring(i + 1) : path;
-    }
-
-    /**
-     * Prepares a Method object.
-     *
-     * @param method the HttpMethod.
-     * @throws FileSystemException if an error occurs encoding the uri.
-     * @throws URIException        if the URI is in error.
-     */
-    @Override
-    protected void setupMethod(final HttpMethod method) throws FileSystemException, URIException
-    {
-        final String pathEncoded = ((URLFileName) getName()).getPathQueryEncoded(this.getUrlCharset());
-        method.setPath(pathEncoded);
-        method.setFollowRedirects(this.getFollowRedirect());
-        method.setRequestHeader("User-Agent", "Jakarta-Commons-VFS");
-        method.addRequestHeader("Cache-control", "no-cache");
-        method.addRequestHeader("Cache-store", "no-store");
-        method.addRequestHeader("Pragma", "no-cache");
-        method.addRequestHeader("Expires", "0");
-    }
-
-    private String toUrlString(final URLFileName name)
-    {
-        return toUrlString(name, true);
-    }
-
-    /**
-     * Converts the given URLFileName to an encoded URL String.
-     *
-     * @param name The FileName.
-     * @param includeUserInfo true if user information should be included.
-     * @return The encoded URL String.
-     */
-    private String toUrlString(final URLFileName name, final boolean includeUserInfo)
-    {
-        String user = null;
-        String password = null;
-        if (includeUserInfo)
-        {
-            user = name.getUserName();
-            password = name.getPassword();
-        }
-        final URLFileName newFile = new URLFileName("http", name.getHostName(), name.getPort(),
-                name.getDefaultPort(), user, password,
-                name.getPath(), name.getType(), name.getQueryString());
-        try
-        {
-            return newFile.getURIEncoded(this.getUrlCharset());
-        }
-        catch (final Exception e)
-        {
-            return name.getURI();
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.java
deleted file mode 100644
index df288b3..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileProvider.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.commons.vfs2.provider.webdav;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.provider.http.HttpClientFactory;
-import org.apache.commons.vfs2.provider.http.HttpFileProvider;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-/**
- * A provider for WebDAV.
- *
- * @since 2.0
- */
-public class WebdavFileProvider
-    extends HttpFileProvider
-{
-    /** The capabilities of the WebDAV provider */
-    protected static final Collection<Capability> capabilities =
-            Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-    {
-        Capability.CREATE,
-        Capability.DELETE,
-        Capability.RENAME,
-        Capability.GET_TYPE,
-        Capability.LIST_CHILDREN,
-        Capability.READ_CONTENT,
-        Capability.URI,
-        Capability.WRITE_CONTENT,
-        Capability.GET_LAST_MODIFIED,
-        Capability.ATTRIBUTES,
-        Capability.RANDOM_ACCESS_READ,
-        Capability.DIRECTORY_READ_CONTENT,
-    }));
-
-    public WebdavFileProvider()
-    {
-        super();
-
-        setFileNameParser(WebdavFileNameParser.getInstance());
-    }
-    /**
-     * Creates a {@link FileSystem}.
-     * <p>
-     * If you're looking at this method and wondering how to get a FileSystemOptions
-     * object bearing the proxy host and credentials configuration through
-     * to this method so it's used for resolving a
-     * {@link org.apache.commons.vfs2.FileObject FileObject} in the FileSystem, then be sure
-     * to use correct signature of the {@link org.apache.commons.vfs2.FileSystemManager FileSystemManager}
-     * resolveFile method.
-     * @see org.apache.commons.vfs2.impl.DefaultFileSystemManager#resolveFile(FileObject, String, FileSystemOptions)
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        // Create the file system
-        final GenericFileName rootName = (GenericFileName) name;
-        final FileSystemOptions fsOpts = fileSystemOptions == null ? new FileSystemOptions() : fileSystemOptions;
-
-        UserAuthenticationData authData = null;
-        HttpClient httpClient;
-        try
-        {
-            authData = UserAuthenticatorUtils.authenticate(fsOpts, AUTHENTICATOR_TYPES);
-
-            httpClient = HttpClientFactory.createConnection(
-                WebdavFileSystemConfigBuilder.getInstance(),
-                "http",
-                rootName.getHostName(),
-                rootName.getPort(),
-                UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
-                        UserAuthenticationData.USERNAME, UserAuthenticatorUtils.toChar(rootName.getUserName()))),
-                UserAuthenticatorUtils.toString(UserAuthenticatorUtils.getData(authData,
-                        UserAuthenticationData.PASSWORD, UserAuthenticatorUtils.toChar(rootName.getPassword()))),
-                fsOpts);
-        }
-        finally
-        {
-            UserAuthenticatorUtils.cleanup(authData);
-        }
-
-        return new WebdavFileSystem(rootName, httpClient, fsOpts);
-    }
-
-    @Override
-    public FileSystemConfigBuilder getConfigBuilder()
-    {
-        return WebdavFileSystemConfigBuilder.getInstance();
-    }
-
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystem.java
deleted file mode 100644
index ca1363b..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystem.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.commons.vfs2.provider.webdav;
-
-import java.net.URLStreamHandler;
-import java.util.Collection;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.DefaultURLStreamHandler;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.provider.http.HttpFileSystem;
-
-/**
- * A WebDAV file system.
- *
- * @since 2.0
- */
-public class WebdavFileSystem extends HttpFileSystem
-{
-    protected WebdavFileSystem(final GenericFileName rootName, final HttpClient client,
-                               final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, client, fileSystemOptions);
-    }
-
-    @Override
-    protected HttpClient getClient()
-    {
-        // make accessible
-        return super.getClient();
-    }
-
-    /**
-     * Returns the capabilities of this file system.
-     * @param caps The Capabilities to add.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(WebdavFileProvider.capabilities);
-    }
-
-    /**
-     * Creates a file object.  This method is called only if the requested
-     * file is not cached.
-     * @param name the FileName.
-     * @return The created FileObject.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name)
-    {
-
-        return new WebdavFileObject(name, this);
-    }
-
-    /**
-     * Return a URLStreamHandler.
-     * @return The URLStreamHandler.
-     */
-    public URLStreamHandler getURLStreamHandler()
-    {
-        return new DefaultURLStreamHandler(getContext(), getFileSystemOptions());
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystemConfigBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystemConfigBuilder.java
deleted file mode 100644
index d2ef6d6..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavFileSystemConfigBuilder.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.commons.vfs2.provider.webdav;
-
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.http.HttpFileSystemConfigBuilder;
-
-/**
- * Configuration options for WebDav.
- *
- * @since 2.0
- */
-public final class WebdavFileSystemConfigBuilder extends HttpFileSystemConfigBuilder
-{
-    private static final WebdavFileSystemConfigBuilder BUILDER = new WebdavFileSystemConfigBuilder();
-
-    private static final boolean DEFAULT_FOLLOW_REDIRECT = false;
-
-    private WebdavFileSystemConfigBuilder()
-    {
-        super("webdav.");
-    }
-
-    /**
-     * Gets the singleton builder.
-     *
-     * @return the singleton builder.
-     */
-    public static HttpFileSystemConfigBuilder getInstance()
-    {
-        return BUILDER;
-    }
-
-    /**
-     * The user name to be associated with changes to the file.
-     * @param opts The FileSystem options
-     * @param creatorName The creator name to be associated with the file.
-     */
-    public void setCreatorName(final FileSystemOptions opts, final String creatorName)
-    {
-        setParam(opts, "creatorName", creatorName);
-    }
-
-    /**
-     * Return the user name to be associated with changes to the file.
-     * @param opts The FileSystem options
-     * @return The creatorName.
-     */
-    public String getCreatorName(final FileSystemOptions opts)
-    {
-        return getString(opts, "creatorName");
-    }
-
-    /**
-     * Gets whether to follow redirects for the connection.
-     *
-     * @param opts
-     *            The FileSystem options.
-     * @return {@code true} to follow redirects, {@code false} not to.
-     * @see #setFollowRedirect
-     * @since 2.1
-     */
-    @Override
-    public boolean getFollowRedirect(final FileSystemOptions opts)
-    {
-        return getBoolean(opts, KEY_FOLLOW_REDIRECT, DEFAULT_FOLLOW_REDIRECT);
-    }
-
-    /**
-     * Whether to use versioning.
-     * @param opts The FileSystem options.
-     * @param versioning true if versioning should be enabled.
-     */
-    public void setVersioning(final FileSystemOptions opts, final boolean versioning)
-    {
-        setParam(opts, "versioning", Boolean.valueOf(versioning));
-    }
-
-    /**
-     * The cookies to add to the request.
-     * @param opts The FileSystem options.
-     * @return true if versioning is enabled.
-     */
-    public boolean isVersioning(final FileSystemOptions opts)
-    {
-        return getBoolean(opts, "versioning", false);
-    }
-
-    /**
-     * @return The Webdav FileSystem Class object.
-     */
-    @Override
-    protected Class<? extends FileSystem> getConfigClass()
-    {
-        return WebdavFileSystem.class;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavMethodRetryHandler.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavMethodRetryHandler.java
deleted file mode 100644
index 72a3d5c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/WebdavMethodRetryHandler.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.commons.vfs2.provider.webdav;
-
-import java.io.IOException;
-
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.HttpMethodRetryHandler;
-
-
-/**
- * A retry handler which will retry a failed webdav method one time.
- * <p>
- * Now that webdavlib didnt support adding a MethodRetryHandler only a few operations are restartable yet.
- *
- * @since 2.0
- */
-public final class WebdavMethodRetryHandler implements HttpMethodRetryHandler
-{
-    private static final WebdavMethodRetryHandler INSTANCE = new WebdavMethodRetryHandler();
-
-    private WebdavMethodRetryHandler()
-    {
-    }
-
-    public static WebdavMethodRetryHandler getInstance()
-    {
-        return INSTANCE;
-    }
-
-    @Override
-    public boolean retryMethod(final HttpMethod method, final IOException exception, final int executionCount)
-    {
-        return executionCount < 2;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/package.html
deleted file mode 100644
index d39cc53..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/webdav/package.html
+++ /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.
--->
-<body>
-<p>The WebDAV File Provider</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileObject.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileObject.java
deleted file mode 100644
index 0d5a1f2..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileObject.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.commons.vfs2.provider.zip;
-
-import java.io.InputStream;
-import java.util.HashSet;
-import java.util.zip.ZipEntry;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-
-/**
- * A file in a Zip file system.
- */
-public class ZipFileObject extends AbstractFileObject<ZipFileSystem>
-{
-    /** The ZipEntry. */
-    protected ZipEntry entry;
-    private final HashSet<String> children = new HashSet<String>();
-    // protected final ZipFile file;
-
-    private FileType type;
-
-    protected ZipFileObject(final AbstractFileName name,
-                            final ZipEntry entry,
-                            final ZipFileSystem fs,
-                            final boolean zipExists) throws FileSystemException
-    {
-        super(name, fs);
-        setZipEntry(entry);
-        if (!zipExists)
-        {
-            type = FileType.IMAGINARY;
-        }
-    }
-
-    /**
-     * Sets the details for this file object.
-     * @param entry ZIP information related to this file.
-     */
-    protected void setZipEntry(final ZipEntry entry)
-    {
-        if (this.entry != null)
-        {
-            return;
-        }
-
-        if (entry == null || entry.isDirectory())
-        {
-            type = FileType.FOLDER;
-        }
-        else
-        {
-            type = FileType.FILE;
-        }
-
-        this.entry = entry;
-    }
-
-    /**
-     * Attaches a child.
-     * <p>
-     * TODO: Shouldn't this method have package-only visibility?
-     * Cannot change this without breaking binary compatibility.
-     *
-     * @param childName The name of the child.
-     */
-    public void attachChild(final FileName childName)
-    {
-        children.add(childName.getBaseName());
-    }
-
-    /**
-     * Determines if this file can be written to.
-     *
-     * @return {@code true} if this file is writeable, {@code false} if not.
-     * @throws FileSystemException if an error occurs.
-     */
-    @Override
-    public boolean isWriteable() throws FileSystemException
-    {
-        return false;
-    }
-
-    /**
-     * Returns the file's type.
-     */
-    @Override
-    protected FileType doGetType()
-    {
-        return type;
-    }
-
-    /**
-     * Lists the children of the file.
-     */
-    @Override
-    protected String[] doListChildren()
-    {
-        try
-        {
-            if (!getType().hasChildren())
-            {
-                return null;
-            }
-        }
-        catch (final FileSystemException e)
-        {
-            // should not happen as the type has already been cached.
-            throw new RuntimeException(e);
-        }
-
-        return children.toArray(new String[children.size()]);
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).  Is only called if
-     * {@link #doGetType} returns {@link FileType#FILE}.
-     */
-    @Override
-    protected long doGetContentSize()
-    {
-        return entry.getSize();
-    }
-
-    /**
-     * Returns the last modified time of this file.
-     */
-    @Override
-    protected long doGetLastModifiedTime() throws Exception
-    {
-        return entry.getTime();
-    }
-
-    /**
-     * Creates an input stream to read the file content from.  Is only called
-     * if  {@link #doGetType} returns {@link FileType#FILE}.  The input stream
-     * returned by this method is guaranteed to be closed before this
-     * method is called again.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        // VFS-210: zip allows to gather an input stream even from a directory and will
-        // return -1 on the first read. getType should not be expensive and keeps the tests
-        // running
-        if (!getType().hasContent())
-        {
-            throw new FileSystemException("vfs.provider/read-not-file.error", getName());
-        }
-
-        return getAbstractFileSystem().getZipFile().getInputStream(entry);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileProvider.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileProvider.java
deleted file mode 100644
index 15cc64f..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileProvider.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.commons.vfs2.provider.zip;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractLayeredFileProvider;
-import org.apache.commons.vfs2.provider.FileProvider;
-import org.apache.commons.vfs2.provider.LayeredFileName;
-
-/**
- * A file system provider for Zip files.  Provides read-only file systems.
- */
-public class ZipFileProvider extends AbstractLayeredFileProvider implements FileProvider
-{
-    /** The list of capabilities this provider supports */
-    protected static final Collection<Capability> capabilities =
-        Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-        {
-            Capability.GET_LAST_MODIFIED,
-            Capability.GET_TYPE,
-            Capability.LIST_CHILDREN,
-            Capability.READ_CONTENT,
-            Capability.URI,
-            Capability.COMPRESS,
-            Capability.VIRTUAL
-        }));
-
-    public ZipFileProvider()
-    {
-        super();
-    }
-
-    /**
-     * Creates a layered file system.  This method is called if the file system
-     * is not cached.
-     *
-     * @param scheme The URI scheme.
-     * @param file   The file to create the file system on top of.
-     * @return The file system.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final String scheme,
-                                            final FileObject file,
-                                            final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final AbstractFileName rootName =
-            new LayeredFileName(scheme, file.getName(), FileName.ROOT_PATH, FileType.FOLDER);
-        return new ZipFileSystem(rootName, file, fileSystemOptions);
-    }
-
-    @Override
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystem.java b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystem.java
deleted file mode 100644
index 22a8933..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/ZipFileSystem.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.zip;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.VfsLog;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.provider.UriParser;
-
-/**
- * A read-only file system for Zip/Jar files.
- */
-public class ZipFileSystem extends AbstractFileSystem
-{
-    private static final Log LOG = LogFactory.getLog(ZipFileSystem.class);
-
-    private final File file;
-    private ZipFile zipFile;
-
-    /**
-     * Cache doesn't need to be synchronized since it is read-only.
-     */
-    private final Map<FileName, FileObject> cache = new HashMap<FileName, FileObject>();
-
-  public ZipFileSystem(final AbstractFileName rootName,
-                         final FileObject parentLayer,
-                         final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        super(rootName, parentLayer, fileSystemOptions);
-
-        // Make a local copy of the file
-        file = parentLayer.getFileSystem().replicateFile(parentLayer, Selectors.SELECT_SELF);
-
-        // Open the Zip file
-        if (!file.exists())
-        {
-            // Don't need to do anything
-            zipFile = null;
-            return;
-        }
-
-        // zipFile = createZipFile(this.file);
-    }
-
-    @Override
-    public void init() throws FileSystemException
-    {
-        super.init();
-
-        try
-        {
-            // Build the index
-            final List<ZipFileObject> strongRef = new ArrayList<ZipFileObject>(getZipFile().size());
-            final Enumeration<? extends ZipEntry> entries = getZipFile().entries();
-            while (entries.hasMoreElements())
-            {
-                final ZipEntry entry = entries.nextElement();
-                final AbstractFileName name = (AbstractFileName) getFileSystemManager().resolveName(getRootName(),
-                    UriParser.encode(entry.getName()));
-
-                // Create the file
-                ZipFileObject fileObj;
-                if (entry.isDirectory() && getFileFromCache(name) != null)
-                {
-                    fileObj = (ZipFileObject) getFileFromCache(name);
-                    fileObj.setZipEntry(entry);
-                    continue;
-                }
-
-                fileObj = createZipFileObject(name, entry);
-                putFileToCache(fileObj);
-                strongRef.add(fileObj);
-                fileObj.holdObject(strongRef);
-
-                // Make sure all ancestors exist
-                // TODO - create these on demand
-                ZipFileObject parent;
-                for (AbstractFileName parentName = (AbstractFileName) name.getParent();
-                     parentName != null;
-                     fileObj = parent, parentName = (AbstractFileName) parentName.getParent())
-                {
-                    // Locate the parent
-                    parent = (ZipFileObject) getFileFromCache(parentName);
-                    if (parent == null)
-                    {
-                        parent = createZipFileObject(parentName, null);
-                        putFileToCache(parent);
-                        strongRef.add(parent);
-                        parent.holdObject(strongRef);
-                    }
-
-                    // Attach child to parent
-                    parent.attachChild(fileObj.getName());
-                }
-            }
-        }
-        finally
-        {
-            closeCommunicationLink();
-        }
-    }
-
-    protected ZipFile getZipFile() throws FileSystemException
-    {
-        if (zipFile == null && this.file.exists())
-        {
-            final ZipFile zipFile = createZipFile(this.file);
-
-            this.zipFile = zipFile;
-        }
-
-        return zipFile;
-    }
-
-    protected ZipFileObject createZipFileObject(final AbstractFileName name,
-                                                final ZipEntry entry) throws FileSystemException
-    {
-        return new ZipFileObject(name, entry, this, true);
-    }
-
-    protected ZipFile createZipFile(final File file) throws FileSystemException
-    {
-        try
-        {
-            return new ZipFile(file);
-        }
-        catch (final IOException ioe)
-        {
-            throw new FileSystemException("vfs.provider.zip/open-zip-file.error", file, ioe);
-        }
-    }
-
-    @Override
-    protected void doCloseCommunicationLink()
-    {
-        // Release the zip file
-        try
-        {
-            if (zipFile != null)
-            {
-                zipFile.close();
-                zipFile = null;
-            }
-        }
-        catch (final IOException e)
-        {
-            // getLogger().warn("vfs.provider.zip/close-zip-file.error :" + file, e);
-            VfsLog.warn(getLogger(), LOG, "vfs.provider.zip/close-zip-file.error :" + file, e);
-        }
-    }
-
-    /**
-     * Returns the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(ZipFileProvider.capabilities);
-    }
-
-    /**
-     * Creates a file object.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws FileSystemException
-    {
-        // This is only called for files which do not exist in the Zip file
-        return new ZipFileObject(name, null, this, false);
-    }
-
-    /**
-     * Adds a file object to the cache.
-     */
-    @Override
-    protected void putFileToCache(final FileObject file)
-    {
-        cache.put(file.getName(), file);
-    }
-
-    /**
-     * Returns a cached file.
-     */
-    @Override
-    protected FileObject getFileFromCache(final FileName name)
-    {
-        return cache.get(name);
-    }
-
-    /**
-     * remove a cached file.
-     */
-    @Override
-    protected void removeFileFromCache(final FileName name)
-    {
-        cache.remove(name);
-    }
-
-    /**
-     * will be called after all file-objects closed their streams.
-    protected void notifyAllStreamsClosed()
-    {
-        closeCommunicationLink();
-    }
-     */
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/package.html
deleted file mode 100644
index 8b51eaf..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/provider/zip/package.html
+++ /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.
--->
-<body>
-<p>The Zip File Provider.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/AbstractSyncTask.java b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/AbstractSyncTask.java
deleted file mode 100644
index 469a235..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/AbstractSyncTask.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.tasks;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.util.Messages;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Project;
-
-/**
- * An abstract file synchronization task.  Scans a set of source files and
- * folders, and a destination folder, and performs actions on missing and
- * out-of-date files.  Specifically, performs actions on the following:
- * <ul>
- * <li>Missing destination file.
- * <li>Missing source file.
- * <li>Out-of-date destination file.
- * <li>Up-to-date destination file.
- * </ul>
- *
- * TODO - Deal with case where dest file maps to a child of one of the source files.<br>
- * TODO - Deal with case where dest file already exists and is incorrect type (not file, not a folder).<br>
- * TODO - Use visitors.<br>
- * TODO - Add default excludes.<br>
- * TOOD - Allow selector, mapper, filters, etc to be specified.<br>
- * TODO - Handle source/dest directories as well.<br>
- * TODO - Allow selector to be specified for choosing which dest files to sync.
- */
-public abstract class AbstractSyncTask
-    extends VfsTask
-{
-    private final ArrayList<SourceInfo> srcFiles = new ArrayList<SourceInfo>();
-    private String destFileUrl;
-    private String destDirUrl;
-    private String srcDirUrl;
-    private boolean srcDirIsBase;
-    private boolean failonerror = true;
-    private String filesList;
-
-    /**
-     * Sets the destination file.
-     * @param destFile The destination file name.
-     */
-    public void setDestFile(final String destFile)
-    {
-        this.destFileUrl = destFile;
-    }
-
-    /**
-     * Sets the destination directory.
-     * @param destDir The destination directory.
-     */
-    public void setDestDir(final String destDir)
-    {
-        this.destDirUrl = destDir;
-    }
-
-    /**
-     * Sets the source file.
-     * @param srcFile The source file name.
-     */
-    public void setSrc(final String srcFile)
-    {
-        final SourceInfo src = new SourceInfo();
-        src.setFile(srcFile);
-        addConfiguredSrc(src);
-    }
-
-    /**
-     * Sets the source directory.
-     * @param srcDir The source directory.
-     */
-    public void setSrcDir(final String srcDir)
-    {
-        this.srcDirUrl = srcDir;
-    }
-
-    /**
-     * Sets whether the source directory should be consider as the base directory.
-     * @param srcDirIsBase true if the source directory is the base directory.
-     */
-    public void setSrcDirIsBase(final boolean srcDirIsBase)
-    {
-        this.srcDirIsBase = srcDirIsBase;
-    }
-
-    /**
-     * Sets whether we should fail if there was an error or not.
-     * @param failonerror true if the operation should fail if there is an error.
-     */
-    public void setFailonerror(final boolean failonerror)
-    {
-        this.failonerror = failonerror;
-    }
-
-    /**
-     * Sets whether we should fail if there was an error or not.
-     * @return true if the operation should fail if there was an error.
-     */
-    public boolean isFailonerror()
-    {
-        return failonerror;
-    }
-
-    /**
-     * Sets the files to includes.
-     * @param filesList The list of files to include.
-     */
-    public void setIncludes(final String filesList)
-    {
-        this.filesList = filesList;
-    }
-
-    /**
-     * Adds a nested &lt;src&gt; element.
-     * @param srcInfo A nested source element.
-     * @throws BuildException if the SourceInfo doesn't reference a file.
-     */
-    public void addConfiguredSrc(final SourceInfo srcInfo)
-        throws BuildException
-    {
-        if (srcInfo.file == null)
-        {
-            final String message = Messages.getString("vfs.tasks/sync.no-source-file.error");
-            throw new BuildException(message);
-        }
-        srcFiles.add(srcInfo);
-    }
-
-    /**
-     * Executes this task.
-     * @throws BuildException if an error occurs.
-     */
-    @Override
-    public void execute() throws BuildException
-    {
-        // Validate
-        if (destFileUrl == null && destDirUrl == null)
-        {
-            final String message =
-                Messages.getString("vfs.tasks/sync.no-destination.error");
-            logOrDie(message, Project.MSG_WARN);
-            return;
-        }
-
-        if (destFileUrl != null && destDirUrl != null)
-        {
-            final String message =
-                Messages.getString("vfs.tasks/sync.too-many-destinations.error");
-            logOrDie(message, Project.MSG_WARN);
-            return;
-        }
-
-        // Add the files of the includes attribute to the list
-        if (srcDirUrl != null && !srcDirUrl.equals(destDirUrl) && filesList != null && filesList.length() > 0)
-        {
-            if (!srcDirUrl.endsWith("/"))
-            {
-                srcDirUrl += "/";
-            }
-            final StringTokenizer tok = new StringTokenizer(filesList, ", \t\n\r\f", false);
-            while (tok.hasMoreTokens())
-            {
-                String nextFile = tok.nextToken();
-
-                // Basic compatibility with Ant fileset for directories
-                if (nextFile.endsWith("/**"))
-                {
-                    nextFile = nextFile.substring(0, nextFile.length() - 2);
-                }
-
-                final SourceInfo src = new SourceInfo();
-                src.setFile(srcDirUrl + nextFile);
-                addConfiguredSrc(src);
-            }
-        }
-
-        if (srcFiles.size() == 0)
-        {
-            final String message = Messages.getString("vfs.tasks/sync.no-source-files.warn");
-            logOrDie(message, Project.MSG_WARN);
-            return;
-        }
-
-        // Perform the sync
-        try
-        {
-            if (destFileUrl != null)
-            {
-                handleSingleFile();
-            }
-            else
-            {
-                handleFiles();
-            }
-        }
-        catch (final BuildException e)
-        {
-            throw e;
-        }
-        catch (final Exception e)
-        {
-            throw new BuildException(e.getMessage(), e);
-        }
-    }
-
-    protected void logOrDie(final String message, final int level)
-    {
-        if (!isFailonerror())
-        {
-            log(message, level);
-            return;
-        }
-        throw new BuildException(message);
-    }
-
-    /**
-     * Copies the source files to the destination.
-     */
-    private void handleFiles() throws Exception
-    {
-        // Locate the destination folder, and make sure it exists
-        final FileObject destFolder = resolveFile(destDirUrl);
-        destFolder.createFolder();
-
-        // Locate the source files, and make sure they exist
-        FileName srcDirName = null;
-        if (srcDirUrl != null)
-        {
-            srcDirName = resolveFile(srcDirUrl).getName();
-        }
-        final ArrayList<FileObject> srcs = new ArrayList<FileObject>();
-        for (int i = 0; i < srcFiles.size(); i++)
-        {
-            // Locate the source file, and make sure it exists
-            final SourceInfo src = srcFiles.get(i);
-            final FileObject srcFile = resolveFile(src.file);
-            if (!srcFile.exists())
-            {
-                final String message =
-                    Messages.getString("vfs.tasks/sync.src-file-no-exist.warn", srcFile);
-
-                logOrDie(message, Project.MSG_WARN);
-            }
-            else
-            {
-                srcs.add(srcFile);
-            }
-        }
-
-        // Scan the source files
-        final Set<FileObject> destFiles = new HashSet<FileObject>();
-        for (int i = 0; i < srcs.size(); i++)
-        {
-            final FileObject rootFile = srcs.get(i);
-            final FileName rootName = rootFile.getName();
-
-            if (rootFile.isFile())
-            {
-                // Build the destination file name
-                String relName = null;
-                if (srcDirName == null || !srcDirIsBase)
-                {
-                    relName = rootName.getBaseName();
-                }
-                else
-                {
-                    relName = srcDirName.getRelativeName(rootName);
-                }
-                final FileObject destFile = destFolder.resolveFile(relName, NameScope.DESCENDENT);
-
-                // Do the copy
-                handleFile(destFiles, rootFile, destFile);
-            }
-            else
-            {
-                // Find matching files
-                // If srcDirIsBase is true, select also the sub-directories
-                final FileObject[] files = rootFile.findFiles(srcDirIsBase
-                    ? Selectors.SELECT_ALL : Selectors.SELECT_FILES);
-
-                for (final FileObject srcFile : files)
-                {
-                    // Build the destination file name
-                    String relName = null;
-                    if (srcDirName == null || !srcDirIsBase)
-                    {
-                        relName = rootName.getRelativeName(srcFile.getName());
-                    }
-                    else
-                    {
-                        relName = srcDirName.getRelativeName(srcFile.getName());
-                    }
-
-                    final FileObject destFile =
-                        destFolder.resolveFile(relName, NameScope.DESCENDENT);
-
-                    // Do the copy
-                    handleFile(destFiles, srcFile, destFile);
-                }
-            }
-        }
-
-        // Scan the destination files for files with no source file
-        if (detectMissingSourceFiles())
-        {
-            final FileObject[] allDestFiles = destFolder.findFiles(Selectors.SELECT_FILES);
-            for (final FileObject destFile : allDestFiles)
-            {
-                if (!destFiles.contains(destFile))
-                {
-                    handleMissingSourceFile(destFile);
-                }
-            }
-        }
-    }
-
-    /**
-     * Handles a single file, checking for collisions where more than one
-     * source file maps to the same destination file.
-     */
-    private void handleFile(final Set<FileObject> destFiles,
-                            final FileObject srcFile,
-                            final FileObject destFile) throws Exception
-
-    {
-        // Check for duplicate source files
-        if (destFiles.contains(destFile))
-        {
-            final String message = Messages.getString("vfs.tasks/sync.duplicate-source-files.warn", destFile);
-            logOrDie(message, Project.MSG_WARN);
-        }
-        else
-        {
-            destFiles.add(destFile);
-        }
-
-        // Handle the file
-        handleFile(srcFile, destFile);
-    }
-
-    /**
-     * Copies a single file.
-     */
-    private void handleSingleFile() throws Exception
-    {
-        // Make sure there is exactly one source file, and that it exists
-        // and is a file.
-        if (srcFiles.size() > 1)
-        {
-            final String message =
-                Messages.getString("vfs.tasks/sync.too-many-source-files.error");
-            logOrDie(message, Project.MSG_WARN);
-            return;
-        }
-        final SourceInfo src = srcFiles.get(0);
-        final FileObject srcFile = resolveFile(src.file);
-        if (!srcFile.isFile())
-        {
-            final String message =
-                Messages.getString("vfs.tasks/sync.source-not-file.error", srcFile);
-            logOrDie(message, Project.MSG_WARN);
-            return;
-        }
-
-        // Locate the destination file
-        final FileObject destFile = resolveFile(destFileUrl);
-
-        // Do the copy
-        handleFile(srcFile, destFile);
-    }
-
-    /**
-     * Handles a single source file.
-     */
-    private void handleFile(final FileObject srcFile,
-                            final FileObject destFile)
-        throws Exception
-    {
-        if (!destFile.exists()
-            || srcFile.getContent().getLastModifiedTime() > destFile.getContent().getLastModifiedTime())
-        {
-            // Destination file is out-of-date
-            handleOutOfDateFile(srcFile, destFile);
-        }
-        else
-        {
-            // Destination file is up-to-date
-            handleUpToDateFile(srcFile, destFile);
-        }
-    }
-
-    /**
-     * Handles an out-of-date file.
-     * <p>
-     * This is a file where the destination file
-     * either doesn't exist, or is older than the source file.
-     * <p>
-     * This implementation does nothing.
-     *
-     * @param srcFile The source file.
-     * @param destFile The destination file.
-     * @throws Exception Implementation can throw any Exception.
-     */
-    protected void handleOutOfDateFile(final FileObject srcFile,
-                                       final FileObject destFile)
-        throws Exception
-    {
-    }
-
-    /**
-     * Handles an up-to-date file.
-     * <p>
-     * This is where the destination file exists and is
-     * newer than the source file.
-     * <p>
-     * This implementation does nothing.
-     *
-     * @param srcFile The source file.
-     * @param destFile The destination file.
-     * @throws Exception Implementation can throw any Exception.
-     */
-    protected void handleUpToDateFile(final FileObject srcFile,
-                                      final FileObject destFile)
-        throws Exception
-    {
-    }
-
-    /**
-     * Handles a destination for which there is no corresponding source file.
-     * <p>
-     * This implementation does nothing.
-     *
-     * @param destFile The existing destination file.
-     * @throws Exception Implementation can throw any Exception.
-     */
-    protected void handleMissingSourceFile(final FileObject destFile)
-        throws Exception
-    {
-    }
-
-    /**
-     * Check if this task cares about destination files with a missing source
-     * file.
-     * <p>
-     * This implementation returns false.
-     *
-     * @return True if missing file is detected.
-     */
-    protected boolean detectMissingSourceFiles()
-    {
-        return false;
-    }
-
-    /**
-     * Information about a source file.
-     */
-    public static class SourceInfo
-    {
-        private String file;
-
-        public void setFile(final String file)
-        {
-            this.file = file;
-        }
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/CopyTask.java b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/CopyTask.java
deleted file mode 100644
index 8205195..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/CopyTask.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.commons.vfs2.tasks;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.Selectors;
-
-/**
- * An Ant task that copies matching files.
- * <p>
- * TODO - Copy folders that do not contain files.
- */
-public class CopyTask
-    extends AbstractSyncTask
-{
-    private boolean overwrite;
-    private boolean preserveLastModified = true;
-
-    /**
-     * Enable/disable overwriting of up-to-date files.
-     * @param overwrite true if the file should be overwritten.
-     */
-    public void setOverwrite(final boolean overwrite)
-    {
-        this.overwrite = overwrite;
-    }
-
-    /**
-     * Enable/disable preserving last modified time of copied files.
-     * @param preserveLastModified true if the last modified time should be preserved.
-     */
-    public void setPreserveLastModified(final boolean preserveLastModified)
-    {
-        this.preserveLastModified = preserveLastModified;
-    }
-
-    /**
-     * @return the current value of overwrite
-     */
-    public boolean isOverwrite()
-    {
-        return overwrite;
-    }
-
-    /**
-     * @return the current value of preserveLastModified
-     */
-    public boolean isPreserveLastModified()
-    {
-        return preserveLastModified;
-    }
-
-    /**
-     * Handles an out-of-date file.
-     * @param srcFile The source FileObject.
-     * @param destFile The destination FileObject.
-     */
-    @Override
-    protected void handleOutOfDateFile(final FileObject srcFile,
-                                       final FileObject destFile)
-        throws FileSystemException
-    {
-        log("Copying " + srcFile.getPublicURIString() + " to " + destFile.getPublicURIString());
-        destFile.copyFrom(srcFile, Selectors.SELECT_SELF);
-        if (preserveLastModified
-            && srcFile.getFileSystem().hasCapability(Capability.GET_LAST_MODIFIED)
-            && destFile.getFileSystem().hasCapability(Capability.SET_LAST_MODIFIED_FILE))
-        {
-            final long lastModTime = srcFile.getContent().getLastModifiedTime();
-            destFile.getContent().setLastModifiedTime(lastModTime);
-        }
-    }
-
-    /**
-     * Handles an up-to-date file.
-     * @param srcFile The source FileObject.
-     * @param destFile The destination FileObject.
-     */
-    @Override
-    protected void handleUpToDateFile(final FileObject srcFile,
-                                      final FileObject destFile)
-        throws FileSystemException
-    {
-        if (overwrite)
-        {
-            // Copy the file anyway
-            handleOutOfDateFile(srcFile, destFile);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/DeleteTask.java b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/DeleteTask.java
deleted file mode 100644
index 1483f43..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/DeleteTask.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.commons.vfs2.tasks;
-
-import java.util.StringTokenizer;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.util.Messages;
-import org.apache.tools.ant.BuildException;
-
-/**
- * An Ant task that deletes matching files.
- * <p>
- * TOOD - Allow selector to be specified.
- */
-public class DeleteTask
-    extends VfsTask
-{
-    private String file;
-    private String srcDirUrl;
-    private String filesList;
-
-    /**
-     * Sets the file/folder to delete.
-     *
-     * @param file The name of the file.
-     */
-    public void setFile(final String file)
-    {
-        this.file = file;
-    }
-
-    /**
-     * Sets the source directory.
-     * @param srcDir The source directory.
-     */
-    public void setSrcDir(final String srcDir)
-    {
-        this.srcDirUrl = srcDir;
-    }
-
-    /**
-     * Sets the files to include.
-     * @param filesList The list of files.
-     */
-    public void setIncludes(final String filesList)
-    {
-        this.filesList = filesList;
-    }
-
-    /**
-     * Executes this task.
-     * @throws BuildException if an error occurs.
-     */
-    @Override
-    public void execute() throws BuildException
-    {
-        if ((file == null && srcDirUrl == null) || (srcDirUrl != null && filesList == null))
-        {
-            final String message = Messages.getString("vfs.tasks/delete.no-source-files.error");
-            throw new BuildException(message);
-        }
-
-        try
-        {
-            if (srcDirUrl != null && filesList != null)
-            {
-                log("Deleting " + filesList + " in the directory " + srcDirUrl);
-                if (!srcDirUrl.endsWith("/"))
-                {
-                    srcDirUrl += "/";
-                }
-                final StringTokenizer tok = new StringTokenizer(filesList, ", \t\n\r\f", false);
-                while (tok.hasMoreTokens())
-                {
-                    final String nextFile = tok.nextToken();
-                    final FileObject srcFile = resolveFile(srcDirUrl + nextFile);
-                    srcFile.deleteAll();
-                }
-            }
-            else
-            {
-                final FileObject srcFile = resolveFile(file);
-                log("Deleting " + srcFile.getPublicURIString());
-                srcFile.deleteAll();
-            }
-        }
-        catch (final Exception e)
-        {
-            throw new BuildException(e);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/MkdirTask.java b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/MkdirTask.java
deleted file mode 100644
index 58ea20d..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/MkdirTask.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.commons.vfs2.tasks;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.util.Messages;
-import org.apache.tools.ant.BuildException;
-
-/**
- * An Ant task that creates a directory.
- */
-public class MkdirTask
-    extends VfsTask
-{
-    private String dirName;
-
-    /**
-     * Sets the directory to create.
-     *
-     * @param dir The directory name.
-     */
-    public void setDir(final String dir)
-    {
-        dirName = dir;
-    }
-
-    /**
-     * Executes the task.
-     * @throws BuildException if an exception occurs.
-     */
-    @Override
-    public void execute() throws BuildException
-    {
-        if (dirName == null)
-        {
-            final String message = Messages.getString("vfs.tasks/no-directory-specified.error");
-            throw new BuildException(message);
-        }
-
-        try
-        {
-            final FileObject dir = resolveFile(dirName);
-            final String message = Messages.getString("vfs.tasks/mkdir.create-folder.info", dir);
-            log(message);
-            dir.createFolder();
-        }
-        catch (final FileSystemException e)
-        {
-            throw new BuildException(e);
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/MoveTask.java b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/MoveTask.java
deleted file mode 100644
index 36338e3..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/MoveTask.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.commons.vfs2.tasks;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.Selectors;
-
-/**
- * An Ant task that moves matching files.
- * <p>
- * TODO - Delete matching folders.
- */
-public class MoveTask
-    extends CopyTask
-{
-    private boolean tryRename;
-
-    /**
-     * Enable/disable move/rename of file (if possible).
-     * @param tryRename true if the file should be renamed.
-     */
-    public void setTryRename(final boolean tryRename)
-    {
-        this.tryRename = tryRename;
-    }
-
-    /**
-     * Handles a single source file.
-     */
-    @Override
-    protected void handleOutOfDateFile(final FileObject srcFile,
-                                       final FileObject destFile)
-        throws FileSystemException
-    {
-        if (!tryRename || !srcFile.canRenameTo(destFile))
-        {
-            super.handleOutOfDateFile(srcFile, destFile);
-
-            log("Deleting " + srcFile.getPublicURIString());
-            srcFile.delete(Selectors.SELECT_SELF);
-        }
-        else
-        {
-            log("Rename " + srcFile.getPublicURIString() + " to " + destFile.getPublicURIString());
-            srcFile.moveTo(destFile);
-            if (!isPreserveLastModified()
-                && destFile.getFileSystem().hasCapability(Capability.SET_LAST_MODIFIED_FILE))
-            {
-                destFile.getContent().setLastModifiedTime(System.currentTimeMillis());
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/ShowFileTask.java b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/ShowFileTask.java
deleted file mode 100644
index db98057..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/ShowFileTask.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.tasks;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Date;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.tools.ant.BuildException;
-
-/**
- * An Ant task that writes the details of a file to Ant's log.
- */
-public class ShowFileTask
-    extends VfsTask
-{
-    private static final String INDENT = "  ";
-    private String url;
-    private boolean showContent;
-    private boolean recursive;
-
-
-    /**
-     * The URL of the file to display.
-     * @param url The url of the file.
-     */
-    public void setFile(final String url)
-    {
-        this.url = url;
-    }
-
-    /**
-     * Shows the content.  Assumes the content is text, encoded using the
-     * platform's default encoding.
-     * @param showContent true if the content should be shown.
-     */
-    public void setShowContent(final boolean showContent)
-    {
-        this.showContent = showContent;
-    }
-
-    /**
-     * Recursively shows the descendants of the file.
-     * @param recursive true if descendants should be shown.
-     */
-    public void setRecursive(final boolean recursive)
-    {
-        this.recursive = recursive;
-    }
-
-    /**
-     * Executes the task.
-     * @throws BuildException if any exception is thrown.
-     */
-    @Override
-    public void execute() throws BuildException
-    {
-        try
-        {
-            final FileObject file = resolveFile(url);
-            log("Details of " + file.getPublicURIString());
-            showFile(file, INDENT);
-        }
-        catch (final Exception e)
-        {
-            throw new BuildException(e);
-        }
-    }
-
-    /**
-     * Logs the details of a file.
-     */
-    private void showFile(final FileObject file, final String prefix) throws Exception
-    {
-        // Write details
-        final StringBuilder msg = new StringBuilder(prefix);
-        msg.append(file.getName().getBaseName());
-        if (file.exists())
-        {
-            msg.append(" (");
-            msg.append(file.getType().getName());
-            msg.append(")");
-        }
-        else
-        {
-            msg.append(" (unknown)");
-        }
-        log(msg.toString());
-
-        if (file.exists())
-        {
-            final String newPrefix = prefix + INDENT;
-            if (file.getType().hasContent())
-            {
-                final FileContent content = file.getContent();
-                log(newPrefix + "Content-Length: " + content.getSize());
-                log(newPrefix + "Last-Modified" + new Date(content.getLastModifiedTime()));
-                if (showContent)
-                {
-                    log(newPrefix + "Content:");
-                    logContent(file, newPrefix);
-                }
-            }
-            if (file.getType().hasChildren())
-            {
-                final FileObject[] children = file.getChildren();
-                for (final FileObject child : children)
-                {
-                    if (recursive)
-                    {
-                        showFile(child, newPrefix);
-                    }
-                    else
-                    {
-                        log(newPrefix + child.getName().getBaseName());
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Writes the content of the file to Ant log.
-     */
-    private void logContent(final FileObject file, final String prefix)
-        throws Exception
-    {
-        final InputStream instr = file.getContent().getInputStream();
-        try
-        {
-            final BufferedReader reader = new BufferedReader(new InputStreamReader(instr));
-            while (true)
-            {
-                final String line = reader.readLine();
-                if (line == null)
-                {
-                    break;
-                }
-                log(prefix + line);
-            }
-        }
-        finally
-        {
-            instr.close();
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/SyncTask.java b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/SyncTask.java
deleted file mode 100644
index 7e324f6..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/SyncTask.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.commons.vfs2.tasks;
-
-import org.apache.commons.vfs2.FileObject;
-
-/**
- * A task that synchronises the destination folder to look exactly like
- * the source folder (or folders).
- */
-public class SyncTask
-    extends CopyTask
-{
-    /**
-     * Handles a destination for which there is no corresponding source file.
-     */
-    @Override
-    protected void handleMissingSourceFile(final FileObject destFile)
-        throws Exception
-    {
-        log("deleting " + destFile.getPublicURIString());
-        //destFile.delete( Selectors.SELECT_SELF );
-    }
-
-    /**
-     * Check if this task cares about destination files with a missing source
-     * file.
-     */
-    @Override
-    protected boolean detectMissingSourceFiles()
-    {
-        return true;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/VfsTask.java b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/VfsTask.java
deleted file mode 100644
index 2247d37..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/VfsTask.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.tasks;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.impl.StandardFileSystemManager;
-import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.SubBuildListener;
-import org.apache.tools.ant.Task;
-
-/**
- * Base class for the VFS Ant tasks.  Takes care of creating a FileSystemManager,
- * and for cleaning it up at the end of the build.  Also provides some
- * utility methods.
- */
-public class VfsTask
-    extends Task
-{
-    private static StandardFileSystemManager manager;
-
-    /**
-     * Resolves a URI to a file, relative to the project's base directory.
-     *
-     * @param uri The URI to resolve.
-     * @return resolved file object.
-     * @throws FileSystemException If an error occurred.
-     */
-    protected FileObject resolveFile(final String uri)
-        throws FileSystemException
-    {
-        if (manager == null)
-        {
-            final StandardFileSystemManager mngr = new StandardFileSystemManager();
-            mngr.setLogger(new AntLogger());
-            mngr.init();
-            manager = mngr;
-            getProject().addBuildListener(new CloseListener());
-        }
-        return manager.resolveFile(getProject().getBaseDir(), uri);
-    }
-
-    /**
-     * Close the manager
-     */
-    protected void closeManager()
-    {
-        if (manager != null)
-        {
-            manager.close();
-            manager = null;
-        }
-    }
-
-    /**
-     * Closes the VFS manager when the project finishes.
-     */
-    private class CloseListener
-        implements SubBuildListener
-    {
-        @Override
-        public void subBuildStarted(final BuildEvent buildEvent)
-        {
-        }
-
-        @Override
-        public void subBuildFinished(final BuildEvent buildEvent)
-        {
-            closeManager();
-        }
-
-        @Override
-        public void buildFinished(final BuildEvent event)
-        {
-            closeManager();
-        }
-
-        @Override
-        public void buildStarted(final BuildEvent event)
-        {
-        }
-
-        @Override
-        public void messageLogged(final BuildEvent event)
-        {
-        }
-
-        @Override
-        public void targetFinished(final BuildEvent event)
-        {
-        }
-
-        @Override
-        public void targetStarted(final BuildEvent event)
-        {
-        }
-
-        @Override
-        public void taskFinished(final BuildEvent event)
-        {
-        }
-
-        @Override
-        public void taskStarted(final BuildEvent event)
-        {
-        }
-    }
-
-    /**
-     * A commons-logging wrapper for Ant logging.
-     */
-    private class AntLogger
-        implements Log
-    {
-        @Override
-        public void debug(final Object o)
-        {
-            log(String.valueOf(o), Project.MSG_DEBUG);
-        }
-
-        @Override
-        public void debug(final Object o, final Throwable throwable)
-        {
-            debug(o);
-        }
-
-        @Override
-        public void error(final Object o)
-        {
-            log(String.valueOf(o), Project.MSG_ERR);
-        }
-
-        @Override
-        public void error(final Object o, final Throwable throwable)
-        {
-            error(o);
-        }
-
-        @Override
-        public void fatal(final Object o)
-        {
-            log(String.valueOf(o), Project.MSG_ERR);
-        }
-
-        @Override
-        public void fatal(final Object o, final Throwable throwable)
-        {
-            fatal(o);
-        }
-
-        @Override
-        public void info(final Object o)
-        {
-            log(String.valueOf(o), Project.MSG_INFO);
-        }
-
-        @Override
-        public void info(final Object o, final Throwable throwable)
-        {
-            info(o);
-        }
-
-        @Override
-        public void trace(final Object o)
-        {
-        }
-
-        @Override
-        public void trace(final Object o, final Throwable throwable)
-        {
-        }
-
-        @Override
-        public void warn(final Object o)
-        {
-            log(String.valueOf(o), Project.MSG_WARN);
-        }
-
-        @Override
-        public void warn(final Object o, final Throwable throwable)
-        {
-            warn(o);
-        }
-
-        @Override
-        public boolean isDebugEnabled()
-        {
-            return true;
-        }
-
-        @Override
-        public boolean isErrorEnabled()
-        {
-            return true;
-        }
-
-        @Override
-        public boolean isFatalEnabled()
-        {
-            return true;
-        }
-
-        @Override
-        public boolean isInfoEnabled()
-        {
-            return true;
-        }
-
-        @Override
-        public boolean isTraceEnabled()
-        {
-            return false;
-        }
-
-        @Override
-        public boolean isWarnEnabled()
-        {
-            return true;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/antlib.xml b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/antlib.xml
deleted file mode 100644
index 1d79d26..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/antlib.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<antlib>
-    <taskdef name="copy" classname="org.apache.commons.vfs2.tasks.CopyTask" onerror="report"/>
-    <taskdef name="delete" classname="org.apache.commons.vfs2.tasks.DeleteTask" onerror="report"/>
-    <taskdef name="mkdir" classname="org.apache.commons.vfs2.tasks.MkdirTask" onerror="report"/>
-    <taskdef name="move" classname="org.apache.commons.vfs2.tasks.MoveTask" onerror="report"/>
-    <taskdef name="show-file" classname="org.apache.commons.vfs2.tasks.ShowFileTask" onerror="report"/>
-    <taskdef name="sync" classname="org.apache.commons.vfs2.tasks.SyncTask" onerror="report"/>
-</antlib>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/package.html
deleted file mode 100644
index d1dcd7d..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/package.html
+++ /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.
--->
-<body>
-<p>The VFS Ant Tasks.</p>
-</body>
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/tasks.properties b/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/tasks.properties
deleted file mode 100644
index 4210c79..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/tasks/tasks.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-#   Licensed to the Apache Software Foundation (ASF) under one or more
-#   contributor license agreements.  See the NOTICE file distributed with
-#   this work for additional information regarding copyright ownership.
-#   The ASF licenses this file to You under the Apache License, Version 2.0
-#   (the "License"); you may not use this file except in compliance with
-#   the License.  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-
-v-copy=org.apache.commons.vfs2.tasks.CopyTask
-v-move=org.apache.commons.vfs2.tasks.MoveTask
-v-sync=org.apache.commons.vfs2.tasks.SyncTask
-v-delete=org.apache.commons.vfs2.tasks.DeleteTask
-v-mkdir=org.apache.commons.vfs2.tasks.MkdirTask
-v-show-file=org.apache.commons.vfs2.tasks.ShowFileTask
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/CombinedResources.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/CombinedResources.java
deleted file mode 100644
index a054825..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/CombinedResources.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.commons.vfs2.util;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.ResourceBundle;
-
-/**
- * @since 2.0
- */
-public class CombinedResources extends ResourceBundle
-{
-    // locale.getLanguage()
-    // locale.getCountry()
-    // locale.getVariant()
-
-    private final String resourceName;
-    private boolean inited;
-    private final Properties properties = new Properties();
-
-    public CombinedResources(final String resourceName)
-    {
-        this.resourceName = resourceName;
-    }
-
-    protected void init()
-    {
-        if (inited)
-        {
-            return;
-        }
-
-        loadResources(getResourceName());
-        loadResources(Locale.getDefault());
-        loadResources(getLocale());
-        inited = true;
-    }
-
-    protected void loadResources(final Locale locale)
-    {
-        if (locale == null)
-        {
-            return;
-        }
-        final String[] parts = new String[]{locale.getLanguage(), locale.getCountry(), locale.getVariant()};
-        final StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < 3; i++)
-        {
-            sb.append(getResourceName());
-            for (int j = 0; j < i; j++)
-            {
-                sb.append('_').append(parts[j]);
-            }
-            if (parts[i].length() != 0)
-            {
-                sb.append('_').append(parts[i]);
-                loadResources(sb.toString());
-            }
-            sb.setLength(0);
-        }
-    }
-
-    protected void loadResources(String resourceName)
-    {
-        ClassLoader loader = getClass().getClassLoader();
-        if (loader == null)
-        {
-            loader = ClassLoader.getSystemClassLoader();
-        }
-        resourceName = resourceName.replace('.', '/') + ".properties";
-        try
-        {
-            final Enumeration<URL> resources = loader.getResources(resourceName);
-            while (resources.hasMoreElements())
-            {
-                final URL resource = resources.nextElement();
-                try
-                {
-                    properties.load(resource.openConnection().getInputStream());
-                }
-                catch (final IOException ignored)
-                {
-                    /* Ignored. */
-                }
-            }
-        }
-        catch (final IOException ignored)
-        {
-            /* Ignored. */
-        }
-    }
-
-    public String getResourceName()
-    {
-        return resourceName;
-    }
-
-    @Override
-    public Enumeration<String> getKeys()
-    {
-        if (!inited)
-        {
-            init();
-        }
-        return new Enumeration<String>()
-        {
-            @Override
-            public boolean hasMoreElements()
-            {
-                return properties.keys().hasMoreElements();
-            }
-            @Override
-            public String nextElement()
-            {
-                // We know that our properties will only ever contain Strings
-                return (String) properties.keys().nextElement();
-            }
-
-        };
-    }
-
-    @Override
-    protected Object handleGetObject(final String key)
-    {
-        if (!inited)
-        {
-            init();
-        }
-        return properties.get(key);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/Cryptor.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/Cryptor.java
deleted file mode 100644
index d976c80..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/Cryptor.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.commons.vfs2.util;
-
-/**
- * @since 2.0
- */
-public interface Cryptor
-{
-    /**
-     * Encrypt the plain text password.
-     * @param plainKey The password.
-     * @return The encrypted password String.
-     * @throws Exception If an error occurs.
-     */
-    String encrypt(String plainKey) throws Exception;
-
-    /**
-     * Decrypts the password.
-     * @param encryptedKey the encrypted password.
-     * @return The plain text password.
-     * @throws Exception If an error occurs.
-     */
-    String decrypt(String encryptedKey) throws Exception;
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/CryptorFactory.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/CryptorFactory.java
deleted file mode 100644
index 08fe7f3..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/CryptorFactory.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.commons.vfs2.util;
-
-/**
- * Factory to create an instance of a Cryptor.
- * @since 2.0
- */
-public final class CryptorFactory
-{
-    /**
-     * The System property name to identify the Cryptor class to be used.
-     */
-    public static final String CRYPTOR_CLASS = "org.apache.commons.vfs2.cryptor";
-
-    private static Cryptor instance;
-
-    /**
-     * Prevent instantiation of the class.
-     */
-    private CryptorFactory()
-    {
-
-    }
-
-    /**
-     * Allows the Cryptor class to be set programmatically.
-     * @param cryptor The Cryptor.
-     */
-    public static synchronized void setCryptor(final Cryptor cryptor)
-    {
-        instance = cryptor;
-    }
-
-    /**
-     * Return the Cryptor. If one has not been previously set, create it. The Cryptor class
-     * can be set by setting the "org.apache.commons.vfs2.cryptor" System property to the
-     * name of the Cryptor class.
-     * @return The Cryptor.
-     */
-    public static synchronized Cryptor getCryptor()
-    {
-        if (instance != null)
-        {
-            return instance;
-        }
-
-        final String cryptorClass = System.getProperty(CRYPTOR_CLASS);
-        if (cryptorClass != null)
-        {
-            try
-            {
-                final Class<?> clazz = Class.forName(cryptorClass);
-                instance = (Cryptor) clazz.newInstance();
-                return instance;
-            }
-            catch (final Exception ex)
-            {
-                throw new RuntimeException("Unable to create Cryptor " + cryptorClass, ex);
-            }
-        }
-        instance = new DefaultCryptor();
-        return instance;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/DefaultCryptor.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/DefaultCryptor.java
deleted file mode 100644
index 8ea5a62..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/DefaultCryptor.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.commons.vfs2.util;
-
-import javax.crypto.Cipher;
-import javax.crypto.spec.SecretKeySpec;
-
-/**
- * Allows passwords to be encrypted and decrypted.
- * <p>
- * Warning: This uses AES128 with a fixed encryption key.
- * This is only an obfuscation no cryptographic secure protection.
- *
- * @since 2.0
- */
-public class DefaultCryptor implements Cryptor
-{
-    private static final char[] HEX_CHARS =
-            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
-
-    private static final byte[] KEY_BYTES = {0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x43, 0x6F, 0x6D, 0x6D,
-            0x6F, 0x6E, 0x73, 0x56, 0x46, 0x53};
-
-    private static final int INDEX_NOT_FOUND = -1;
-
-    private static final int BITS_IN_HALF_BYTE = 4;
-
-    private static final char MASK = 0x0f;
-
-    /**
-     * Encrypt the plain text password.
-     * <p>
-     * Warning: This uses AES128 with a fixed encryption key.
-     * This is only an obfuscation no cryptographic secure protection.
-     *
-     * @param plainKey The password.
-     * @return The encrypted password String.
-     * @throws Exception If an error occurs.
-     */
-    @Override
-    public String encrypt(final String plainKey) throws Exception
-    {
-        final byte[] input = plainKey.getBytes();
-        final SecretKeySpec key = new SecretKeySpec(KEY_BYTES, "AES");
-
-        final Cipher cipher = Cipher.getInstance("AES");
-
-        // encryption pass
-        cipher.init(Cipher.ENCRYPT_MODE, key);
-
-        final byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
-        int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
-        ctLength += cipher.doFinal(cipherText, ctLength);
-        return encode(cipherText);
-    }
-
-    /**
-     * Decrypts the password.
-     * @param encryptedKey the encrypted password.
-     * @return The plain text password.
-     * @throws Exception If an error occurs.
-     */
-    @Override
-    public String decrypt(final String encryptedKey) throws Exception
-    {
-        final SecretKeySpec key = new SecretKeySpec(KEY_BYTES, "AES");
-        final Cipher cipher = Cipher.getInstance("AES");
-        cipher.init(Cipher.DECRYPT_MODE, key);
-        final byte[] decoded = decode(encryptedKey);
-        final byte[] plainText = new byte[cipher.getOutputSize(decoded.length)];
-        int ptLength = cipher.update(decoded, 0, decoded.length, plainText, 0);
-        ptLength += cipher.doFinal(plainText, ptLength);
-        return new String(plainText).substring(0, ptLength);
-    }
-
-    /** Hex-encode bytes. */
-    private String encode(final byte[] bytes)
-    {
-        final StringBuilder builder = new StringBuilder();
-
-        for (final byte b : bytes)
-        {
-            builder.append(HEX_CHARS[(b >> BITS_IN_HALF_BYTE) & MASK]);
-            builder.append(HEX_CHARS[b & MASK]);
-        }
-        return builder.toString();
-    }
-
-    /** Decodes Hey-Bytes. */
-    private byte[] decode(final String str)
-    {
-        final int length = str.length() / 2;
-        final byte[] decoded = new byte[length];
-        final char[] chars = str.toCharArray();
-        int index = 0;
-        for (int i = 0; i < chars.length; ++i)
-        {
-            final int id1 = indexOf(HEX_CHARS, chars[i]);
-            if (id1 == -1)
-            {
-                throw new IllegalArgumentException("Character " + chars[i] + " at position " + i
-                        + " is not a valid hexidecimal character");
-            }
-            final int id2 = indexOf(HEX_CHARS, chars[++i]);
-            if (id2 == -1)
-            {
-                throw new IllegalArgumentException("Character " + chars[i] + " at position " + i
-                        + " is not a valid hexidecimal character");
-            }
-            decoded[index++] = (byte) ((id1 << BITS_IN_HALF_BYTE) | id2);
-        }
-        return decoded;
-    }
-
-    private int indexOf(final char[] array, final char valueToFind)
-    {
-        if (array == null)
-        {
-            return INDEX_NOT_FOUND;
-        }
-        for (int i = 0; i < array.length; i++)
-        {
-            if (valueToFind == array[i])
-            {
-                return i;
-            }
-        }
-        return INDEX_NOT_FOUND;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilder.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilder.java
deleted file mode 100644
index a13711e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilder.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.commons.vfs2.util;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * This class use reflection to set a configuration value using the fileSystemConfigBuilder
- * associated the a scheme.<br><br>
- * Example:<br>
- * <pre>
- * FileSystemOptions fso = new FileSystemOptions();
- * DelegatingFileSystemOptionsBuilder delegate = new DelegatingFileSystemOptionsBuilder(VFS.getManager());
- * delegate.setConfigString(fso, "sftp", "identities", "c:/tmp/test.ident");
- * delegate.setConfigString(fso, "http", "proxyPort", "8080");
- * delegate.setConfigClass(fso, "sftp", "userinfo", TrustEveryoneUserInfo.class);
- * </pre>
- */
-public class DelegatingFileSystemOptionsBuilder
-{
-    @SuppressWarnings("unchecked") //  OK, it is a String
-    private static final Class<String>[] STRING_PARAM = new Class[]{String.class};
-    private static final Map<String, Class<?>> PRIMATIVE_TO_OBJECT = new TreeMap<String, Class<?>>();
-    private static final Log log = LogFactory.getLog(DelegatingFileSystemOptionsBuilder.class);
-
-    private final FileSystemManager manager;
-    private final Map<String, Map<String, List<Method>>> beanMethods = new TreeMap<String, Map<String, List<Method>>>();
-
-    static
-    {
-        PRIMATIVE_TO_OBJECT.put(Void.TYPE.getName(), Void.class);
-        PRIMATIVE_TO_OBJECT.put(Boolean.TYPE.getName(), Boolean.class);
-        PRIMATIVE_TO_OBJECT.put(Byte.TYPE.getName(), Byte.class);
-        PRIMATIVE_TO_OBJECT.put(Character.TYPE.getName(), Character.class);
-        PRIMATIVE_TO_OBJECT.put(Short.TYPE.getName(), Short.class);
-        PRIMATIVE_TO_OBJECT.put(Integer.TYPE.getName(), Integer.class);
-        PRIMATIVE_TO_OBJECT.put(Long.TYPE.getName(), Long.class);
-        PRIMATIVE_TO_OBJECT.put(Double.TYPE.getName(), Double.class);
-        PRIMATIVE_TO_OBJECT.put(Float.TYPE.getName(), Float.class);
-    }
-
-    /**
-     * Context.
-     */
-    private static final class Context
-    {
-        private final FileSystemOptions fso;
-        private final String scheme;
-        private final String name;
-        private final Object[] values;
-
-        private List<Method> configSetters;
-        private FileSystemConfigBuilder fileSystemConfigBuilder;
-
-        private Context(final FileSystemOptions fso, final String scheme, final String name, final Object[] values)
-        {
-            this.fso = fso;
-            this.scheme = scheme;
-            this.name = name;
-            this.values = values;
-        }
-    }
-
-    /**
-     * Constructor.<br>
-     * Pass in your fileSystemManager instance.
-     *
-     * @param manager the manager to use to get the fileSystemConfigBuilder assocated to a scheme
-     */
-    public DelegatingFileSystemOptionsBuilder(final FileSystemManager manager)
-    {
-        this.manager = manager;
-    }
-
-    protected FileSystemManager getManager()
-    {
-        return manager;
-    }
-
-    /**
-     * Set a single string value.
-     *
-     * @param fso    FileSystemOptions
-     * @param scheme scheme
-     * @param name   name
-     * @param value  value
-     * @throws FileSystemException if an error occurs.
-     */
-    public void setConfigString(final FileSystemOptions fso, final String scheme, final String name,
-                                final String value) throws FileSystemException
-    {
-        setConfigStrings(fso, scheme, name, new String[]{value});
-    }
-
-    /**
-     * Set an array of string value.
-     *
-     * @param fso    FileSystemOptions
-     * @param scheme scheme
-     * @param name   name
-     * @param values values
-     * @throws FileSystemException if an error occurs.
-     */
-    public void setConfigStrings(final FileSystemOptions fso, final String scheme, final String name,
-                                 final String[] values) throws FileSystemException
-    {
-        final Context ctx = new Context(fso, scheme, name, values);
-
-        setValues(ctx);
-    }
-
-    /**
-     * Set a single class value.<br>
-     * The class has to implement a no-args constructor, else the instantiation might fail.
-     *
-     * @param fso       FileSystemOptions
-     * @param scheme    scheme
-     * @param name      name
-     * @param className className
-     * @throws FileSystemException if an error occurs.
-     * @throws IllegalAccessException if a class canoot be accessed.
-     * @throws InstantiationException if a class cannot be instantiated.
-     */
-    public void setConfigClass(final FileSystemOptions fso, final String scheme, final String name,
-                               final Class<?> className)
-            throws FileSystemException, IllegalAccessException, InstantiationException
-    {
-        setConfigClasses(fso, scheme, name, new Class[]{className});
-    }
-
-    /**
-     * Set an array of class values.<br>
-     * The class has to implement a no-args constructor, else the instantiation might fail.
-     *
-     * @param fso        FileSystemOptions
-     * @param scheme     scheme
-     * @param name       name
-     * @param classNames classNames
-     * @throws FileSystemException if an error occurs.
-     * @throws IllegalAccessException if a class canoot be accessed.
-     * @throws InstantiationException if a class cannot be instantiated.
-     */
-    public void setConfigClasses(final FileSystemOptions fso, final String scheme, final String name,
-                                 final Class<?>[] classNames)
-            throws FileSystemException, IllegalAccessException, InstantiationException
-    {
-        final Object[] values = new Object[classNames.length];
-        for (int iterClassNames = 0; iterClassNames < values.length; iterClassNames++)
-        {
-            values[iterClassNames] = classNames[iterClassNames].newInstance();
-        }
-
-        final Context ctx = new Context(fso, scheme, name, values);
-
-        setValues(ctx);
-    }
-
-    /**
-     * sets the values using the informations of the given context.<br>
-     */
-    private void setValues(final Context ctx) throws FileSystemException
-    {
-        // find all setter methods suitable for the given "name"
-        if (!fillConfigSetters(ctx))
-        {
-            throw new FileSystemException("vfs.provider/config-key-invalid.error",
-                ctx.scheme,
-                ctx.name);
-        }
-
-        // get the fileSystemConfigBuilder
-        ctx.fileSystemConfigBuilder = getManager().getFileSystemConfigBuilder(ctx.scheme);
-
-        // try to find a setter which could accept the value
-        final Iterator<Method> iterConfigSetters = ctx.configSetters.iterator();
-        while (iterConfigSetters.hasNext())
-        {
-            final Method configSetter = iterConfigSetters.next();
-            if (convertValuesAndInvoke(configSetter, ctx))
-            {
-                return;
-            }
-        }
-
-        throw new FileSystemException("vfs.provider/config-value-invalid.error",
-            ctx.scheme,
-            ctx.name,
-            ctx.values);
-    }
-
-    /**
-     * tries to convert the value and pass it to the given method
-     */
-    private boolean convertValuesAndInvoke(final Method configSetter, final Context ctx) throws FileSystemException
-    {
-        final Class<?>[] parameters = configSetter.getParameterTypes();
-        if (parameters.length < 2)
-        {
-            return false;
-        }
-        if (!parameters[0].isAssignableFrom(FileSystemOptions.class))
-        {
-            return false;
-        }
-
-        final Class<?> valueParameter = parameters[1];
-        Class<?> type;
-        if (valueParameter.isArray())
-        {
-            type = valueParameter.getComponentType();
-        }
-        else
-        {
-            if (ctx.values.length > 1)
-            {
-                return false;
-            }
-
-            type = valueParameter;
-        }
-
-        if (type.isPrimitive())
-        {
-            final Class<?> objectType = PRIMATIVE_TO_OBJECT.get(type.getName());
-            if (objectType == null)
-            {
-                log.warn(Messages.getString("vfs.provider/config-unexpected-primitive.error", type.getName()));
-                return false;
-            }
-            type = objectType;
-        }
-
-        final Class<? extends Object> valueClass = ctx.values[0].getClass();
-        if (type.isAssignableFrom(valueClass))
-        {
-            // can set value directly
-            invokeSetter(valueParameter, ctx, configSetter, ctx.values);
-            return true;
-        }
-        if (valueClass != String.class)
-        {
-            log.warn(Messages.getString("vfs.provider/config-unexpected-value-class.error",
-                valueClass.getName(),
-                ctx.scheme,
-                ctx.name
-            ));
-            return false;
-        }
-
-        final Object convertedValues = Array.newInstance(type, ctx.values.length);
-
-        Constructor<?> valueConstructor;
-        try
-        {
-            valueConstructor = type.getConstructor(STRING_PARAM);
-        }
-        catch (final NoSuchMethodException e)
-        {
-            valueConstructor = null;
-        }
-        if (valueConstructor != null)
-        {
-            // can convert using constructor
-            for (int iterValues = 0; iterValues < ctx.values.length; iterValues++)
-            {
-                try
-                {
-                    Array.set(convertedValues, iterValues,
-                            valueConstructor.newInstance(new Object[]{ctx.values[iterValues]}));
-                }
-                catch (final InstantiationException e)
-                {
-                    throw new FileSystemException(e);
-                }
-                catch (final IllegalAccessException e)
-                {
-                    throw new FileSystemException(e);
-                }
-                catch (final InvocationTargetException e)
-                {
-                    throw new FileSystemException(e);
-                }
-            }
-
-            invokeSetter(valueParameter, ctx, configSetter, convertedValues);
-            return true;
-        }
-
-        Method valueFactory;
-        try
-        {
-            valueFactory = type.getMethod("valueOf", STRING_PARAM);
-            if (!Modifier.isStatic(valueFactory.getModifiers()))
-            {
-                valueFactory = null;
-            }
-        }
-        catch (final NoSuchMethodException e)
-        {
-            valueFactory = null;
-        }
-
-        if (valueFactory != null)
-        {
-            // can convert using factory method (valueOf)
-            for (int iterValues = 0; iterValues < ctx.values.length; iterValues++)
-            {
-                try
-                {
-                    Array.set(convertedValues, iterValues,
-                            valueFactory.invoke(null, new Object[]{ctx.values[iterValues]}));
-                }
-                catch (final IllegalAccessException e)
-                {
-                    throw new FileSystemException(e);
-                }
-                catch (final InvocationTargetException e)
-                {
-                    throw new FileSystemException(e);
-                }
-            }
-
-            invokeSetter(valueParameter, ctx, configSetter, convertedValues);
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * invokes the method with the converted values
-     */
-    private void invokeSetter(final Class<?> valueParameter, final Context ctx, final Method configSetter,
-                              final Object values)
-        throws FileSystemException
-    {
-        Object[] args;
-        if (valueParameter.isArray())
-        {
-            args = new Object[]
-            {
-                ctx.fso,
-                values
-            };
-        }
-        else
-        {
-            args = new Object[]
-            {
-                ctx.fso,
-                Array.get(values, 0)
-            };
-        }
-        try
-        {
-            configSetter.invoke(ctx.fileSystemConfigBuilder, args);
-        }
-        catch (final IllegalAccessException e)
-        {
-            throw new FileSystemException(e);
-        }
-        catch (final InvocationTargetException e)
-        {
-            throw new FileSystemException(e);
-        }
-    }
-
-    /**
-     * fills all available set*() methods for the context-scheme into the context.
-     */
-    private boolean fillConfigSetters(final Context ctx)
-        throws FileSystemException
-    {
-        final Map<String, List<Method>> schemeMethods = getSchemeMethods(ctx.scheme);
-        final List<Method> configSetters = schemeMethods.get(ctx.name.toLowerCase());
-        if (configSetters == null)
-        {
-            return false;
-        }
-
-        ctx.configSetters = configSetters;
-        return true;
-    }
-
-    /**
-     * get (cached) list of set*() methods for the given scheme
-     */
-    private Map<String, List<Method>> getSchemeMethods(final String scheme) throws FileSystemException
-    {
-        Map<String, List<Method>> schemeMethods = beanMethods.get(scheme);
-        if (schemeMethods == null)
-        {
-            schemeMethods = createSchemeMethods(scheme);
-            beanMethods.put(scheme, schemeMethods);
-        }
-
-        return schemeMethods;
-    }
-
-    /**
-     * create the list of all set*() methods for the given scheme
-     */
-    private Map<String, List<Method>> createSchemeMethods(final String scheme) throws FileSystemException
-    {
-        final FileSystemConfigBuilder fscb = getManager().getFileSystemConfigBuilder(scheme);
-        if (fscb == null)
-        {
-            throw new FileSystemException("vfs.provider/no-config-builder.error", scheme);
-        }
-
-        final Map<String, List<Method>> schemeMethods = new TreeMap<String, List<Method>>();
-
-        final Method[] methods = fscb.getClass().getMethods();
-        for (final Method method : methods)
-        {
-            if (!Modifier.isPublic(method.getModifiers()))
-            {
-                continue;
-            }
-
-            final String methodName = method.getName();
-            if (!methodName.startsWith("set"))
-            {
-                // not a setter
-                continue;
-            }
-
-            final String key = methodName.substring(3).toLowerCase();
-
-            List<Method> configSetter = schemeMethods.get(key);
-            if (configSetter == null)
-            {
-                configSetter = new ArrayList<Method>(2);
-                schemeMethods.put(key, configSetter);
-            }
-            configSetter.add(method);
-        }
-
-        return schemeMethods;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/EncryptUtil.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/EncryptUtil.java
deleted file mode 100644
index 6816e6c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/EncryptUtil.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.commons.vfs2.util;
-
-/**
- * Allows passwords to be encrypted and decrypted.
- * @since 2.0
- */
-public final class EncryptUtil
-{
-    /**
-     * Don't allow class instantiation.
-     */
-    private EncryptUtil()
-    {
-    }
-
-    /**
-     * This class can be called with "encrypt" password as the arguments where encrypt is
-     * a literal and password is replaced with the clear text password to be encrypted.
-     *
-     * @param args The arguments in the form "command" parm1, parm2.
-     * @throws Exception If an error occurs.
-     */
-    public static void main(final String[] args) throws Exception
-    {
-        if (args.length != 2 || !args[0].equals("encrypt"))
-        {
-            System.err.println("Usage: \"EncryptUtil encrypt\" password");
-            System.err.println("     password : The clear text password to encrypt");
-            System.exit(0);
-        }
-        final Cryptor cryptor = CryptorFactory.getCryptor();
-
-        if (args[0].equals("encrypt"))
-        {
-            System.out.println(cryptor.encrypt(args[1]));
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/FileObjectUtils.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/FileObjectUtils.java
deleted file mode 100644
index ea3a1f6..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/FileObjectUtils.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.commons.vfs2.util;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.impl.DecoratedFileObject;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-
-/**
- * Stuff to get some strange things from an FileObject.
- */
-public final class FileObjectUtils
-{
-    private FileObjectUtils()
-    {
-    }
-
-    /**
-     * Get access to the base object even if decorated.
-     * @param fileObject The FileObject.
-     * @return The decorated FileObject or null.
-     * @throws FileSystemException if an error occurs.
-     */
-    public static AbstractFileObject getAbstractFileObject(final FileObject fileObject) throws FileSystemException
-    {
-        Object searchObject = fileObject;
-        while (searchObject instanceof DecoratedFileObject)
-        {
-            searchObject = ((DecoratedFileObject) searchObject).getDecoratedFileObject();
-        }
-        if (searchObject instanceof AbstractFileObject)
-        {
-            return (AbstractFileObject) searchObject;
-        }
-        if (searchObject == null)
-        {
-            return null;
-        }
-
-        throw new FileSystemException("vfs.util/find-abstract-file-object.error",
-                fileObject == null ? "null" : fileObject.getClass().getName());
-    }
-
-    /**
-     * Check if the given FileObject is instance of given class argument.
-     * @param fileObject The FileObject.
-     * @param wantedClass The Class to check.
-     * @return true if fileObject is an instance of the specified Class.
-     * @throws FileSystemException if an error occurs.
-     */
-    public static boolean isInstanceOf(final FileObject fileObject, final Class<?> wantedClass)
-        throws FileSystemException
-    {
-        Object searchObject = fileObject;
-        while (searchObject instanceof DecoratedFileObject)
-        {
-            if (wantedClass.isInstance(searchObject))
-            {
-                return true;
-            }
-
-            searchObject = ((DecoratedFileObject) searchObject).getDecoratedFileObject();
-        }
-
-        if (wantedClass.isInstance(searchObject))
-        {
-            return true;
-        }
-
-        return false;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/Messages.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/Messages.java
deleted file mode 100644
index d48e8c4..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/Messages.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.commons.vfs2.util;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * Formats messages.
- */
-public final class Messages
-{
-    /**
-     * Map from message code to MessageFormat object for the message.
-     */
-    private static ConcurrentMap<String, MessageFormat> messageMap = new ConcurrentHashMap<String, MessageFormat>();
-    private static final ResourceBundle RESOURCES = new CombinedResources("org.apache.commons.vfs2.Resources");
-
-    private Messages()
-    {
-    }
-
-    /**
-     * Formats a message.
-     *
-     * @param code The message code.
-     * @return The formatted message.
-     */
-    public static String getString(final String code)
-    {
-        return getString(code, new Object[0]);
-    }
-
-    /**
-     * Formats a message.
-     *
-     * @param code
-     *            The message code.
-     * @param param
-     *            The message parameter.
-     * @return The formatted message.
-     * @deprecated Will be removed in 3.0 in favor of {@link #getString(String, Object[])} When removed, calls to this
-     *             method will automatically recompile to {@link #getString(String, Object[])}
-     */
-    @Deprecated
-    public static String getString(final String code, final Object param)
-    {
-        return getString(code, new Object[]{param});
-    }
-
-    /**
-     * Formats a message.
-     *
-     * @param code   The message code.
-     * @param params The message parameters.
-     * @return The formatted message.
-     */
-    public static String getString(final String code, final Object... params)
-    {
-        try
-        {
-            if (code == null)
-            {
-                return null;
-            }
-
-            final MessageFormat msg = findMessage(code);
-            return msg.format(params);
-        }
-        catch (final MissingResourceException mre)
-        {
-            return "Unknown message with code \"" + code + "\".";
-        }
-    }
-
-    /**
-     * Locates a message by its code.
-     */
-    private static MessageFormat findMessage(final String code)
-        throws MissingResourceException
-    {
-        // Check if the message is cached
-        MessageFormat msg = messageMap.get(code);
-        if (msg != null)
-        {
-            return msg;
-        }
-
-        final String msgText = RESOURCES.getString(code);
-        msg = new MessageFormat(msgText);
-        messageMap.putIfAbsent(code, msg);
-        return messageMap.get(code);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorInputStream.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorInputStream.java
deleted file mode 100644
index ce8f4e3..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorInputStream.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.commons.vfs2.util;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
-
-/**
- * An InputStream that provides buffering and end-of-stream monitoring.
- */
-public class MonitorInputStream
-    extends BufferedInputStream
-{
-    private final AtomicBoolean finished = new AtomicBoolean(false);
-    private final AtomicLong count = new AtomicLong(0);
-
-    public MonitorInputStream(final InputStream in)
-    {
-        super(in);
-    }
-
-
-    /**
-     * Returns 0 if the stream is at eof, else the underlaying inputStream will be queried.
-     * @return The number of bytes that are available.
-     * @throws IOException if an error occurs.
-     * @since 2.0
-     */
-    @Override
-    public synchronized int available() throws IOException
-    {
-        if (finished.get())
-        {
-            return 0;
-        }
-
-        return super.available();
-    }
-
-    /**
-     * Reads a character.
-     * @return The character that was read as an integer.
-     * @throws IOException if an error occurs.
-     */
-    @Override
-    public int read() throws IOException
-    {
-        if (finished.get())
-        {
-            return -1;
-        }
-
-        final int ch = super.read();
-        if (ch != -1)
-        {
-            count.incrementAndGet();
-            return ch;
-        }
-
-        // End-of-stream
-        close();
-        return -1;
-    }
-
-    /**
-     * Reads bytes from this input stream.
-     * @param buffer A byte array in which to place the characters read.
-     * @param offset The offset at which to start reading.
-     * @param length The maximum number of bytes to read.
-     * @return The number of bytes read.
-     * @throws IOException if an error occurs.
-     */
-    @Override
-    public int read(final byte[] buffer, final int offset, final int length)
-        throws IOException
-    {
-        if (finished.get())
-        {
-            return -1;
-        }
-
-        final int nread = super.read(buffer, offset, length);
-        if (nread != -1)
-        {
-            count.addAndGet(nread);
-            return nread;
-        }
-
-        // End-of-stream
-        close();
-        return -1;
-    }
-
-    /**
-     * Closes this input stream and releases any system resources
-     * associated with the stream.
-     * @throws IOException if an error occurs.
-     */
-    @Override
-    public void close() throws IOException
-    {
-        final boolean closed = finished.getAndSet(true);
-        if (closed)
-        {
-            return;
-        }
-
-        // Close the stream
-        IOException exc = null;
-        try
-        {
-            super.close();
-        }
-        catch (final IOException ioe)
-        {
-            exc = ioe;
-        }
-
-        // Notify that the stream has been closed
-        try
-        {
-            onClose();
-        }
-        catch (final IOException ioe)
-        {
-            exc = ioe;
-        }
-
-        if (exc != null)
-        {
-            throw exc;
-        }
-    }
-
-    /**
-     * Called after the stream has been closed.  This implementation does
-     * nothing.
-     * @throws IOException if an error occurs.
-     */
-    protected void onClose() throws IOException
-    {
-    }
-
-    /**
-     * Get the nuber of bytes read by this input stream.
-     * @return The number of bytes read by this input stream.
-     */
-    public long getCount()
-    {
-        return count.get();
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorOutputStream.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorOutputStream.java
deleted file mode 100644
index fa86905..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorOutputStream.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.util;
-
-import java.io.BufferedOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * An OutputStream that provides buffering and end-of-stream monitoring.
- */
-public class MonitorOutputStream
-    extends BufferedOutputStream
-{
-    private final AtomicBoolean finished = new AtomicBoolean(false);
-
-    public MonitorOutputStream(final OutputStream out)
-    {
-        super(out);
-    }
-
-    /**
-     * Closes this output stream.
-     * <p>
-     * This makes sure the buffers are flushed, close the output
-     * stream and it will call {@link #onClose()}
-     * and re-throw last exception from any of the three.
-     * <p>
-     * This does nothing if the stream is closed already.
-     *
-     * @throws IOException if an error occurs.
-     */
-    @Override
-    public void close() throws IOException
-    {
-        // do not use super.close()
-        // on Java 8 it might throw self suppression, see JDK-8042377
-        // in older Java it silently ignores flush() errors
-        if (finished.getAndSet(true))
-        {
-            return;
-        }
-
-        IOException exc = null;
-
-        // flush the buffer and out stream
-        try
-        {
-            super.flush();
-        }
-        catch (final IOException ioe)
-        {
-            exc = ioe;
-        }
-
-        // close the out stream without using super.close()
-        try
-        {
-            super.out.close();
-        }
-        catch (final IOException ioe)
-        {
-            exc = ioe;
-        }
-
-        // Notify of end of output
-        try
-        {
-            onClose();
-        }
-        catch (final IOException ioe)
-        {
-            exc = ioe;
-        }
-
-        if (exc != null)
-        {
-            throw exc;
-        }
-    }
-
-
-    /**
-     * @param b The character to write.
-     * @throws IOException if an error occurs.
-     * @since 2.0
-     */
-    @Override
-    public synchronized void write(final int b) throws IOException
-    {
-        assertOpen();
-        super.write(b);
-    }
-
-    /**
-     * @param b The byte array.
-     * @param off The offset into the array.
-     * @param len The number of bytes to write.
-     * @throws IOException if an error occurs.
-     * @since 2.0
-     */
-    @Override
-    public synchronized void write(final byte[] b, final int off, final int len) throws IOException
-    {
-        assertOpen();
-        super.write(b, off, len);
-    }
-
-    /**
-     * @throws IOException if an error occurs.
-     * @since 2.0
-     */
-    @Override
-    public synchronized void flush() throws IOException
-    {
-        assertOpen();
-        super.flush();
-    }
-
-    /**
-     * @param b The byte array.
-     * @throws IOException if an error occurs.
-     * @since 2.0
-     */
-    @Override
-    public void write(final byte[] b) throws IOException
-    {
-        assertOpen();
-        super.write(b);
-    }
-
-    /**
-     * Check if file is still open.
-     * <p>
-     * This is a workaround for an oddity with Java's BufferedOutputStream where you can write to
-     * even if the stream has been closed.
-     *
-     * @throws FileSystemException if already closed.
-     * @since 2.0
-     */
-    protected void assertOpen() throws FileSystemException
-    {
-        if (finished.get())
-        {
-            throw new FileSystemException("vfs.provider/closed.error");
-        }
-    }
-
-    /**
-     * Called after this stream is closed.
-     * <p>
-     * This implementation does nothing.
-     *
-     * @throws IOException if an error occurs.
-     */
-    // IOException is needed because subclasses may need to throw it
-    protected void onClose() throws IOException
-    {
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorRandomAccessContent.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorRandomAccessContent.java
deleted file mode 100644
index 486a23e..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/MonitorRandomAccessContent.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.commons.vfs2.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.vfs2.RandomAccessContent;
-
-/**
- * A RandomAccessContent that provides end-of-stream monitoring.
- */
-public class MonitorRandomAccessContent implements RandomAccessContent
-{
-    private final RandomAccessContent content;
-    private boolean finished;
-
-    public MonitorRandomAccessContent(final RandomAccessContent content)
-    {
-        this.content = content;
-    }
-
-    /**
-     * Called after this stream is closed.
-     *
-     * @throws IOException if subclass throws it.
-     */
-    @SuppressWarnings("unused") // IOException is needed because subclasses may need to throw it
-    protected void onClose() throws IOException
-    {
-    }
-
-    /**
-     * Closes this content.
-     * @throws IOException if an error occurs.
-     */
-    @Override
-    public void close() throws IOException
-    {
-        if (finished)
-        {
-            return;
-        }
-
-        // Close the output stream
-        IOException exc = null;
-        try
-        {
-            content.close();
-        }
-        catch (final IOException ioe)
-        {
-            exc = ioe;
-        }
-
-        // Notify of end of output
-        exc = null;
-        try
-        {
-            onClose();
-        }
-        catch (final IOException ioe)
-        {
-            exc = ioe;
-        }
-
-        finished = true;
-
-        if (exc != null)
-        {
-            throw exc;
-        }
-    }
-
-    @Override
-    public long getFilePointer() throws IOException
-    {
-        return content.getFilePointer();
-    }
-
-    @Override
-    public void seek(final long pos) throws IOException
-    {
-        content.seek(pos);
-    }
-
-    @Override
-    public long length() throws IOException
-    {
-        return content.length();
-    }
-
-    @Override
-    public void write(final int b) throws IOException
-    {
-        content.write(b);
-    }
-
-    @Override
-    public void write(final byte[] b) throws IOException
-    {
-        content.write(b);
-    }
-
-    @Override
-    public void write(final byte[] b, final int off, final int len) throws IOException
-    {
-        content.write(b, off, len);
-    }
-
-    @Override
-    public void writeBoolean(final boolean v) throws IOException
-    {
-        content.writeBoolean(v);
-    }
-
-    @Override
-    public void writeByte(final int v) throws IOException
-    {
-        content.writeByte(v);
-    }
-
-    @Override
-    public void writeShort(final int v) throws IOException
-    {
-        content.writeShort(v);
-    }
-
-    @Override
-    public void writeChar(final int v) throws IOException
-    {
-        content.writeChar(v);
-    }
-
-    @Override
-    public void writeInt(final int v) throws IOException
-    {
-        content.writeInt(v);
-    }
-
-    @Override
-    public void writeLong(final long v) throws IOException
-    {
-        content.writeLong(v);
-    }
-
-    @Override
-    public void writeFloat(final float v) throws IOException
-    {
-        content.writeFloat(v);
-    }
-
-    @Override
-    public void writeDouble(final double v) throws IOException
-    {
-        content.writeDouble(v);
-    }
-
-    @Override
-    public void writeBytes(final String s) throws IOException
-    {
-        content.writeBytes(s);
-    }
-
-    @Override
-    public void writeChars(final String s) throws IOException
-    {
-        content.writeChars(s);
-    }
-
-    @Override
-    public void writeUTF(final String str) throws IOException
-    {
-        content.writeUTF(str);
-    }
-
-    @Override
-    public void readFully(final byte[] b) throws IOException
-    {
-        content.readFully(b);
-    }
-
-    @Override
-    public void readFully(final byte[] b, final int off, final int len) throws IOException
-    {
-        content.readFully(b, off, len);
-    }
-
-    @Override
-    public int skipBytes(final int n) throws IOException
-    {
-        return content.skipBytes(n);
-    }
-
-    @Override
-    public void setLength(final long newLength) throws IOException
-    {
-        content.setLength(newLength);
-    }
-
-    @Override
-    public boolean readBoolean() throws IOException
-    {
-        return content.readBoolean();
-    }
-
-    @Override
-    public byte readByte() throws IOException
-    {
-        return content.readByte();
-    }
-
-    @Override
-    public int readUnsignedByte() throws IOException
-    {
-        return content.readUnsignedByte();
-    }
-
-    @Override
-    public short readShort() throws IOException
-    {
-        return content.readShort();
-    }
-
-    @Override
-    public int readUnsignedShort() throws IOException
-    {
-        return content.readUnsignedShort();
-    }
-
-    @Override
-    public char readChar() throws IOException
-    {
-        return content.readChar();
-    }
-
-    @Override
-    public int readInt() throws IOException
-    {
-        return content.readInt();
-    }
-
-    @Override
-    public long readLong() throws IOException
-    {
-        return content.readLong();
-    }
-
-    @Override
-    public float readFloat() throws IOException
-    {
-        return content.readFloat();
-    }
-
-    @Override
-    public double readDouble() throws IOException
-    {
-        return content.readDouble();
-    }
-
-    @Override
-    public String readLine() throws IOException
-    {
-        return content.readLine();
-    }
-
-    @Override
-    public String readUTF() throws IOException
-    {
-        return content.readUTF();
-    }
-
-    @Override
-    public InputStream getInputStream() throws IOException
-    {
-        return content.getInputStream();
-    }
-
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/Os.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/Os.java
deleted file mode 100644
index f9a9ced..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/Os.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.commons.vfs2.util;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-
-/**
- * Class to help determining the OS.
- */
-public final class Os
-{
-    /**
-     * All Windows based OSes.
-     */
-    public static final OsFamily OS_FAMILY_WINDOWS = new OsFamily("windows");
-
-    /**
-     * All DOS based OSes.
-     */
-    public static final OsFamily OS_FAMILY_DOS = new OsFamily("dos");
-
-    /**
-     * All Windows NT based OSes.
-     */
-    public static final OsFamily OS_FAMILY_WINNT =
-        new OsFamily("nt", new OsFamily[]{OS_FAMILY_WINDOWS});
-
-    /**
-     * All Windows 9x based OSes.
-     */
-    public static final OsFamily OS_FAMILY_WIN9X =
-        new OsFamily("win9x", new OsFamily[]{OS_FAMILY_WINDOWS, OS_FAMILY_DOS});
-
-    /**
-     * OS/2.
-     */
-    public static final OsFamily OS_FAMILY_OS2 =
-        new OsFamily("os/2", new OsFamily[]{OS_FAMILY_DOS});
-
-    /**
-     * Netware.
-     */
-    public static final OsFamily OS_FAMILY_NETWARE =
-        new OsFamily("netware");
-
-    /**
-     * All UNIX based OSes.
-     */
-    public static final OsFamily OS_FAMILY_UNIX = new OsFamily("unix");
-
-    /**
-     * All Mac based OSes.
-     */
-    public static final OsFamily OS_FAMILY_MAC = new OsFamily("mac");
-
-    /**
-     * OSX.
-     */
-    public static final OsFamily OS_FAMILY_OSX =
-        new OsFamily("osx", new OsFamily[]{OS_FAMILY_UNIX, OS_FAMILY_MAC});
-
-    private static final String OS_NAME =
-        System.getProperty("os.name").toLowerCase(Locale.US);
-    private static final String OS_ARCH =
-        System.getProperty("os.arch").toLowerCase(Locale.US);
-    private static final String OS_VERSION =
-        System.getProperty("os.version").toLowerCase(Locale.US);
-    private static final String PATH_SEP = File.pathSeparator;
-    private static final OsFamily OS_FAMILY;
-    private static final OsFamily[] OS_ALL_FAMILIES;
-
-    private static final OsFamily[] ALL_FAMILIES = new OsFamily[]
-    {
-        OS_FAMILY_DOS,
-        OS_FAMILY_MAC,
-        OS_FAMILY_NETWARE,
-        OS_FAMILY_OS2,
-        OS_FAMILY_OSX,
-        OS_FAMILY_UNIX,
-        OS_FAMILY_WINDOWS,
-        OS_FAMILY_WINNT,
-        OS_FAMILY_WIN9X
-    };
-
-    static
-    {
-        OS_FAMILY = determineOsFamily();
-        OS_ALL_FAMILIES = determineAllFamilies();
-    }
-
-    /**
-     * Private constructor to block instantiation.
-     */
-    private Os()
-    {
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the given OS
-     * version.
-     * @param version The version to check.
-     * @return true if the version matches.
-     */
-    public static boolean isVersion(final String version)
-    {
-        return isOs((OsFamily) null, null, null, version);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the given OS
-     * architecture.
-     * @param arch The architecture to check.
-     * @return true if the architecture mataches.
-     */
-    public static boolean isArch(final String arch)
-    {
-        return isOs((OsFamily) null, null, arch, null);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the given OS
-     * family.
-     * @param family The family to check.
-     * @return true if the family matches.
-     */
-    public static boolean isFamily(final String family)
-    {
-        return isOs(family, null, null, null);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the given OS
-     * family.
-     * @param family The family to check.
-     * @return true if the family matches.
-     */
-    public static boolean isFamily(final OsFamily family)
-    {
-        return isOs(family, null, null, null);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the given OS name.
-     *
-     * @param name Description of Parameter
-     * @return The Name value
-     * @since 1.7
-     */
-    public static boolean isName(final String name)
-    {
-        return isOs((OsFamily) null, name, null, null);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the given OS
-     * family, name, architecture and version.
-     *
-     * @param family  The OS family
-     * @param name    The OS name
-     * @param arch    The OS architecture
-     * @param version The OS version
-     * @return The Os value
-     */
-    public static boolean isOs(final String family,
-                               final String name,
-                               final String arch,
-                               final String version)
-    {
-        return isOs(getFamily(family), name, arch, version);
-    }
-
-    /**
-     * Determines if the OS on which Ant is executing matches the given OS
-     * family, name, architecture and version.
-     *
-     * @param family  The OS family
-     * @param name    The OS name
-     * @param arch    The OS architecture
-     * @param version The OS version
-     * @return The Os value
-     */
-    public static boolean isOs(final OsFamily family,
-                               final String name,
-                               final String arch,
-                               final String version)
-    {
-        if (family != null || name != null || arch != null || version != null)
-        {
-            final boolean isFamily = familyMatches(family);
-            final boolean isName = nameMatches(name);
-            final boolean isArch = archMatches(arch);
-            final boolean isVersion = versionMatches(version);
-
-            return isFamily && isName && isArch && isVersion;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Locates an OsFamily by name (case-insensitive).
-     *
-     * @param name The family name to lookup.
-     * @return the OS family, or null if not found.
-     */
-    public static OsFamily getFamily(final String name)
-    {
-        for (final OsFamily osFamily : ALL_FAMILIES)
-        {
-            if (osFamily.getName().equalsIgnoreCase(name))
-            {
-                return osFamily;
-            }
-        }
-
-        return null;
-    }
-
-    private static boolean versionMatches(final String version)
-    {
-        boolean isVersion = true;
-        if (version != null)
-        {
-            isVersion = version.equalsIgnoreCase(OS_VERSION);
-        }
-        return isVersion;
-    }
-
-    private static boolean archMatches(final String arch)
-    {
-        boolean isArch = true;
-        if (arch != null)
-        {
-            isArch = arch.equalsIgnoreCase(OS_ARCH);
-        }
-        return isArch;
-    }
-
-    private static boolean nameMatches(final String name)
-    {
-        boolean isName = true;
-        if (name != null)
-        {
-            isName = name.equalsIgnoreCase(OS_NAME);
-        }
-        return isName;
-    }
-
-    private static boolean familyMatches(final OsFamily family)
-    {
-        if (family == null)
-        {
-            return false;
-        }
-        for (final OsFamily osFamily : OS_ALL_FAMILIES)
-        {
-            if (family == osFamily)
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private static OsFamily[] determineAllFamilies()
-    {
-        // Determine all families the current OS belongs to
-        final Set<OsFamily> allFamilies = new HashSet<OsFamily>();
-        if (OS_FAMILY != null)
-        {
-            final List<OsFamily> queue = new ArrayList<OsFamily>();
-            queue.add(OS_FAMILY);
-            while (queue.size() > 0)
-            {
-                final OsFamily family = queue.remove(0);
-                allFamilies.add(family);
-                final OsFamily[] families = family.getFamilies();
-                for (final OsFamily parent : families)
-                {
-                    queue.add(parent);
-                }
-            }
-        }
-        return allFamilies.toArray(new OsFamily[allFamilies.size()]);
-    }
-
-    private static OsFamily determineOsFamily()
-    {
-        // Determine the most specific OS family
-        if (OS_NAME.indexOf("windows") > -1)
-        {
-            if (OS_NAME.indexOf("xp") > -1
-                || OS_NAME.indexOf("2000") > -1
-                || OS_NAME.indexOf("nt") > -1)
-            {
-                return OS_FAMILY_WINNT;
-            }
-            else
-            {
-                return OS_FAMILY_WIN9X;
-            }
-        }
-        else if (OS_NAME.indexOf("os/2") > -1)
-        {
-            return OS_FAMILY_OS2;
-        }
-        else if (OS_NAME.indexOf("netware") > -1)
-        {
-            return OS_FAMILY_NETWARE;
-        }
-        else if (OS_NAME.indexOf("mac") > -1)
-        {
-            if (OS_NAME.endsWith("x"))
-            {
-                return OS_FAMILY_OSX;
-            }
-            else
-            {
-                return OS_FAMILY_MAC;
-            }
-        }
-        else if (PATH_SEP.equals(":"))
-        {
-            return OS_FAMILY_UNIX;
-        }
-        else
-        {
-            return null;
-        }
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/OsFamily.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/OsFamily.java
deleted file mode 100644
index 7382f69..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/OsFamily.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.commons.vfs2.util;
-
-/**
- * An enumerated type, which represents an OS family.
- */
-public final class OsFamily
-{
-    private final String name;
-    private final OsFamily[] families;
-
-    OsFamily(final String name)
-    {
-        this.name = name;
-        families = new OsFamily[0];
-    }
-
-    OsFamily(final String name, final OsFamily[] families)
-    {
-        this.name = name;
-        this.families = families;
-    }
-
-    /**
-     * Returns the name of this family.
-     * @return The name of this family.
-     */
-    public String getName()
-    {
-        return name;
-    }
-
-    /**
-     * Returns the OS families that this family belongs to.
-     * @return an array of OSFamily objects that this family belongs to.
-     */
-    public OsFamily[] getFamilies()
-    {
-        return families;
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/PosixPermissions.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/PosixPermissions.java
deleted file mode 100644
index 62e800c..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/PosixPermissions.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.vfs2.util;
-
-import java.util.EnumMap;
-import java.util.Map;
-
-/**
- * UNIX permissions.
- *
- * @since 2.1
- */
-public class PosixPermissions
-{
-
-    /**
-     * Permission types.
-     */
-    public static enum Type
-    {
-        /**
-         * User right readable.
-         */
-        UserReadable(00400),
-
-        /**
-         * User right writable.
-         */
-        UserWritable(00200),
-
-        /**
-         * User right executable.
-         */
-        UserExecutable(00100),
-
-        /**
-         * Group right readable.
-         */
-        GroupReadable(00040),
-
-        /**
-         * Group right writable.
-         */
-        GroupWritable(00020),
-
-        /**
-         * Group right executable.
-         */
-        GroupExecutable(00010),
-
-        /**
-         * Other right readable.
-         */
-        OtherReadable(00004),
-
-        /**
-         * Other right writable.
-         */
-        OtherWritable(00002),
-
-        /**
-         * Other right executable.
-         */
-        OtherExecutable(00001);
-
-        private final int mask;
-
-        /**
-         * Initialize with the mask
-         */
-        private Type(final int mask)
-        {
-            this.mask = mask;
-        }
-
-        /**
-         * Return the mask for this permission.
-         *
-         * @return the mask for this permission.
-         */
-        public int getMask()
-        {
-            return this.mask;
-        }
-
-    }
-
-    /**
-     * Current permissions.
-     */
-    private final int permissions;
-
-    /**
-     * If the user is the owner of the file.
-     */
-    private final boolean isOwner;
-
-    /**
-     * If one user group is the group of the file.
-     */
-    private final boolean isInGroup;
-
-    /**
-     * Creates a new PosixPermissions object.
-     *
-     * @param permissions
-     *            The permissions
-     * @param isOwner
-     *            true if the user is the owner of the file
-     * @param isInGroup
-     *            true if the user is a group owner of the file
-     */
-    public PosixPermissions(final int permissions, final boolean isOwner, final boolean isInGroup)
-    {
-        this.permissions = permissions;
-        this.isOwner = isOwner;
-        this.isInGroup = isInGroup;
-    }
-
-    /**
-     * Computes new permission from old ones.
-     *
-     * @param values
-     *            The permissions to set.
-     * @return The new permissions.
-     */
-    private int computeNewPermissions(final Map<Type, Boolean> values)
-    {
-        int newPerms = this.permissions;
-        for (final Map.Entry<Type, Boolean> entry : values.entrySet())
-        {
-            final Type type = entry.getKey();
-            if (entry.getValue())
-            {
-                newPerms |= type.getMask();
-            }
-            else
-            {
-                newPerms &= ~type.getMask();
-            }
-        }
-        return newPerms;
-    }
-
-    /**
-     * Tests whether the bit corresponding to the permission is set.
-     *
-     * @return whether the bit corresponding to the permission is set.
-     */
-    private boolean get(final Type type)
-    {
-        return (type.getMask() & this.permissions) != 0;
-    }
-
-    /**
-     * Gets permissions.
-     *
-     * @return permissions.
-     */
-    public int getPermissions()
-    {
-        return this.permissions;
-    }
-
-    /**
-     * Gets whether the permissions are executable.
-     *
-     * @return whether the permissions are executable.
-     */
-    public boolean isExecutable()
-    {
-        if (this.isOwner)
-        {
-            return this.get(Type.UserExecutable);
-        }
-        if (this.isInGroup)
-        {
-            return this.get(Type.GroupExecutable);
-        }
-        return this.get(Type.OtherExecutable);
-    }
-
-    /**
-     * Gets whether the permissions are readable.
-     *
-     * @return whether the permissions are readable.
-     */
-    public boolean isReadable()
-    {
-        if (this.isOwner)
-        {
-            return this.get(Type.UserReadable);
-        }
-        if (this.isInGroup)
-        {
-            return this.get(Type.GroupReadable);
-        }
-        return this.get(Type.OtherReadable);
-    }
-
-    /**
-     * Gets whether the permissions are writable.
-     *
-     * @return whether the permissions are writable.
-     */
-    public boolean isWritable()
-    {
-        if (this.isOwner)
-        {
-            return this.get(Type.UserWritable);
-        }
-        if (this.isInGroup)
-        {
-            return this.get(Type.GroupWritable);
-        }
-        return this.get(Type.OtherWritable);
-    }
-
-    /**
-     * Creates new permissions based on these permissions.
-     *
-     * @param executable
-     *            Whether the new permissions should be readable.
-     * @param ownerOnly
-     *            Whether the new permissions are only for the owner.
-     * @return the new permissions.
-     */
-    public int makeExecutable(final boolean executable, final boolean ownerOnly)
-    {
-        final EnumMap<Type, Boolean> map = new EnumMap<Type, Boolean>(Type.class);
-        map.put(Type.UserExecutable, executable);
-        if (!ownerOnly)
-        {
-            map.put(Type.GroupExecutable, executable);
-            map.put(Type.OtherExecutable, executable);
-        }
-        return this.computeNewPermissions(map);
-    }
-
-    /**
-     * Creates new permissions based on these permissions.
-     *
-     * @param readable
-     *            Whether the new permissions should be readable.
-     * @param ownerOnly
-     *            Whether the new permissions are only for the owner.
-     * @return the new permissions.
-     */
-    public Integer makeReadable(final boolean readable, final boolean ownerOnly)
-    {
-        final EnumMap<Type, Boolean> map = new EnumMap<Type, Boolean>(Type.class);
-        map.put(Type.UserReadable, readable);
-        if (!ownerOnly)
-        {
-            map.put(Type.GroupReadable, readable);
-            map.put(Type.OtherReadable, readable);
-        }
-        return this.computeNewPermissions(map);
-    }
-
-    /**
-     * Creates new permissions based on these permissions.
-     *
-     * @param writable
-     *            Whether the new permissions should be readable.
-     * @param ownerOnly
-     *            Whether the new permissions are only for the owner.
-     * @return the new permissions.
-     */
-    public Integer makeWritable(final boolean writable, final boolean ownerOnly)
-    {
-        final EnumMap<Type, Boolean> map = new EnumMap<Type, Boolean>(Type.class);
-        map.put(Type.UserWritable, writable);
-        if (!ownerOnly)
-        {
-            map.put(Type.GroupWritable, writable);
-            map.put(Type.OtherWritable, writable);
-        }
-        return this.computeNewPermissions(map);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/RandomAccessMode.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/RandomAccessMode.java
deleted file mode 100644
index 67a9870..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/RandomAccessMode.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.commons.vfs2.util;
-
-/**
- * An enumerated type representing the modes of a random access content.
- */
-public enum RandomAccessMode
-{
-    /**
-     * read.
-     */
-    READ(true, false),
-
-    /**
-     * read/write.
-     */
-    READWRITE(true, true);
-
-
-    private final boolean read;
-    private final boolean write;
-
-    private RandomAccessMode(final boolean read, final boolean write)
-    {
-        this.read = read;
-        this.write = write;
-    }
-
-    public boolean requestRead()
-    {
-        return read;
-    }
-
-    public boolean requestWrite()
-    {
-        return write;
-    }
-
-    /**
-     * @return The mode String.
-     * @since 2.0
-     * */
-    public String getModeString()
-    {
-        if (requestRead())
-        {
-            if (requestWrite())
-            {
-                return "rw"; // NON-NLS
-            }
-            else
-            {
-                return "r"; // NON-NLS
-            }
-        }
-        else if (requestWrite())
-        {
-            return "w"; // NON-NLS
-        }
-
-        return "";
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/UserAuthenticatorUtils.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/UserAuthenticatorUtils.java
deleted file mode 100644
index 74bc428..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/UserAuthenticatorUtils.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.commons.vfs2.util;
-
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.UserAuthenticator;
-import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;
-
-/**
- * Helps with authentication.
- */
-public final class UserAuthenticatorUtils
-{
-    private UserAuthenticatorUtils()
-    {
-    }
-
-    /**
-     * Gets data of given type from the UserAuthenticationData or null if there is no data or data
-     * of this type available.
-     *
-     * @param data The UserAuthenticationData.
-     * @param type The type of the element to retrieve.
-     * @param overriddenValue The default value.
-     * @return The data of the given type as a character array or null if the data is not available.
-     */
-    public static char[] getData(final UserAuthenticationData data, final UserAuthenticationData.Type type,
-                                 final char[] overriddenValue)
-    {
-        if (overriddenValue != null)
-        {
-            return overriddenValue;
-        }
-
-        if (data == null)
-        {
-            return null;
-        }
-
-        return data.getData(type);
-    }
-
-    /**
-     * Authenticates if there is an authenticator, else returns null.
-     *
-     * @param opts The FileSystemOptions.
-     * @param authenticatorTypes An array of types describing the data to be retrieved.
-     * @return A UserAuthenticationData object containing the data requested.
-     */
-    public static UserAuthenticationData authenticate(final FileSystemOptions opts,
-                                                      final UserAuthenticationData.Type[] authenticatorTypes)
-    {
-        final UserAuthenticator auth = DefaultFileSystemConfigBuilder.getInstance().getUserAuthenticator(opts);
-        return authenticate(auth, authenticatorTypes);
-    }
-
-    /**
-     * Authenticates if there is an authenticator, else returns null.
-     *
-     * @param auth The UserAuthenticator.
-     * @param authenticatorTypes An array of types describing the data to be retrieved.
-     * @return A UserAuthenticationData object containing the data requested.
-     */
-    public static UserAuthenticationData authenticate(final UserAuthenticator auth,
-                                                      final UserAuthenticationData.Type[] authenticatorTypes)
-    {
-        if (auth == null)
-        {
-            return null;
-        }
-
-        return auth.requestAuthentication(authenticatorTypes);
-    }
-
-    /**
-     * Converts a string to a char array (null-safe).
-     *
-     * @param string The String to convert.
-     * @return The character array.
-     */
-    public static char[] toChar(final String string)
-    {
-        if (string == null)
-        {
-            return null;
-        }
-
-        return string.toCharArray();
-    }
-
-    /**
-     * Cleans up the data in the UerAuthenticationData (null-safe).
-     *
-     * @param authData The UserAuthenticationDAta.
-     */
-    public static void cleanup(final UserAuthenticationData authData)
-    {
-        if (authData == null)
-        {
-            return;
-        }
-
-        authData.cleanup();
-    }
-
-    /**
-     * Converts the given data to a string (null-safe).
-     *
-     * @param data A character array containing the data to convert to a String.
-     * @return The String.
-     */
-    public static String toString(final char[] data)
-    {
-        if (data == null)
-        {
-            return null;
-        }
-
-        return new String(data);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/WeakRefFileListener.java b/trunk/core/src/main/java/org/apache/commons/vfs2/util/WeakRefFileListener.java
deleted file mode 100644
index 73aa6b5..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/WeakRefFileListener.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.commons.vfs2.util;
-
-import java.lang.ref.WeakReference;
-
-import org.apache.commons.vfs2.FileChangeEvent;
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-
-/**
- * Wrap a listener with a WeakReference.
- *
- * @since 2.0
- */
-public class WeakRefFileListener implements FileListener
-{
-    private final FileSystem fs;
-    private final FileName name;
-    private final WeakReference<FileListener> listener;
-
-    protected WeakRefFileListener(final FileObject file, final FileListener listener)
-    {
-        this.fs = file.getFileSystem();
-        this.name = file.getName();
-        this.listener = new WeakReference<FileListener>(listener);
-    }
-
-    /**
-     * This will install the {@code listener} at the given {@code file}.
-     * @param file The FileObject to listen on.
-     * @param listener The FileListener
-     */
-    public static void installListener(final FileObject file, final FileListener listener)
-    {
-        final WeakRefFileListener weakListener = new WeakRefFileListener(file, listener);
-
-        file.getFileSystem().addListener(file, new WeakRefFileListener(file, weakListener));
-    }
-
-    /**
-     * returns the wrapped listener. If it is gone, the WeakRefFileListener wrapper will
-     * remove itself from the list of listeners.
-     * @return The FileListener.
-     * @throws Exception if an error occurs.
-     */
-    protected FileListener getListener() throws Exception
-    {
-        final FileListener listener = this.listener.get();
-        if (listener == null)
-        {
-            final FileObject file = fs.resolveFile(name);
-            file.getFileSystem().removeListener(file, this);
-        }
-        return listener;
-    }
-
-    /**
-     * Called when a file is created.
-     * @param event The FileChangeEvent.
-     * @throws Exception if an error occurs.
-     */
-    @Override
-    public void fileCreated(final FileChangeEvent event) throws Exception
-    {
-        final FileListener listener = getListener();
-        if (listener == null)
-        {
-            return;
-        }
-        listener.fileCreated(event);
-    }
-
-    /**
-     * Called when a file is deleted.
-     * @param event The FileChangeEvent.
-     * @throws Exception if an error occurs.
-     */
-    @Override
-    public void fileDeleted(final FileChangeEvent event) throws Exception
-    {
-        final FileListener listener = getListener();
-        if (listener == null)
-        {
-            return;
-        }
-        listener.fileDeleted(event);
-    }
-
-    /**
-     * Called when a file is changed.
-     * <p>
-     * This will only happen if you monitor the file using {@link org.apache.commons.vfs2.FileMonitor}.
-     *
-     * @param event The FileChangeEvent.
-     * @throws Exception if an error occurs.
-     */
-    @Override
-    public void fileChanged(final FileChangeEvent event) throws Exception
-    {
-        final FileListener listener = getListener();
-        if (listener == null)
-        {
-            return;
-        }
-        listener.fileChanged(event);
-    }
-}
diff --git a/trunk/core/src/main/java/org/apache/commons/vfs2/util/package.html b/trunk/core/src/main/java/org/apache/commons/vfs2/util/package.html
deleted file mode 100644
index c9af968..0000000
--- a/trunk/core/src/main/java/org/apache/commons/vfs2/util/package.html
+++ /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.
--->
-<body>
-<p>Utility classes used by the VFS.</p>
-</body>
diff --git a/trunk/core/src/main/utils/create_archives.sh b/trunk/core/src/main/utils/create_archives.sh
deleted file mode 100755
index 83a1a3b..0000000
--- a/trunk/core/src/main/utils/create_archives.sh
+++ /dev/null
@@ -1,106 +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.
-
-set -e
-
-PRG="$0"
-
-while [ -h "$PRG" ]; do
-  ls=`ls -ld "$PRG"`
-  link=`expr "$ls" : '.*-> \(.*\)$'`
-  if expr "$link" : '.*/.*' > /dev/null; then
-    PRG="$link"
-  else
-    PRG=`dirname "$PRG"`/"$link"
-  fi
-done
-
-# Get standard environment variables
-PRGDIR=`dirname "$PRG"`
-
-cd $PRGDIR/../../..
-
-if [ ! -d target/test-classes/test-data/read-tests ]
-then
-	echo "Please run maven to have the environment setup correctly"
-	exit 1
-fi
-
-if [ ! -x "`type -p jar`" ]
-then
-	echo "cant execute jar?"
-	exit 1
-fi
-if [ ! -x "`type -p tar`" ]
-then
-	echo "cant execute tar?"
-	exit 1
-fi
-if [ ! -x "`type -p zip`" ]
-then
-	echo "cant execute zip?"
-	exit 1
-fi
-if [ ! -x "`type -p bzip2`" ]
-then
-        echo "cant execute bzip2?"
-        exit 1
-fi
-
-cd target/test-classes/test-data
-mkdir read-tests/emptydir
-
-rm -f test.jar test.tar test.tbz2 test.tgz test.zip
-rm -f nested.jar nested.tar nested.tbz2 nested.tgz nested.zip
-
-echo "Creating test.jar ..."
-jar -cvfm test.jar test.mf read-tests code
-
-echo "Creating test.tar ..."
-tar cvf test.tar read-tests code
-
-echo "Creating test.tbz2 ..."
-tar cjvf test.tbz2 read-tests code
-
-echo "Creating test.tgz ..."
-tar czvf test.tgz read-tests code
-
-echo "Creating test.zip ..."
-zip -r test.zip read-tests code
-
-echo "Creating nested.jar ..."
-jar cvf nested.jar test.jar
-
-echo "Creating nested.tar ..."
-tar cvf nested.tar test.tar
-
-echo "Creating nested.tbz2 ..."
-tar cjvf nested.tbz2 test.tbz2
-
-echo "Creating nested.tgz ..."
-tar czvf nested.tgz test.tgz
-
-echo "Creating nested.zip ..."
-zip nested.zip test.zip
-
-for i in test.jar test.tar test.tbz2 test.tgz test.zip nested.jar nested.tar nested.tbz2 nested.tgz nested.zip
-do
-	cp $i ../../../src/test/resources/test-data/$i
-done
-
-echo Done.
-
diff --git a/trunk/core/src/site/site.xml b/trunk/core/src/site/site.xml
deleted file mode 100644
index 44451fa..0000000
--- a/trunk/core/src/site/site.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT 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="Commons&#xA0;VFS">
-
-  <bannerRight>
-    <name>Commons&#xA0;VFS</name>
-    <src>../images/vfs-logo-white.png</src>
-    <href>../index.html</href>
-  </bannerRight>
-
-  <body>
-    <links>
-      <item name="Commons VFS Home" href="../index.html"/>
-    </links>
-
-    <!-- menus inherited -->
-
-    <menu ref="reports"/>
-  </body>
-</project>
diff --git a/trunk/core/src/site/xdoc/index.xml b/trunk/core/src/site/xdoc/index.xml
deleted file mode 100644
index 775963b..0000000
--- a/trunk/core/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,39 +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.

--->

-

-<document>

-    <properties>

-        <title>Apache Commons VFS Core</title>

-        <author email="dev@commons.apache.org">Apache Commons Developers</author>

-    </properties>

-

-    <body>

-

-      <section name="About Apache Commons VFS Core">

-        <p>

-          This is the core module containing the Apache Commons VFS API,

-          implementation as well as various

-          <a href="../filesystems.html">file system providers</a>.

-        </p><p>

-          The documentation on how to use the API can be found in the

-          <a href="../api.html">parent module</a>.

-        </p>

-      </section>

-

-    </body>

-</document>

diff --git a/trunk/core/src/test/java/code/ClassToLoad.java b/trunk/core/src/test/java/code/ClassToLoad.java
deleted file mode 100644
index 44d657c..0000000
--- a/trunk/core/src/test/java/code/ClassToLoad.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 code;
-
-/**
- * The test class for the VFS classloader.
- */
-public class ClassToLoad
-{
-    private final String m_message = "**PRIVATE**";
-
-    @Override
-    public String toString()
-    {
-        return m_message;
-    }
-}
diff --git a/trunk/core/src/test/java/code/sealed/AnotherClass.java b/trunk/core/src/test/java/code/sealed/AnotherClass.java
deleted file mode 100644
index ecf53dc..0000000
--- a/trunk/core/src/test/java/code/sealed/AnotherClass.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package code.sealed;
-
-/**
- * A test class for the ClassLoader tests.
- */
-public class AnotherClass
-{
-}
diff --git a/trunk/core/src/test/java/com/jcraft/jsch/TestIdentityRepositoryFactory.java b/trunk/core/src/test/java/com/jcraft/jsch/TestIdentityRepositoryFactory.java
deleted file mode 100644
index 772e3ed..0000000
--- a/trunk/core/src/test/java/com/jcraft/jsch/TestIdentityRepositoryFactory.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 com.jcraft.jsch;
-
-import org.apache.commons.vfs2.provider.sftp.IdentityRepositoryFactory;
-
-/**
- * Simple JSch identity repository factory (that just returns the default factory).
- *
- * This class is packaged in {@code com.jcraft.jsch} because {@code com.jcraft.jsch.LocalIdentityRepository} is
- * declared with default scope.
- *
- * @version $Id$
- */
-public class TestIdentityRepositoryFactory implements IdentityRepositoryFactory
-{
-    @Override
-    public IdentityRepository create(final JSch jsch)
-    {
-        return new LocalIdentityRepository(jsch);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/AbstractVfsTestCase.java b/trunk/core/src/test/java/org/apache/commons/AbstractVfsTestCase.java
deleted file mode 100644
index bb261b9..0000000
--- a/trunk/core/src/test/java/org/apache/commons/AbstractVfsTestCase.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.commons;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import junit.framework.TestCase;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.util.Messages;
-
-/**
- * A base class for VFS tests.  Provides utility methods for locating
- * test resources.
- */
-public abstract class AbstractVfsTestCase
-    extends TestCase
-{
-    private static File baseDir;
-
-    /** URL pattern */
-    private static final Pattern URL_PATTERN = Pattern.compile("[a-z]+://.*");
-
-    /** Password pattern */
-    private static final Pattern PASSWORD_PATTERN = Pattern.compile(":(?:[^/]+)@");
-
-    /**
-     * Returns the name of the package containing a class.
-     *
-     * @return The . delimited package name, or an empty string if the class
-     *         is in the default package.
-     */
-    public static String getPackageName(final Class<?> clazz)
-    {
-        final Package pkg = clazz.getPackage();
-        if (null != pkg)
-        {
-            return pkg.getName();
-        }
-
-        final String name = clazz.getName();
-        if (-1 == name.lastIndexOf("."))
-        {
-            return "";
-        }
-        else
-        {
-            return name.substring(0, name.lastIndexOf("."));
-        }
-    }
-
-    /**
-     * Locates a test resource, and asserts that the resource exists
-     *
-     * @param name path of the resource, relative to this test's base directory.
-     */
-    public static File getTestResource(final String name)
-    {
-        return getTestResource(name, true);
-    }
-
-    /**
-     * Locates a test resource.
-     *
-     * @param name path of the resource, relative to this test's base directory.
-     */
-    public static File getTestResource(final String name, final boolean mustExist)
-    {
-        File file = new File(getTestDirectoryFile(), name);
-        file = getCanonicalFile(file);
-        if (mustExist)
-        {
-            assertTrue("Test file \"" + file + "\" does not exist.", file.exists());
-        }
-        else
-        {
-            assertTrue("Test file \"" + file + "\" should not exist.", !file.exists());
-        }
-
-        return file;
-    }
-
-    /**
-     * Locates the base directory for this test.
-     */
-    public static File getTestDirectoryFile()
-    {
-        if (baseDir == null)
-        {
-            final String baseDirProp = getTestDirectory();
-            // the directory maybe expressed as URI in certain environments
-            if (baseDirProp.startsWith("file://")) {
-                try {
-                    baseDir = getCanonicalFile(new File(new URI(baseDirProp)));
-                } catch (final URISyntaxException e) {
-                    baseDir = getCanonicalFile(new File(baseDirProp));
-                }
-            } else {
-                baseDir = getCanonicalFile(new File(baseDirProp));
-            }
-        }
-        return baseDir;
-    }
-
-    /**
-     * Returns the test directory as a String.
-     * <p>
-     * {@link #getTestDirectoryFile()} should be preferred.
-     *
-     * @return the test directory as a String
-     */
-    public static String getTestDirectory()
-    {
-        return System.getProperty("test.basedir", "target/test-classes/test-data");
-    }
-
-    public static String getResourceTestDirectory()
-    {
-        return System.getProperty("test.basedir.res", "test-data");
-    }
-
-    /**
-     * Locates a test directory, creating it if it does not exist.
-     *
-     * @param name path of the directory, relative to this test's base directory.
-     */
-    public static File getTestDirectory(final String name)
-    {
-        File file = new File(getTestDirectoryFile(), name);
-        file = getCanonicalFile(file);
-        assertTrue("Test directory \"" + file + "\" does not exist or is not a directory.",
-            file.isDirectory() || file.mkdirs());
-        return file;
-    }
-
-    /**
-     * Makes a file canonical
-     */
-    public static File getCanonicalFile(final File file)
-    {
-        try
-        {
-            return file.getCanonicalFile();
-        }
-        catch (final IOException e)
-        {
-            return file.getAbsoluteFile();
-        }
-    }
-
-    /**
-     * Asserts that an exception chain contains the expected messages.
-     *
-     * @param messages The messages, in order.  A null entry in this array
-     *                 indicates that the message should be ignored.
-     */
-    public static void assertSameMessage(final String[] messages, final Throwable throwable)
-    {
-        Throwable current = throwable;
-        for (final String message : messages)
-        {
-            assertNotNull(current);
-            if (message != null)
-            {
-                assertEquals(message, current.getMessage());
-            }
-
-            // Get the next exception in the chain
-            current = getCause(current);
-        }
-    }
-
-    /**
-     * Returns the cause of an exception.
-     */
-    public static Throwable getCause(final Throwable throwable)
-    {
-        try
-        {
-            final Method method = throwable.getClass().getMethod("getCause", (Class[]) null);
-            return (Throwable) method.invoke(throwable, (Object[]) null);
-        }
-        catch (final Exception e)
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Asserts that an exception contains the expected message.
-     */
-    public static void assertSameMessage(final String code,
-                                         final Throwable throwable)
-    {
-        assertSameMessage(code, new Object[0], throwable);
-    }
-
-    /**
-     * Asserts that an exception contains the expected message.
-     */
-    public static void assertSameMessage(final String code,
-                                         final Object[] params,
-                                         final Throwable throwable)
-    {
-        Object[] parmArray = params;
-        if (throwable instanceof FileSystemException)
-        {
-            final FileSystemException fse = (FileSystemException) throwable;
-
-            // Compare message code and params
-            assertEquals(code, fse.getCode());
-            assertEquals(params.length, fse.getInfo().length);
-            parmArray = new Object[params.length];
-            for (int i = 0; i < params.length; i++)
-            {
-                String value = String.valueOf(params[i]);
-                // mask passwords (VFS-169)
-                final Matcher urlMatcher = URL_PATTERN.matcher(value);
-                if (urlMatcher.find())
-                {
-                    final Matcher pwdMatcher = PASSWORD_PATTERN.matcher(value);
-                    value = pwdMatcher.replaceFirst(":***@");
-                }
-                assertEquals(value, fse.getInfo()[i]);
-                parmArray[i] = value;
-            }
-        }
-
-        // Compare formatted message
-        final String message = Messages.getString(code, parmArray);
-        assertEquals(message, throwable.getMessage());
-    }
-
-    /**
-     * Asserts that an exception contains the expected message.
-     */
-    public static void assertSameMessage(final String code,
-                                         final Object param,
-                                         final Throwable throwable)
-    {
-        assertSameMessage(code, new Object[]{param}, throwable);
-    }
-
-    /**
-     * Compares 2 objects for equality, nulls are equal.  Used by the test
-     * classes' equals() methods.
-     */
-    public static boolean equals(final Object o1, final Object o2)
-    {
-        if (o1 == null && o2 == null)
-        {
-            return true;
-        }
-        if (o1 == null || o2 == null)
-        {
-            return false;
-        }
-        return o1.equals(o2);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/FileExtensionSelectorTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/FileExtensionSelectorTest.java
deleted file mode 100644
index 47cab77..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/FileExtensionSelectorTest.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.commons.vfs2;

-

-import java.util.Arrays;

-import java.util.Collection;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.junit.AfterClass;

-import org.junit.Assert;

-import org.junit.BeforeClass;

-import org.junit.Test;

-

-/**

- * Tests FileExtensionSelector.

- *

- * @since 2.1

- */

-public class FileExtensionSelectorTest

-{

-    private static FileObject BaseFolder;

-

-    private static final int FileCount = 9;

-

-    private static final int ExtensionCount = 3;

-

-    private static final int FilesPerExtensionCount = 3;

-

-    /**

-     * Creates a RAM FS.

-     *

-     * @throws Exception

-     */

-    @BeforeClass

-    public static void setUpClass() throws Exception

-    {

-        BaseFolder = VFS.getManager().resolveFile("ram://" + FileExtensionSelectorTest.class.getName());

-        BaseFolder.deleteAll();

-        BaseFolder.createFolder();

-        BaseFolder.resolveFile("a.htm").createFile();

-        BaseFolder.resolveFile("a.html").createFile();

-        BaseFolder.resolveFile("a.xhtml").createFile();

-        BaseFolder.resolveFile("b.htm").createFile();

-        BaseFolder.resolveFile("b.html").createFile();

-        BaseFolder.resolveFile("b.xhtml").createFile();

-        BaseFolder.resolveFile("c.htm").createFile();

-        BaseFolder.resolveFile("c.html").createFile();

-        BaseFolder.resolveFile("c.xhtml").createFile();

-    }

-

-    /**

-     * Deletes RAM FS files.

-     *

-     * @throws Exception

-     */

-    @AfterClass

-    public static void tearDownClass() throws Exception

-    {

-        if (BaseFolder != null)

-        {

-            BaseFolder.deleteAll();

-        }

-    }

-

-    /**

-     * Tests an empty selector.

-     *

-     * @throws Exception

-     */

-    @Test

-    public void testEmpty() throws Exception

-    {

-        final FileSelector selector = new FileExtensionSelector();

-        final FileObject[] foList = BaseFolder.findFiles(selector);

-        Assert.assertEquals(0, foList.length);

-    }

-

-    /**

-     * Tests many extensions at once.

-     *

-     * @throws Exception

-     */

-    @Test

-    public void testManyExtensions() throws Exception

-    {

-        final FileObject[] foArray = BaseFolder.findFiles(Selectors.SELECT_FILES);

-        Assert.assertTrue(foArray.length > 0);

-        // gather file extensions.

-        final Set<String> extensionSet = new HashSet<String>();

-        for (final FileObject fo : foArray)

-        {

-            extensionSet.add(fo.getName().getExtension());

-        }

-        final String message = String.format("Extensions: %s; files: %s", extensionSet.toString(),

-                Arrays.asList(foArray).toString());

-        Assert.assertTrue(message, extensionSet.size() > 0);

-        Assert.assertEquals(message, ExtensionCount, extensionSet.size());

-        // check all unique extensions

-        final FileSelector selector = new FileExtensionSelector(extensionSet);

-        final FileObject[] list = BaseFolder.findFiles(selector);

-        Assert.assertEquals(FileCount, list.length);

-    }

-

-    /**

-     * Tests a null selector.

-     *

-     * @throws Exception

-     */

-    @Test

-    public void testNullCollection() throws Exception

-    {

-        final FileSelector selector0 = new FileExtensionSelector((Collection<String>) null);

-        final FileObject[] foList = BaseFolder.findFiles(selector0);

-        Assert.assertEquals(0, foList.length);

-    }

-

-    /**

-     * Tests a null selector.

-     *

-     * @throws Exception

-     */

-    @Test

-    public void testNullString() throws Exception

-    {

-        final FileSelector selector0 = new FileExtensionSelector((String) null);

-        final FileObject[] foList = BaseFolder.findFiles(selector0);

-        Assert.assertEquals(0, foList.length);

-    }

-

-    /**

-     * Tests a one extension selector.

-     *

-     * @throws Exception

-     */

-    @Test

-    public void testOneExtension() throws Exception

-    {

-        final FileObject[] foArray = BaseFolder.findFiles(Selectors.SELECT_FILES);

-        Assert.assertTrue(foArray.length > 0);

-        // gather file extensions.

-        final Set<String> extensionSet = new HashSet<String>();

-        for (final FileObject fo : foArray)

-        {

-            extensionSet.add(fo.getName().getExtension());

-        }

-        final String message = String.format("Extensions: %s; files: %s", extensionSet.toString(),

-                Arrays.asList(foArray).toString());

-        Assert.assertEquals(message, ExtensionCount, extensionSet.size());

-        // check each extension

-        for (final String extension : extensionSet)

-        {

-            final FileSelector selector = new FileExtensionSelector(extension);

-            final FileObject[] list = BaseFolder.findFiles(selector);

-            Assert.assertEquals(FilesPerExtensionCount, list.length);

-        }

-        // check each file against itself

-        for (final FileObject fo : foArray)

-        {

-            final FileSelector selector = new FileExtensionSelector(fo.getName().getExtension());

-            final FileObject[] list = BaseFolder.findFiles(selector);

-            Assert.assertEquals(FilesPerExtensionCount, list.length);

-        }

-    }

-

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/FileIteratorTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/FileIteratorTest.java
deleted file mode 100644
index 38c4a60..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/FileIteratorTest.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.commons.vfs2;

-

-import java.util.Iterator;

-

-import org.junit.AfterClass;

-import org.junit.Assert;

-import org.junit.BeforeClass;

-import org.junit.Test;

-

-/**

- * Tests {@link FileObject}s with iterators its implementation the {@link Iterable} interface to allow a FileObject to be the target of the

- * Java 5 "foreach" statement.

- */

-public class FileIteratorTest

-{

-

-    private static FileObject BaseFolder;

-

-    private final static int FileCount = 14;

-

-    /**

-     * Creates a RAM FS.

-     *

-     * @throws Exception

-     */

-    @BeforeClass

-    public static void setUpClass() throws Exception

-    {

-        BaseFolder = VFS.getManager().resolveFile("ram://" + FileIteratorTest.class.getName());

-        BaseFolder.deleteAll();

-        BaseFolder.resolveFile("a.htm").createFile();

-        BaseFolder.resolveFile("a.html").createFile();

-        BaseFolder.resolveFile("a.xhtml").createFile();

-        BaseFolder.resolveFile("b.htm").createFile();

-        BaseFolder.resolveFile("b.html").createFile();

-        BaseFolder.resolveFile("b.xhtml").createFile();

-        BaseFolder.resolveFile("c.htm").createFile();

-        BaseFolder.resolveFile("c.html").createFile();

-        BaseFolder.resolveFile("c.xhtml").createFile();

-        BaseFolder.resolveFile("subdir1").createFolder();

-        BaseFolder.resolveFile("subdir1/subfile1.txt").createFile();

-        BaseFolder.resolveFile("subdir2").createFolder();

-        BaseFolder.resolveFile("subdir2/subfile1.txt").createFile();

-    }

-

-    /**

-     * Deletes RAM FS files.

-     *

-     * @throws Exception

-     */

-    @AfterClass

-    public static void tearDownClass() throws Exception

-    {

-        if (BaseFolder != null)

-        {

-            BaseFolder.deleteAll();

-        }

-    }

-

-    @Test

-    public void testIterator() throws FileSystemException

-    {

-        final FileObject[] findFiles = BaseFolder.findFiles(Selectors.SELECT_ALL);

-        Assert.assertEquals(FileCount, findFiles.length);

-        final FileObject[] listFiles = BaseFolder.getChildren();

-        Assert.assertTrue(FileCount > listFiles.length);

-        int i = 0;

-        for (final FileObject actualFile : BaseFolder)

-        {

-            final FileObject expectedFile = findFiles[i];

-            Assert.assertEquals(expectedFile, actualFile);

-            i++;

-        }

-        final Iterator<FileObject> iter = BaseFolder.iterator();

-        i = 0;

-        while (iter.hasNext())

-        {

-            final FileObject expectedFile = findFiles[i];

-            Assert.assertEquals(expectedFile, iter.next());

-            i++;

-        }

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/FileSystemExceptionTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/FileSystemExceptionTest.java
deleted file mode 100644
index e0e6bb8..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/FileSystemExceptionTest.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.commons.vfs2;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-
-/**
- * Tests the {@link FileSystemException}.
- */
-public class FileSystemExceptionTest {
-    /**
-     * Tests a {@link FileSystemException} containing info with a URL containing a complete
-     * basic authentication.
-     */
-    @Test
-    public void testMasksPasswordOfUrlsWithBasicAuthentication() {
-        final FileSystemException fse = new FileSystemException(
-            "vfs.provider/rename.error",
-            "file://test.bin", "http://foo:bar@junit.org/test.bin");
-
-        assertEquals("file://test.bin", fse.getInfo()[0]);
-        assertEquals("http://foo:***@junit.org/test.bin", fse.getInfo()[1]);
-    }
-
-    /**
-     * Tests a {@link FileSystemException} containing info with a URL containing only the user
-     * information.
-     */
-    @Test
-    public void testDoesNotModifyUrlsWithoutPassword() {
-        final FileSystemException fse = new FileSystemException(
-            "vfs.provider/delete.error", "http://foo@junit.org/test.bin");
-        assertEquals("http://foo@junit.org/test.bin", fse.getInfo()[0]);
-    }
-
-    /**
-     * Tests a {@link FileSystemException} containing info with a nested URL containing a
-     * complete basic authentication.
-     */
-    @Test
-    public void testProperDetectionOfUrl() {
-        final FileSystemException fse = new FileSystemException(
-            "vfs.provider/delete.error", "zip:http://foo:bar@junit.org/test.bin");
-        assertEquals("zip:http://foo:***@junit.org/test.bin", fse.getInfo()[0]);
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/FileSystemOptionsTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/FileSystemOptionsTest.java
deleted file mode 100644
index 211ec78..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/FileSystemOptionsTest.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.commons.vfs2;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * Check FileSystemOptions.
- * 
- * @since 2.1
- */
-public class FileSystemOptionsTest {
-
-    @Test
-    public void testEqualsHashCodeAndCompareTo() {
-        final JUnitConfigBuilder builder = JUnitConfigBuilder.getInstance();
-        final FileSystemOptions expected = new FileSystemOptions();
-        builder.setId(expected, "Test");
-        
-        final FileSystemOptions actual = new FileSystemOptions();
-        builder.setId(actual, "Test");
-        
-        Assert.assertEquals(expected, actual);
-        Assert.assertEquals(0, actual.compareTo(expected));
-        Assert.assertEquals(expected.hashCode(), actual.hashCode());
-
-        builder.setNames(expected, new String[]{"A", "B", "C"});
-        
-        Assert.assertNotEquals(expected, actual);
-        Assert.assertEquals(-1, actual.compareTo(expected));
-        Assert.assertNotEquals(expected.hashCode(), actual.hashCode());
-
-        builder.setNames(actual, new String[]{"A", "B", "C"});
-        
-        Assert.assertEquals(expected, actual);
-        Assert.assertEquals(0, actual.compareTo(expected));
-        Assert.assertEquals(expected.hashCode(), actual.hashCode());
-    }
-    
-    public static class JUnitConfigBuilder extends FileSystemConfigBuilder
-    {
-        private static final JUnitConfigBuilder BUILDER = new JUnitConfigBuilder();
-
-        public static JUnitConfigBuilder getInstance()
-        {
-            return BUILDER;
-        }
-
-        public void setId(final FileSystemOptions opts, final String id)
-        {
-            setParam(opts, "id", id);
-        }
-
-        public void setNames(final FileSystemOptions opts, final String[] names)
-        {
-            setParam(opts, "names", names);
-        }
-
-        @Override
-        protected Class<? extends FileSystem> getConfigClass()
-        {
-            return JUnitFS.class;
-        }
-
-        private abstract static class JUnitFS implements FileSystem
-        {
-        }
-    }
-   
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/FileTypeSelectorTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/FileTypeSelectorTest.java
deleted file mode 100644
index b304b39..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/FileTypeSelectorTest.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.commons.vfs2;

-

-import org.junit.AfterClass;

-import org.junit.Assert;

-import org.junit.BeforeClass;

-import org.junit.Test;

-

-/**

- * Tests FileTypeSelector.

- *

- * @since 2.1

- */

-public class FileTypeSelectorTest

-{

-    private static FileObject BaseFolder;

-

-    /**

-     * Creates a RAM FS.

-     *

-     * @throws Exception

-     */

-    @BeforeClass

-    public static void setUpClass() throws Exception

-    {

-        BaseFolder = VFS.getManager().resolveFile("ram://" + FileTypeSelectorTest.class.getName());

-        BaseFolder.resolveFile("root1.html").createFile();

-        BaseFolder.resolveFile("root2.html").createFile();

-        BaseFolder.resolveFile("f1/a.html").createFile();

-        BaseFolder.resolveFile("f2/b.html").createFile();

-        BaseFolder.resolveFile("f3/c.html").createFile();

-        BaseFolder.resolveFile("f4/").createFolder();

-        BaseFolder.resolveFile("f5/").createFolder();

-        BaseFolder.resolveFile("f6/f7").createFolder();

-    }

-

-    /**

-     * Deletes RAM FS files.

-     *

-     * @throws Exception

-     */

-    @AfterClass

-    public static void tearDownClass() throws Exception

-    {

-        if (BaseFolder != null)

-        {

-            BaseFolder.deleteAll();

-        }

-    }

-

-    @Test

-    public void testFileOrFolders() throws Exception

-    {

-        final FileSelector selector = new FileTypeSelector(FileType.FILE_OR_FOLDER);

-        final FileObject[] foList = BaseFolder.findFiles(selector);

-        // Why 0?

-        Assert.assertEquals(0, foList.length);

-    }

-

-    @Test

-    public void testFiles() throws Exception

-    {

-        final FileSelector selector = new FileTypeSelector(FileType.FILE);

-        final FileObject[] foList = BaseFolder.findFiles(selector);

-        Assert.assertEquals(5, foList.length);

-    }

-

-    @Test

-    public void testFolders() throws Exception

-    {

-        final FileSelector selector = new FileTypeSelector(FileType.FOLDER);

-        final FileObject[] foList = BaseFolder.findFiles(selector);

-        Assert.assertEquals(8, foList.length);

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/FileTypeTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/FileTypeTest.java
deleted file mode 100644
index f8f22ac..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/FileTypeTest.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.commons.vfs2;
-
-import java.io.Serializable;
-
-import org.apache.commons.lang3.SerializationUtils;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * Sanity check that a custom enum can be properly serialized and deserialized on a give JRE.
- * 
- * @since 2.1
- */
-public class FileTypeTest {
-
-    private static class Fixture implements Serializable {
-        private static final long serialVersionUID = 1L;
-        private final FileType fileType = FileType.FILE;
-
-        public FileType getFileType() {
-            return this.fileType;
-        }
-
-    }
-
-    @Test
-    public void testSerializationFile() {
-        test(FileType.FILE);
-    }
-
-    @Test
-    public void testSerializationContainer() {
-        final Fixture expectedFixture = new Fixture();
-        final byte[] serialized = SerializationUtils.serialize(expectedFixture);
-        final Fixture actualFixture = (Fixture) SerializationUtils.deserialize(serialized);
-        assertEquals(expectedFixture.getFileType(), actualFixture.getFileType());
-    }
-
-    @Test
-    public void testSerializationFileOrFolder() {
-        test(FileType.FILE_OR_FOLDER);
-    }
-
-    @Test
-    public void testSerializationFolder() {
-        test(FileType.FOLDER);
-    }
-
-    @Test
-    public void testSerializationImaginary() {
-        test(FileType.IMAGINARY);
-    }
-
-    private void test(final FileType expected) {
-        final byte[] serialized = SerializationUtils.serialize(expected);
-        final FileType actualFileType = (FileType) SerializationUtils.deserialize(serialized);
-        assertEquals(expected, actualFileType);
-    }
-
-    private void assertEquals(final FileType expected, final FileType actualFileType) {
-        Assert.assertEquals(expected.getName(), actualFileType.getName());
-        Assert.assertEquals(expected.hasAttributes(), actualFileType.hasAttributes());
-        Assert.assertEquals(expected.hasChildren(), actualFileType.hasChildren());
-        Assert.assertEquals(expected.hasContent(), actualFileType.hasContent());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/PatternFileSelectorTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/PatternFileSelectorTest.java
deleted file mode 100644
index 6fc2d48..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/PatternFileSelectorTest.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.commons.vfs2;

-

-import java.util.Arrays;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.junit.AfterClass;

-import org.junit.Assert;

-import org.junit.BeforeClass;

-import org.junit.Test;

-

-/**

- * Tests FileExtensionSelector.

- *

- * @since 2.1

- */

-public class PatternFileSelectorTest

-{

-    private static FileObject BaseFolder;

-

-    /**

-     * 9 files and 1 directory = 10

-     */

-    private static final int EntryCount = 10;

-

-    private static final int ExtensionCount = 3;

-

-    private static final int FilesPerExtensionCount = 3;

-

-    /**

-     * Creates a RAM FS.

-     *

-     * @throws Exception

-     */

-    @BeforeClass

-    public static void setUpClass() throws Exception

-    {

-        BaseFolder = VFS.getManager().resolveFile("ram://" + PatternFileSelectorTest.class.getName());

-        BaseFolder.deleteAll();

-        BaseFolder.createFolder();

-        BaseFolder.resolveFile("a.htm").createFile();

-        BaseFolder.resolveFile("a.html").createFile();

-        BaseFolder.resolveFile("a.xhtml").createFile();

-        BaseFolder.resolveFile("b.htm").createFile();

-        BaseFolder.resolveFile("b.html").createFile();

-        BaseFolder.resolveFile("b.xhtml").createFile();

-        BaseFolder.resolveFile("c.htm").createFile();

-        BaseFolder.resolveFile("c.html").createFile();

-        BaseFolder.resolveFile("c.xhtml").createFile();

-    }

-

-    /**

-     * Deletes RAM FS files.

-     *

-     * @throws Exception

-     */

-    @AfterClass

-    public static void tearDownClass() throws Exception

-    {

-        if (BaseFolder != null)

-        {

-            BaseFolder.deleteAll();

-        }

-    }

-

-    /**

-     * Tests a null selector.

-     *

-     * @throws Exception

-     */

-    @Test(expected = NullPointerException.class)

-    public void testNullString() throws Exception

-    {

-        // Yep, this will blow up.

-        new PatternFileSelector((String) null);

-    }

-

-    /**

-     * Tests matching all

-     *

-     * @throws Exception

-     */

-    @Test

-    public void testMatchAll() throws Exception

-    {

-        final FileObject[] list = BaseFolder.findFiles(new PatternFileSelector(".*"));

-        Assert.assertEquals(EntryCount, list.length);

-    }

-

-    /**

-     * Tests a one extension selector.

-     *

-     * @throws Exception

-     */

-    @Test

-    public void testFileExtensions() throws Exception

-    {

-        final FileObject[] foArray = BaseFolder.findFiles(Selectors.SELECT_FILES);

-        Assert.assertTrue(foArray.length > 0);

-        final String regExPrefix = ".*\\.";

-        // gather file extensions.

-        final Set<String> extensionSet = new HashSet<String>();

-        for (final FileObject fo : foArray)

-        {

-            extensionSet.add(regExPrefix + fo.getName().getExtension());

-        }

-        final String message = String.format("Extensions: %s; files: %s", extensionSet.toString(),

-                Arrays.asList(foArray).toString());

-        Assert.assertEquals(message, ExtensionCount, extensionSet.size());

-        // check each extension

-        for (final String extension : extensionSet)

-        {

-            final FileSelector selector = new PatternFileSelector(extension);

-            final FileObject[] list = BaseFolder.findFiles(selector);

-            Assert.assertEquals(FilesPerExtensionCount, list.length);

-        }

-        // check each file against itself

-        for (final FileObject fo : foArray)

-        {

-            final FileSelector selector = new PatternFileSelector(regExPrefix + fo.getName().getExtension());

-            final FileObject[] list = BaseFolder.findFiles(selector);

-            Assert.assertEquals(FilesPerExtensionCount, list.length);

-        }

-    }

-

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/RunTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/RunTest.java
deleted file mode 100644
index 18a6254..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/RunTest.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.commons.vfs2;
-
-import java.util.Properties;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.Test;
-import junit.framework.TestResult;
-
-public class RunTest
-{
-    public static void main(final String[] args) throws Exception
-    {
-        final String ip = "192.168.0.128";
-
-        final Properties props = System.getProperties();
-        props.setProperty("test.data.src", "src/test-data");
-        props.setProperty("test.basedir", "core/target/test-classes/test-data");
-        props.setProperty("test.basedir.res", "test-data");
-        props.setProperty("test.policy", "src/test-data/test.policy");
-        props.setProperty("test.secure", "false");
-        props.setProperty("test.smb.uri",
-                "smb://HOME\\vfsusr:vfs%2f%25\\te:st@" + ip  + "/vfsusr/vfstest");
-        props.setProperty("test.ftp.uri",
-                "ftp://vfsusr:vfs%2f%25\\te:st@" + ip + "/vfstest");
-        props.setProperty("test.ftps.uri",
-                "ftps://vfsusr:vfs%2f%25\\te:st@" + ip + "/vfstest");
-
-        props.setProperty("test.http.uri", "http://" + ip + "/vfstest");
-        props.setProperty("test.webdav.uri",
-                "webdav://vfsusr:vfs%2f%25\\te:st@" + ip + "/vfstest");
-        props.setProperty("test.sftp.uri",
-                "sftp://vfsusr:vfs%2f%25\\te:st@" + ip + "/vfstest");
-
-        final Test tests[] = new Test[]
-        {
-//          LocalProviderTestCase.suite(),
-//          FtpProviderTestCase.suite(),
-//          UrlProviderHttpTestCase.suite(),
-//          VirtualProviderTestCase.suite(),
-//          TemporaryProviderTestCase.suite(),
-//          UrlProviderTestCase.suite(),
-//          ResourceProviderTestCase.suite(),
-//          HttpProviderTestCase.suite(),
-//          SftpProviderTestCase.suite(),
-//          JarProviderTestCase.suite(),
-//          NestedJarTestCase.suite(),
-//          ZipProviderTestCase.suite(),
-//          NestedZipTestCase.suite(),
-//          TarProviderTestCase.suite(),
-//          TgzProviderTestCase.suite(),
-//          Tbz2ProviderTestCase.suite(),
-//          NestedTarTestCase.suite(),
-//          NestedTgzTestCase.suite(),
-//          NestedTbz2TestCase.suite(),
-//          RamProviderTestCase.suite(),
-
-// SmbProviderTestCase.suite(),
-// WebdavProviderTestCase.suite(),
-        };
-
-        final TestResult result = new TestResult()
-        {
-            @Override
-            public void startTest(final Test test)
-            {
-                System.out.println("start " + test);
-                System.out.flush();
-            }
-
-            @Override
-            public void endTest(final Test test)
-            {
-                // System.err.println("end " + test);
-            }
-
-            @Override
-            public synchronized void addError(final Test test, final Throwable throwable)
-            {
-                // throw new RuntimeException(throwable.getMessage());
-                throwable.printStackTrace();
-            }
-
-            @Override
-            public synchronized void addFailure(final Test test,
-                    final AssertionFailedError assertionFailedError)
-            {
-                // throw new RuntimeException(assertionFailedError.getMessage());
-                assertionFailedError.printStackTrace();
-            }
-        };
-
-        for (int i = 0; i < tests.length; i++)
-        {
-            System.out.println("start test#" + i);
-            System.out.flush();
-
-            final Test test = tests[i];
-            test.run(result);
-
-            // break;
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/UserAuthenticationDataTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/UserAuthenticationDataTestCase.java
deleted file mode 100644
index 96f3aeb..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/UserAuthenticationDataTestCase.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.commons.vfs2;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-
-import org.junit.Test;
-
-public class UserAuthenticationDataTestCase
-{
-    @Test
-    public void testCharacterBasedData()
-    {
-        final UserAuthenticationData data = new UserAuthenticationData();
-        final char[] array = "PMC".toCharArray();
-        data.setData(UserAuthenticationData.USERNAME, array);
-        data.setData(UserAuthenticationData.DOMAIN, "Apache".toCharArray());
-        assertSame(array, data.getData(UserAuthenticationData.USERNAME));
-        assertArrayEquals("Apache".toCharArray(), data.getData(UserAuthenticationData.DOMAIN));
-        data.setData(UserAuthenticationData.DOMAIN, "Apache Commons".toCharArray());
-        assertArrayEquals("Apache Commons".toCharArray(), data.getData(UserAuthenticationData.DOMAIN));
-        assertNull(data.getData(UserAuthenticationData.PASSWORD));
-
-        data.cleanup();
-        assertNull(data.getData(UserAuthenticationData.USERNAME));
-        assertNull(data.getData(UserAuthenticationData.DOMAIN));
-        final char[] nulls = {0,0,0};
-        assertArrayEquals(nulls, array);
-    }
-
-    @Test
-    public void testCustomType()
-    {
-        final UserAuthenticationData.Type type = new UserAuthenticationData.Type("JUNIT");
-        final UserAuthenticationData data = new UserAuthenticationData();
-        final char[] array = "test".toCharArray();
-        data.setData(type, array);
-        assertSame(array, data.getData(type));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/auth/StaticUserAuthenticatorTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/auth/StaticUserAuthenticatorTestCase.java
deleted file mode 100644
index e247549..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/auth/StaticUserAuthenticatorTestCase.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.commons.vfs2.auth;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNull;
-
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.UserAuthenticator;
-import org.junit.Test;
-
-public class StaticUserAuthenticatorTestCase
-{
-    @Test
-    public void testAuthenticationRequest()
-    {
-        final UserAuthenticator userAuthenticator = new StaticUserAuthenticator("DOMAIN", "USER", "PWD");
-        UserAuthenticationData authenticationData =
-            userAuthenticator.requestAuthentication(ArrayUtils.toArray(UserAuthenticationData.DOMAIN));
-        assertArrayEquals("DOMAIN".toCharArray(), authenticationData.getData(UserAuthenticationData.DOMAIN));
-        assertNull(authenticationData.getData(UserAuthenticationData.USERNAME));
-        assertNull(authenticationData.getData(UserAuthenticationData.PASSWORD));
-        authenticationData = userAuthenticator.requestAuthentication(
-            ArrayUtils.toArray(UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD));
-        assertNull(authenticationData.getData(UserAuthenticationData.DOMAIN));
-        assertArrayEquals("USER".toCharArray(), authenticationData.getData(UserAuthenticationData.USERNAME));
-        assertArrayEquals("PWD".toCharArray(), authenticationData.getData(UserAuthenticationData.PASSWORD));
-    }
-
-    @Test
-    public void testEquality()
-    {
-        final UserAuthenticator userAuthenticator = new StaticUserAuthenticator("DOMAIN", "USER", "PWD");
-        assertEquals(new StaticUserAuthenticator("DOMAIN", "USER", "PWD"), userAuthenticator);
-        assertNotEquals(new StaticUserAuthenticator("DOMAIN", "USER", null), userAuthenticator);
-        assertNotEquals(new StaticUserAuthenticator("DOMAIN", null, "PWD"), userAuthenticator);
-        assertNotEquals(new StaticUserAuthenticator(null, "USER", "PWD"), userAuthenticator);
-        assertEquals(new StaticUserAuthenticator("DOMAIN", "USER", "PWD").hashCode(), userAuthenticator.hashCode());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/DefaultFilesCacheTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/DefaultFilesCacheTestCase.java
deleted file mode 100644
index c59abb3..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/DefaultFilesCacheTestCase.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.commons.vfs2.cache;

-

-import java.io.File;

-

-import junit.framework.Test;

-

-import org.apache.commons.AbstractVfsTestCase;

-import org.apache.commons.vfs2.FileObject;

-import org.apache.commons.vfs2.FileSystemManager;

-import org.apache.commons.vfs2.FilesCache;

-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;

-import org.apache.commons.vfs2.test.CacheTestSuite;

-import org.apache.commons.vfs2.test.ProviderTestConfig;

-

-/**

- * Tests the {@link DefaultFilesCache} using {@link DefaultFilesCacheTests}.

- */

-public class DefaultFilesCacheTestCase

-    extends AbstractProviderTestConfig

-    implements ProviderTestConfig

-{

-    public static Test suite() throws Exception

-    {

-        final CacheTestSuite suite = new CacheTestSuite(new DefaultFilesCacheTestCase());

-        suite.addTests(DefaultFilesCacheTests.class);

-        return suite;

-    }

-

-    @Override

-    public FilesCache getFilesCache()

-    {

-        return new DefaultFilesCache();

-    }

-

-    @Override

-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception

-    {

-        final File testDir = AbstractVfsTestCase.getTestDirectoryFile();

-        return manager.toFileObject(testDir);

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/DefaultFilesCacheTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/DefaultFilesCacheTests.java
deleted file mode 100644
index 22999db..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/DefaultFilesCacheTests.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.commons.vfs2.cache;

-

-import org.apache.commons.vfs2.FileObject;

-

-/**

- * Tests for {@link DefaultFilesCache} used by {@link DefaultFilesCacheTestCase}.

- */

-public class DefaultFilesCacheTests extends FilesCacheTestsBase

-{

-    public void testFilesCache() throws Exception

-    {

-        final FileObject scratchFolder = getWriteFolder();

-

-        final FileObject dir1 = scratchFolder.resolveFile("dir1");

-        final FileObject dir1_2 = scratchFolder.resolveFile("dir1");

-

-        assertSame(dir1, dir1_2);

-

-        // now the same test, unreferenced (compare only hashCode)

-        int hc1 = getFileHashCode();

-        int hc2 = getFileHashCode();

-        assertEquals("Hashcode of file changed, so most likely new instance", hc1, hc2);

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/FilesCacheTestsBase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/FilesCacheTestsBase.java
deleted file mode 100644
index 20cc13d..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/FilesCacheTestsBase.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.commons.vfs2.cache;

-

-import org.apache.commons.vfs2.FileName;

-import org.apache.commons.vfs2.FileObject;

-import org.apache.commons.vfs2.FileSystem;

-import org.apache.commons.vfs2.FileSystemException;

-import org.apache.commons.vfs2.FilesCache;

-import org.apache.commons.vfs2.test.AbstractProviderTestCase;

-import org.apache.commons.vfs2.test.CacheTestSuite;

-

-/**

- * Base class for different FilesCache tests.

- * <p>

- * Make sure {@link CacheTestSuite} is configured

- * with correct FilesCache.

- */

-public class FilesCacheTestsBase extends AbstractProviderTestCase

-{

-    /**

-     * Will test if the cache is cleared and if it is still useable afterwards.

-     * It will actually ensure the test is hitting the cache.

-     */

-    public void testClearFiles() throws Exception

-    {

-        FilesCache cache = getManager().getFilesCache();

-

-        final FileObject fo1 = getWriteFolder().resolveFile("dir1");

-

-        // clean the cache for this file system

-        cache.clear(fo1.getFileSystem());

-        // make sure a empty cache clean does not fail

-        cache.clear(fo1.getFileSystem());

-

-        final FileObject fo2 = getWriteFolder().resolveFile("dir1");

-

-        assertFalse("Objects after cache clear should be different", fo1 == fo2);

-    }

-

-    /**

-     * Basic Cache operations, work for all caches

-     * (besides {@link NullFilesCache#testBasicCacheOps() NullFilesCache}).

-     */

-    public void testBasicCacheOps() throws Exception

-    {

-        final FilesCache cache = getManager().getFilesCache();

-        final FileObject fo = getWriteFolder().resolveFile("dir1");

-        final FileName fn = fo.getName();

-        final FileSystem fs = fo.getFileSystem();

-

-        cache.clear(fs);

-        assertNull(cache.getFile(fs, fn));

-

-        cache.putFile(fo);

-        assertSame(fo, cache.getFile(fs, fn));

-

-        assertFalse(cache.putFileIfAbsent(fo));

-        cache.clear(fs);

-        assertNull(cache.getFile(fs, fn));

-        assertTrue(cache.putFileIfAbsent(fo));

-

-        cache.removeFile(fs, fn);

-        assertNull(cache.getFile(fs, fn));

-        assertTrue(cache.putFileIfAbsent(fo));

-    }

-

-    /** Helper method, may be used in cache specific tests. */

-    protected int getFileHashCode() throws FileSystemException

-    {

-        final FileObject fo = getWriteFolder().resolveFile("file2");

-        if (!fo.exists())

-        {

-            fo.createFile();

-        }

-

-        return fo.hashCode();

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/LRUFilesCacheTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/LRUFilesCacheTestCase.java
deleted file mode 100644
index a34d349..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/LRUFilesCacheTestCase.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.commons.vfs2.cache;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FilesCache;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.CacheTestSuite;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-
-/**
- * Tests the {@link LRUFilesCache} using {@link LRUFilesCacheTestss}.
- */
-public class LRUFilesCacheTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    public static Test suite() throws Exception
-    {
-        final CacheTestSuite suite = new CacheTestSuite(new LRUFilesCacheTestCase());
-        suite.addTests(LRUFilesCacheTests.class);
-        return suite;
-    }
-
-    @Override
-    public FilesCache getFilesCache()
-    {
-        return new LRUFilesCache(5);
-    }
-
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final File testDir = AbstractVfsTestCase.getTestDirectoryFile();
-        return manager.toFileObject(testDir);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/LRUFilesCacheTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/LRUFilesCacheTests.java
deleted file mode 100644
index 070ca26..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/LRUFilesCacheTests.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.commons.vfs2.cache;
-
-import org.apache.commons.vfs2.FileObject;
-
-/**
- * Tests for {@link LRUFilesCache} used by {@link LRUFilesCacheTestCase}.
- */
-public class LRUFilesCacheTests extends FilesCacheTestsBase
-{
-    public void testFilesCache() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-
-        // releaseable
-        final FileObject dir1 = scratchFolder.resolveFile("dir1");
-
-        // avoid cache removal
-        final FileObject dir2 = scratchFolder.resolveFile("dir2");
-        dir2.getContent();
-
-        // releaseable
-        @SuppressWarnings("unused")
-        final
-        FileObject dir3 = scratchFolder.resolveFile("dir3");
-
-        // releaseable
-        @SuppressWarnings("unused")
-        final
-        FileObject dir4 = scratchFolder.resolveFile("dir4");
-
-        // releaseable
-        @SuppressWarnings("unused")
-        final
-        FileObject dir5 = scratchFolder.resolveFile("dir5");
-
-        // releaseable
-        @SuppressWarnings("unused")
-        final
-        FileObject dir6 = scratchFolder.resolveFile("dir6");
-
-        // releaseable
-        @SuppressWarnings("unused")
-        final
-        FileObject dir7 = scratchFolder.resolveFile("dir7");
-
-        // releaseable
-        @SuppressWarnings("unused")
-        final
-        FileObject dir8 = scratchFolder.resolveFile("dir8");
-
-        // check if the cache still holds the right instance
-        final FileObject dir2_2 = scratchFolder.resolveFile("dir2");
-        assertTrue(dir2 == dir2_2);
-
-        // check if the cache still holds the right instance
-        final FileObject dir1_2 = scratchFolder.resolveFile("dir1");
-        assertFalse(dir1 == dir1_2);
-    }
-
-    public void testClass()
-    {
-        assertTrue(getManager().getFilesCache() instanceof LRUFilesCache);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/NullFilesCacheTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/NullFilesCacheTestCase.java
deleted file mode 100644
index 60bdb05..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/NullFilesCacheTestCase.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.commons.vfs2.cache;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FilesCache;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.CacheTestSuite;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-
-/**
- * Tests the {@link NullFilesCache} using {@link NullFilesCacheTests}.
- */
-public class NullFilesCacheTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    public static Test suite() throws Exception
-    {
-        final CacheTestSuite suite = new CacheTestSuite(new NullFilesCacheTestCase());
-        suite.addTests(NullFilesCacheTests.class);
-        return suite;
-    }
-
-    @Override
-    public FilesCache getFilesCache()
-    {
-        return new NullFilesCache();
-    }
-
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final File testDir = AbstractVfsTestCase.getTestDirectoryFile();
-        return manager.toFileObject(testDir);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/NullFilesCacheTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/NullFilesCacheTests.java
deleted file mode 100644
index cf2e48d..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/NullFilesCacheTests.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.commons.vfs2.cache;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FilesCache;
-
-/**
- * Tests for {@link NullFilesCache} used by {@link NullFilesCacheTestCase}.
- */
-public class NullFilesCacheTests extends FilesCacheTestsBase
-{
-    public void testFilesCache() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-
-        final FileObject dir1 = scratchFolder.resolveFile("dir1");
-        final FileObject dir1_2 = scratchFolder.resolveFile("dir1");
-
-        assertFalse("Should always be new instance with NullCache", dir1 == dir1_2);
-    }
-
-    @Override
-    public void testBasicCacheOps() throws Exception
-    {
-        // the basic test looks different for a null cache:
-
-        final FilesCache cache = getManager().getFilesCache();
-        final FileObject fo = getWriteFolder().resolveFile("dir1");
-        final FileName fn = fo.getName();
-        final FileSystem fs = fo.getFileSystem();
-
-        cache.clear(fs);
-        assertNull(cache.getFile(fs, fn));
-
-        cache.putFile(fo);
-        assertNull(null, cache.getFile(fs, fn));
-
-        assertFalse(cache.putFileIfAbsent(fo)); // hmmm?
-        assertNull(null, cache.getFile(fs, fn));
-
-        cache.removeFile(fs, fn);
-        assertNull(cache.getFile(fs, fn));
-    }
-
-
-    public void testClass()
-    {
-        assertTrue(getManager().getFilesCache() instanceof NullFilesCache);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/SoftRefFilesCacheTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/SoftRefFilesCacheTestCase.java
deleted file mode 100644
index 788dcf4..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/SoftRefFilesCacheTestCase.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.commons.vfs2.cache;

-

-import java.io.File;

-

-import junit.framework.Test;

-

-import org.apache.commons.AbstractVfsTestCase;

-import org.apache.commons.vfs2.FileObject;

-import org.apache.commons.vfs2.FileSystemManager;

-import org.apache.commons.vfs2.FilesCache;

-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;

-import org.apache.commons.vfs2.test.CacheTestSuite;

-import org.apache.commons.vfs2.test.ProviderTestConfig;

-

-/**

- * Tests the {@link SoftRefFilesCache} using {@link SoftRefFilesCacheTests}.

- */

-public class SoftRefFilesCacheTestCase

-    extends AbstractProviderTestConfig

-    implements ProviderTestConfig

-{

-    public static Test suite() throws Exception

-    {

-        final CacheTestSuite suite = new CacheTestSuite(new SoftRefFilesCacheTestCase());

-        suite.addTests(SoftRefFilesCacheTests.class);

-        return suite;

-    }

-

-    @Override

-    public FilesCache getFilesCache()

-    {

-        return new SoftRefFilesCache();

-    }

-

-    @Override

-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception

-    {

-        final File testDir = AbstractVfsTestCase.getTestDirectoryFile();

-        return manager.toFileObject(testDir);

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/SoftRefFilesCacheTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/SoftRefFilesCacheTests.java
deleted file mode 100644
index 23cd366..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/SoftRefFilesCacheTests.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.commons.vfs2.cache;

-

-import org.apache.commons.vfs2.FileObject;

-

-/**

- * Tests for {@link SoftRefFilesCache} used by {@link SoftRefFilesCacheTestCase}.

- */

-public class SoftRefFilesCacheTests extends FilesCacheTestsBase

-{

-    public void testFilesCache() throws Exception

-    {

-        final FileObject scratchFolder = getWriteFolder();

-

-        final FileObject dir1 = scratchFolder.resolveFile("dir1");

-        final FileObject dir1_2 = scratchFolder.resolveFile("dir1");

-

-        // since both are still referenced they are not purged

-        assertSame(dir1, dir1_2);

-    }

-

-    public void testClass()

-    {

-        assertTrue(getManager().getFilesCache() instanceof SoftRefFilesCache);

-    }

-

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/WeakRefFilesCacheTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/WeakRefFilesCacheTestCase.java
deleted file mode 100644
index 01882f9..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/WeakRefFilesCacheTestCase.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.commons.vfs2.cache;

-

-import java.io.File;

-

-import junit.framework.Test;

-

-import org.apache.commons.AbstractVfsTestCase;

-import org.apache.commons.vfs2.FileObject;

-import org.apache.commons.vfs2.FileSystemManager;

-import org.apache.commons.vfs2.FilesCache;

-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;

-import org.apache.commons.vfs2.test.CacheTestSuite;

-import org.apache.commons.vfs2.test.ProviderTestConfig;

-

-/**

- * Tests the {@link WeakRefFilesCache} using {@link WeakRefFilesCacheTests}.

- */

-public class WeakRefFilesCacheTestCase

-    extends AbstractProviderTestConfig

-    implements ProviderTestConfig

-{

-    public static Test suite() throws Exception

-    {

-        final CacheTestSuite suite = new CacheTestSuite(new WeakRefFilesCacheTestCase());

-        suite.addTests(WeakRefFilesCacheTests.class);

-        return suite;

-    }

-

-    @Override

-    public FilesCache getFilesCache()

-    {

-        return new WeakRefFilesCache();

-    }

-

-    @Override

-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception

-    {

-        final File testDir = AbstractVfsTestCase.getTestDirectoryFile();

-        return manager.toFileObject(testDir);

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/WeakRefFilesCacheTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/cache/WeakRefFilesCacheTests.java
deleted file mode 100644
index f0ef1c6..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/cache/WeakRefFilesCacheTests.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.commons.vfs2.cache;

-

-import org.apache.commons.vfs2.FileObject;

-

-/**

- * Tests for {@link WeakRefFilesCache} used by {@link WeakRefFilesCacheTestCase}.

- */

-public class WeakRefFilesCacheTests extends FilesCacheTestsBase

-{

-    public void testFilesCache() throws Exception

-    {

-        final FileObject scratchFolder = getWriteFolder();

-

-        final FileObject dir1 = scratchFolder.resolveFile("dir1");

-        final FileObject dir1_2 = scratchFolder.resolveFile("dir1");

-

-        // since both are still referenced they are not purged

-        assertSame(dir1, dir1_2);

-    }

-

-    public void testClass()

-    {

-        assertTrue(getManager().getFilesCache() instanceof WeakRefFilesCache);

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/impl/test/DefaultFileMonitorTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/impl/test/DefaultFileMonitorTests.java
deleted file mode 100644
index 9325a34..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/impl/test/DefaultFileMonitorTests.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.commons.vfs2.impl.test;
-
-import java.io.File;
-import java.io.FileWriter;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileChangeEvent;
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.VFS;
-import org.apache.commons.vfs2.impl.DefaultFileMonitor;
-
-/**
- * Test to verify DefaultFileMonitor
- */
-public class DefaultFileMonitorTests extends AbstractVfsTestCase
-{
-    private FileSystemManager fsManager;
-    private File testDir;
-    private int changeStatus = 0;
-    private File testFile;
-
-    @Override
-    public void setUp() throws Exception
-    {
-        super.setUp();
-        fsManager = VFS.getManager();
-        testDir = AbstractVfsTestCase.getTestDirectoryFile();
-        changeStatus = 0;
-        testFile = new File(testDir, "testReload.properties");
-
-        if (testFile.exists())
-        {
-            testFile.delete();
-        }
-    }
-
-    @Override
-    public void tearDown() throws Exception
-    {
-        if (testFile != null && testFile.exists())
-        {
-            testFile.delete();
-        }
-        super.tearDown();
-    }
-
-    public void testFileCreated() throws Exception
-    {
-        final FileObject fileObj = fsManager.resolveFile(testFile.toURI().toURL().toString());
-        final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-        // TestFileListener manipulates changeStatus
-        monitor.setDelay(100);
-        monitor.addFile(fileObj);
-        monitor.start();
-        try
-        {
-            writeToFile(testFile);
-            Thread.sleep(300);
-            assertTrue("No event occurred", changeStatus != 0);
-            assertTrue("Incorrect event", changeStatus == 3);
-        } finally {
-            monitor.stop();
-        }
-    }
-
-    public void testFileDeleted() throws Exception
-    {
-        writeToFile(testFile);
-        final FileObject fileObj = fsManager.resolveFile(testFile.toURI().toString());
-        final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-        // TestFileListener manipulates changeStatus
-        monitor.setDelay(100);
-        monitor.addFile(fileObj);
-        monitor.start();
-        try
-        {
-            testFile.delete();
-            Thread.sleep(300);
-            assertTrue("No event occurred", changeStatus != 0);
-            assertTrue("Incorrect event", changeStatus == 2);
-        } finally {
-            monitor.stop();
-        }
-    }
-
-    public void testFileModified() throws Exception
-    {
-        writeToFile(testFile);
-        final FileObject fileObj = fsManager.resolveFile(testFile.toURI().toURL().toString());
-        final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-        // TestFileListener manipulates changeStatus
-        monitor.setDelay(100);
-        monitor.addFile(fileObj);
-        monitor.start();
-        try
-        {
-            // Need a long delay to insure the new timestamp doesn't truncate to be the same as
-            // the current timestammp. Java only guarantees the timestamp will be to 1 second.
-            Thread.sleep(1000);
-            final long value = System.currentTimeMillis();
-            final boolean rc = testFile.setLastModified(value);
-            assertTrue("setLastModified succeeded",rc);
-            Thread.sleep(300);
-            assertTrue("No event occurred", changeStatus != 0);
-            assertTrue("Incorrect event", changeStatus == 1);
-        } finally {
-            monitor.stop();
-        }
-    }
-
-
-    public void testFileRecreated() throws Exception
-    {
-        final FileObject fileObj = fsManager.resolveFile(testFile.toURI().toURL().toString());
-        final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-        // TestFileListener manipulates changeStatus
-        monitor.setDelay(100);
-        monitor.addFile(fileObj);
-        monitor.start();
-        try
-        {
-            writeToFile(testFile);
-            Thread.sleep(300);
-            assertTrue("No event occurred", changeStatus != 0);
-            assertTrue("Incorrect event " + changeStatus, changeStatus == 3);
-            changeStatus = 0;
-            testFile.delete();
-            Thread.sleep(300);
-            assertTrue("No event occurred", changeStatus != 0);
-            assertTrue("Incorrect event " + changeStatus, changeStatus == 2);
-            changeStatus = 0;
-            Thread.sleep(500);
-            monitor.addFile(fileObj);
-            writeToFile(testFile);
-            Thread.sleep(300);
-            assertTrue("No event occurred", changeStatus != 0);
-            assertTrue("Incorrect event " + changeStatus, changeStatus == 3);
-        } finally {
-            monitor.stop();
-        }
-    }
-
-    public void testChildFileRecreated() throws Exception
-    {
-        writeToFile(testFile);
-        final FileObject fileObj = fsManager.resolveFile(testDir.toURI().toURL().toString());
-        final DefaultFileMonitor monitor = new DefaultFileMonitor(new TestFileListener());
-        monitor.setDelay(2000);
-        monitor.addFile(fileObj);
-        monitor.start();
-        try
-        {
-            changeStatus = 0;
-            Thread.sleep(300);
-            testFile.delete();
-            Thread.sleep(3000);
-            assertTrue("No event occurred", changeStatus != 0);
-            assertTrue("Incorrect event " + changeStatus, changeStatus == 2);
-            changeStatus = 0;
-            Thread.sleep(300);
-            writeToFile(testFile);
-            Thread.sleep(3000);
-            assertTrue("No event occurred", changeStatus != 0);
-            assertTrue("Incorrect event " + changeStatus, changeStatus == 3);
-        } finally {
-            monitor.stop();
-        }
-    }
-
-    private void writeToFile(final File file) throws Exception
-    {
-        final FileWriter out = new FileWriter(file);
-        out.write("string=value1");
-        out.close();
-    }
-
-
-    public class TestFileListener implements FileListener
-    {
-        @Override
-        public void fileChanged(final FileChangeEvent event) throws Exception
-        {
-            changeStatus = 1;
-        }
-
-        @Override
-        public void fileDeleted(final FileChangeEvent event) throws Exception
-        {
-            changeStatus = 2;
-        }
-
-        @Override
-        public void fileCreated(final FileChangeEvent event) throws Exception
-        {
-            changeStatus = 3;
-        }
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/impl/test/DefaultFileSystemManagerTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/impl/test/DefaultFileSystemManagerTest.java
deleted file mode 100644
index 4c9affa..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/impl/test/DefaultFileSystemManagerTest.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.commons.vfs2.impl.test;
-
-import java.io.File;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.VFS;
-import org.junit.Test;
-
-public class DefaultFileSystemManagerTest
-{
-    @Test(expected = NullPointerException.class)
-    public void testResolveFileRelativeThrows() throws FileSystemException
-    {
-        VFS.getManager().resolveFile((File) null, "relativePath");
-    }
-
-    /**
-     * Even if the file name is absolute, the base file must be given. This is
-     * an inconsistency in the API, but it is documented as such.
-     *
-     * @see "VFS-519"
-     */
-    @Test(expected = NullPointerException.class)
-    public void testResolveFileAbsoluteThrows() throws FileSystemException
-    {
-        String absolute = new File("/").getAbsoluteFile().toURI().toString();
-        VFS.getManager().resolveFile((File) null, absolute);
-    }
-
-    @Test(expected = FileSystemException.class)
-    public void testResolveFileObjectRelativeThrows() throws FileSystemException
-    {
-        VFS.getManager().resolveFile((FileObject) null, "relativePath");
-    }
-
-    @Test
-    public void testResolveFileObjectNullAbsolute() throws FileSystemException
-    {
-        String absolute = new File("/").getAbsoluteFile().toURI().toString();
-        VFS.getManager().resolveFile((FileObject) null, absolute);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/impl/test/VfsClassLoaderTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/impl/test/VfsClassLoaderTests.java
deleted file mode 100644
index 84a4af3..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/impl/test/VfsClassLoaderTests.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.commons.vfs2.impl.test;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Collections;
-import java.util.Enumeration;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.impl.VFSClassLoader;
-import org.apache.commons.vfs2.test.AbstractProviderTestCase;
-
-/**
- * VfsClassLoader test cases.
- */
-public class VfsClassLoaderTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-            Capability.READ_CONTENT,
-            Capability.URI
-        };
-    }
-
-    /**
-     * Creates the classloader to use when testing.
-     */
-    private VFSClassLoader createClassLoader() throws FileSystemException
-    {
-        final FileObject file = getBaseFolder();
-        return new VFSClassLoader(file, getManager());
-    }
-
-    /**
-     * Tests loading a class.
-     */
-    public void testLoadClass() throws Exception
-    {
-        final VFSClassLoader loader = createClassLoader();
-
-        final Class<?> testClass = loader.loadClass("code.ClassToLoad");
-        final Package pack = testClass.getPackage();
-        assertEquals("code", pack.getName());
-        verifyPackage(pack, false);
-
-        final Object testObject = testClass.newInstance();
-        assertEquals("**PRIVATE**", testObject.toString());
-    }
-
-    /**
-     * Tests loading a resource.
-     */
-    public void testLoadResource() throws Exception
-    {
-        final VFSClassLoader loader = createClassLoader();
-
-        final URL resource = loader.getResource("read-tests/file1.txt");
-
-        assertNotNull(resource);
-        final URLConnection urlCon = resource.openConnection();
-        assertSameURLContent(FILE1_CONTENT, urlCon);
-    }
-
-    /**
-     * Tests package sealing.
-     */
-    public void testSealing() throws Exception
-    {
-        final VFSClassLoader loader = createClassLoader();
-        final Class<?> testClass = loader.loadClass("code.sealed.AnotherClass");
-        final Package pack = testClass.getPackage();
-        assertEquals("code.sealed", pack.getName());
-        verifyPackage(pack, true);
-    }
-
-    /**
-     * Tests retrieving resources (from JAR searchpath).
-     * <p>
-     * This is run for all providers, but only when a local
-     * provider is present and jar extension is registered
-     * it will actually carry out all tests.
-     */
-    public void testGetResourcesJARs() throws Exception
-    {
-        final FileSystemManager manager = getManager();
-        try
-        {
-            // hasProvider("file") cannot be used as it triggers default provider URL
-            manager.toFileObject(new File("."));
-        }
-        catch (FileSystemException e)
-        {
-            System.out.println("VfsClassLoaderTests no local file provider, skipping.");
-            return;
-        }
-
-        // build search path without using #getBaseFolder()
-        // because NestedJarTestCase redefines it
-        final File baseDir = AbstractVfsTestCase.getTestDirectoryFile();
-        final FileObject nestedJar = manager.resolveFile(baseDir, "nested.jar");
-        final FileObject testJar = manager.resolveFile(baseDir, "test.jar");
-
-        // test setup needs to know about .jar extension - i.e. NestedJarTestCase
-        if (!manager.canCreateFileSystem(nestedJar))
-        {
-            System.out.println("VfsClassLoaderTests no layered .jar provider, skipping.");
-            return;
-        }
-
-        // verify test setup
-        assertTrue("nested.jar is required for testing", nestedJar.getType() == FileType.FILE);
-        assertTrue("test.jar is required for testing", testJar.getType() == FileType.FILE);
-
-        // System class loader (null) might be unpredictable in regards
-        // to returning resources for META-INF/MANIFEST.MF (see VFS-500)
-        // so we use our own which is guaranteed to not return any hit
-        final ClassLoader mockClassloader = new MockClassloader();
-        final FileObject[] search = new FileObject[] { nestedJar, testJar };
-        final VFSClassLoader loader = new VFSClassLoader(search, getManager(), mockClassloader);
-
-        final Enumeration<URL> urls = loader.getResources("META-INF/MANIFEST.MF");
-        final URL url1 = urls.nextElement();
-        final URL url2 = urls.nextElement();
-
-        assertTrue("First resource must refer to nested.jar but was " + url1, url1.toString().endsWith("nested.jar!/META-INF/MANIFEST.MF"));
-        assertTrue("Second resource must refer to test.jar but was " + url2, url2.toString().endsWith("test.jar!/META-INF/MANIFEST.MF"));
-    }
-
-    /**
-     * Tests retrieving resources (from local directory with .jar extension).
-     * <p>
-     * This test is repeated with various provider configurations but works on local files, only.
-     */
-    public void testGetResourcesNoLayerLocal() throws Exception
-    {
-        final FileSystemManager manager = getManager();
-        try
-        {
-            // hasProvider("file") cannot be used as it triggers default provider URL
-            manager.toFileObject(new File("."));
-        }
-        catch (FileSystemException e)
-        {
-            System.out.println("VfsClassLoaderTests no local file provider, skipping.");
-            return;
-        }
-        final File baseDir = AbstractVfsTestCase.getTestDirectoryFile();
-
-        // setup test folder
-        final FileObject dir = manager.resolveFile(baseDir, "read-tests/dir1/subdir4.jar");
-        assertTrue("subdir4.jar/ is required for testing " + dir, dir.getType() == FileType.FOLDER);
-        assertFalse(manager.canCreateFileSystem(dir));
-
-        // prepare classloader
-        final FileObject[] search = new FileObject[] { dir };
-        final ClassLoader mockClassloader = new MockClassloader();
-        final VFSClassLoader loader = new VFSClassLoader(search, getManager(), mockClassloader);
-
-        // verify resource loading
-        final Enumeration<URL> urls = loader.getResources("file1.txt");
-        final URL url1 = urls.nextElement();
-        assertFalse("Only one hit expected", urls.hasMoreElements());
-        assertTrue("not pointing to resource " + url1, url1.toString().endsWith("subdir4.jar/file1.txt"));
-    }
-
-
-    /**
-     * Verify the package loaded with class loader.
-     */
-    private void verifyPackage(final Package pack,
-                               final boolean sealed)
-    {
-        if (getBaseFolder().getFileSystem().hasCapability(Capability.MANIFEST_ATTRIBUTES))
-        {
-            assertEquals("ImplTitle", pack.getImplementationTitle());
-            assertEquals("ImplVendor", pack.getImplementationVendor());
-            assertEquals("1.1", pack.getImplementationVersion());
-            assertEquals("SpecTitle", pack.getSpecificationTitle());
-            assertEquals("SpecVendor", pack.getSpecificationVendor());
-            assertEquals("1.0", pack.getSpecificationVersion());
-            assertEquals(sealed, pack.isSealed());
-        }
-        else
-        {
-            assertNull(pack.getImplementationTitle());
-            assertNull(pack.getImplementationVendor());
-            assertNull(pack.getImplementationVersion());
-            assertNull(pack.getSpecificationTitle());
-            assertNull(pack.getSpecificationVendor());
-            assertNull(pack.getSpecificationVersion());
-            assertFalse(pack.isSealed());
-        }
-    }
-
-
-    /**
-     * Non-Delegating Class Loader.
-     */
-    public static class MockClassloader extends ClassLoader
-    {
-        MockClassloader()
-        {
-            super(null);
-        }
-
-        /**
-         * This method will not return any hit to
-         * VFSClassLoader#testGetResourcesJARs.
-         */
-        @Override
-        public Enumeration<URL> getResources(String name)
-            throws IOException
-        {
-            return Collections.enumeration(Collections.<URL> emptyList());
-        }
-
-        @Override
-        protected Class<?> findClass(String name)
-            throws ClassNotFoundException
-        {
-            fail("Not intended to be used for class loading.");
-            return null;
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/operations/BasicOperationsTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/operations/BasicOperationsTestCase.java
deleted file mode 100644
index c514ce6..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/operations/BasicOperationsTestCase.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.commons.vfs2.operations;
-
-import static org.junit.Assert.*;
-
-import java.io.File;
-import java.util.Collection;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.operations.vcs.VcsLog;
-import org.apache.commons.vfs2.provider.FileProvider;
-import org.apache.commons.vfs2.provider.VfsComponent;
-import org.apache.commons.vfs2.provider.VfsComponentContext;
-import org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Basic Tests for the FileOperations and FileOperationsProvider API.
- */
-public class BasicOperationsTestCase
-{
-    /** This FileOperationsProvider is a VfsComponent and records invocations. */
-    static class MyFileOperationProviderComp
-        extends MyFileOprationProviderBase
-        implements VfsComponent
-    {
-        @Override
-        public void setLogger(Log logger)
-        {
-            assertNotNull("setLogger", logger);
-            ops |= 1;
-        }
-
-        @Override
-        public void setContext(VfsComponentContext context)
-        {
-            assertNotNull("setContext", context);
-            ops |= 2;
-        }
-
-        @Override
-        public void init()
-            throws FileSystemException
-        {
-            ops |= 4;
-        }
-
-        @Override
-        public void close()
-        {
-            ops |= 8;
-        }
-    }
-
-    /** This FileOperationsProvider is no VfsComponent. */
-    static class MyFileOperationProviderNoncomp
-        extends MyFileOprationProviderBase
-    {
-    }
-
-    /**
-     * Base class for different Test Providers. This is also a compile test
-     * to ensure interface stability.
-     */
-    static class MyFileOprationProviderBase implements FileOperationProvider
-    {
-        int ops = 0; // bit array to record invocations (poor mans mock)
-
-        @Override
-        public void collectOperations(Collection<Class< ? extends FileOperation>> operationsList,
-                                      FileObject file)
-                                          throws FileSystemException
-        {
-            assertNotNull("collect operationsList", operationsList);
-            assertNotNull("collect file", file);
-            ops |= 16;
-        }
-
-        @Override
-        public FileOperation getOperation(FileObject file, Class< ? extends FileOperation> operationClass)
-            throws FileSystemException
-        {
-            assertNotNull("file object", file);
-            assertNotNull("operationclass", operationClass);
-            ops |= 32;
-            return null;
-        }
-    }
-
-    /** FSM to work with, maintained by JUnit Fixture. */
-    private DefaultFileSystemManager manager;
-
-    /**
-     * JUnit Fixture: Prepare a simple FSM.
-     * @throws FileSystemException for runtime problems
-     */
-    @Before
-    public void setUp() throws FileSystemException
-    {
-        manager = new DefaultFileSystemManager();
-        FileProvider fp = new DefaultLocalFileProvider();
-        manager.addProvider("file", fp);
-        manager.init();
-    }
-
-    /**
-     * Ensure FileOperationProviders which are VfsComponents are
-     * set up and teared down.
-     * @throws FileSystemException for runtime problems
-     */
-    @Test
-    public void testLifecycleComp() throws FileSystemException
-    {
-        final MyFileOprationProviderBase myop = new MyFileOperationProviderComp();
-        assertEquals(0,  myop.ops);
-        manager.addOperationProvider("file", myop);
-        assertEquals(7, myop.ops);
-        manager.close();
-        assertEquals("close() not called", 15, myop.ops); // VFS-577
-
-        //fixture will close again
-   }
-
-    /**
-     * Ensure you can use FileOperationProvider which is not a VfsComponnt.
-     * @throws FileSystemException for runtime problems
-     */
-    @Test
-    public void testLifecycleNoncomp() throws FileSystemException
-    {
-        final MyFileOprationProviderBase myop = new MyFileOperationProviderNoncomp();
-        manager.addOperationProvider("file", myop);
-        FileOperationProvider[] ops = manager.getOperationProviders("file");
-        assertSame("exactly one provider registered", 1, ops.length);
-        assertSame(myop, ops[0]);
-        assertEquals(0, myop.ops); // collect not invoked
-    }
-
-    /**
-     * Ensures getOperations calls collect and allows empty response.
-     * @throws FileSystemException for runtime problems
-     */
-    @Test
-    public void testNotFoundAny() throws FileSystemException
-    {
-        final MyFileOprationProviderBase myop = new MyFileOperationProviderNoncomp();
-        manager.addOperationProvider("file", myop);
-        FileObject fo = manager.toFileObject(new File("."));
-
-        FileOperations ops = fo.getFileOperations();
-        assertNotNull(ops);
-
-        Class< ? extends FileOperation>[] oparray = ops.getOperations();
-        assertSame("no ops should be found", 0, oparray.length);
-        assertSame(16, myop.ops); // collect
-    }
-
-    /**
-     * Ensure proper response for not found FileOperation.
-     * @throws FileSystemException for runtime problems
-     */
-    @Test
-    public void testNotFoundOperation() throws FileSystemException
-    {
-        final MyFileOprationProviderBase myop = new MyFileOperationProviderNoncomp();
-        manager.addOperationProvider("file", myop);
-        FileObject fo = manager.toFileObject(new File("."));
-
-        FileOperations ops = fo.getFileOperations();
-        assertNotNull(ops);
-
-        try
-        {
-            FileOperation logop = ops.getOperation(VcsLog.class);
-            fail("Must throw but returned " + logop);
-        }
-        catch (FileSystemException e)
-        {
-            assertEquals("vfs.operation/operation-not-supported.error", e.getCode());
-        }
-        assertSame(32, myop.ops); // getOperation was called
-    }
-
-    /**
-     * JUnit Fixture: Tear Down the FSM.
-     * @throws FileSystemException for runtime problems
-     */
-    @After
-    public void tearDown() throws FileSystemException
-    {
-        if (manager != null)
-        {
-            manager.close();
-            manager = null;
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/perf/FileNamePerformance.java b/trunk/core/src/test/java/org/apache/commons/vfs2/perf/FileNamePerformance.java
deleted file mode 100644
index 8884077..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/perf/FileNamePerformance.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.commons.vfs2.perf;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.VFS;
-
-public class FileNamePerformance
-{
-    private final static int NUOF_RESOLVES = 100000;
-
-    public static void main(final String[] args) throws FileSystemException
-    {
-        final FileSystemManager mgr = VFS.getManager();
-
-        final FileObject root = mgr
-                .resolveFile("smb://HOME\\vfsusr:vfs%2f%25\\te:st@10.0.1.54/vfsusr");
-        final FileName rootName = root.getName();
-
-        testNames(mgr, rootName);
-
-        testChildren(root);
-
-        testFiles(mgr);
-    }
-
-    private static void testFiles(final FileSystemManager mgr) throws FileSystemException
-    {
-        for (int i = 0; i < 10; i++)
-        {
-            // warmup jvm
-            mgr.resolveFile("smb://HOME\\vfsusr:vfs%2f%25\\te:st@10.0.1.54/vfsusr/many/path/elements/with%25esc/any%25where/to/file.txt");
-        }
-
-        final long start = System.currentTimeMillis();
-        for (int i = 0; i < NUOF_RESOLVES; i++)
-        {
-            mgr.resolveFile("smb://HOME\\vfsusr:vfs%2f%25\\te:st@10.0.1.54/vfsusr/many/path/elements/with%25esc/any%25where/to/file.txt");
-        }
-        final long end = System.currentTimeMillis();
-
-        System.err.println("time to resolve " + NUOF_RESOLVES + " files: "
-                + (end - start) + "ms");
-    }
-
-    private static void testChildren(final FileObject root) throws FileSystemException
-    {
-        for (int i = 0; i < 10; i++)
-        {
-            // warmup jvm
-            root.resolveFile("/many/path/elements/with%25esc/any%25where/to/file.txt");
-        }
-
-        final long start = System.currentTimeMillis();
-        for (int i = 0; i < NUOF_RESOLVES; i++)
-        {
-            root.resolveFile("/many/path/elements/with%25esc/any%25where/to/file.txt");
-        }
-        final long end = System.currentTimeMillis();
-
-        System.err.println("time to resolve " + NUOF_RESOLVES + " children: "
-                + (end - start) + "ms");
-    }
-
-    private static void testNames(final FileSystemManager mgr, final FileName rootName) throws FileSystemException
-    {
-        for (int i = 0; i < 10; i++)
-        {
-            // warmup jvm
-            mgr.resolveName(rootName,
-                    "/many/path/elements/with%25esc/any%25where/to/file.txt");
-        }
-
-        final long start = System.currentTimeMillis();
-        for (int i = 0; i < NUOF_RESOLVES; i++)
-        {
-            mgr.resolveName(rootName,
-                    "/many/path/elements/with%25esc/any%25where/to/file.txt");
-        }
-        final long end = System.currentTimeMillis();
-
-        System.err.println("time to resolve " + NUOF_RESOLVES + " names: "
-                + (end - start) + "ms");
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/UriParserTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/UriParserTestCase.java
deleted file mode 100644
index 4dfe39c..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/UriParserTestCase.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.commons.vfs2.provider;

-

-import org.junit.Assert;

-import org.junit.Test;

-

-/**

- *

- * @version $Id$

- */

-public class UriParserTestCase

-{

-

-    @Test

-    public void testColonInFileName()

-    {

-        Assert.assertEquals(null, UriParser.extractScheme("some/path/some:file"));

-    }

-

-    @Test

-    public void testNormalScheme()

-    {

-        Assert.assertEquals("ftp", UriParser.extractScheme("ftp://user:pass@host/some/path/some:file"));

-    }

-

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftp/test/FtpProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftp/test/FtpProviderTestCase.java
deleted file mode 100644
index a9489ea..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftp/test/FtpProviderTestCase.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.commons.vfs2.provider.ftp.test;
-
-import java.io.IOException;
-import java.net.URL;
-
-import junit.framework.Test;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.ftp.FtpFileProvider;
-import org.apache.commons.vfs2.provider.ftp.FtpFileSystemConfigBuilder;
-import org.apache.commons.vfs2.provider.ftp.FtpFileType;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-import org.apache.commons.vfs2.util.FreeSocketPortUtil;
-import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.FtpServerFactory;
-import org.apache.ftpserver.ftplet.FtpException;
-import org.apache.ftpserver.ftplet.UserManager;
-import org.apache.ftpserver.listener.ListenerFactory;
-import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
-import org.apache.ftpserver.usermanager.impl.BaseUser;
-import org.junit.Assert;
-
-/**
- * Tests for FTP file systems.
- */
-public class FtpProviderTestCase extends AbstractProviderTestConfig implements ProviderTestConfig
-{
-    private static int SocketPort;
-
-    /**
-     * Use %40 for @ in URLs
-     */
-    private static String ConnectionUri;
-
-    private static FtpServer Server;
-
-    private static final String TEST_URI = "test.ftp.uri";
-
-    private static final String USER_PROPS_RES = "org.apache.ftpserver/users.properties";
-
-    static String getConnectionUri()
-    {
-        return ConnectionUri;
-    }
-
-    static int getSocketPort()
-    {
-        return SocketPort;
-    }
-
-    private static String getSystemTestUriOverride()
-    {
-        return System.getProperty(TEST_URI);
-    }
-
-    static void init() throws IOException
-    {
-        SocketPort = FreeSocketPortUtil.findFreeLocalPort();
-        // Use %40 for @ in a URL
-        ConnectionUri = "ftp://test:test@localhost:" + SocketPort;
-    }
-
-    /**
-     * Creates and starts an embedded Apache FTP Server (MINA).
-     *
-     * @throws FtpException
-     * @throws IOException
-     */
-    static void setUpClass() throws FtpException, IOException
-    {
-        if (Server != null)
-        {
-            return;
-        }
-        init();
-        final FtpServerFactory serverFactory = new FtpServerFactory();
-        final PropertiesUserManagerFactory propertiesUserManagerFactory = new PropertiesUserManagerFactory();
-        final URL userPropsResource = ClassLoader.getSystemClassLoader().getResource(USER_PROPS_RES);
-        Assert.assertNotNull(USER_PROPS_RES, userPropsResource);
-        propertiesUserManagerFactory.setUrl(userPropsResource);
-        final UserManager userManager = propertiesUserManagerFactory.createUserManager();
-        final BaseUser user = (BaseUser) userManager.getUserByName("test");
-        // Pickup the home dir value at runtime even though we have it set in the user prop file
-        // The user prop file requires the "homedirectory" to be set
-        user.setHomeDirectory(getTestDirectory());
-        serverFactory.setUserManager(userManager);
-        final ListenerFactory factory = new ListenerFactory();
-        // set the port of the listener
-        factory.setPort(SocketPort);
-
-        // replace the default listener
-        serverFactory.addListener("default", factory.createListener());
-
-        // start the server
-        Server = serverFactory.createServer();
-        Server.start();
-    }
-
-    /**
-     * Creates the test suite for the ftp file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new FtpProviderTestCase())
-        {
-            @Override
-            protected void setUp() throws Exception
-            {
-                if (getSystemTestUriOverride() == null)
-                {
-                    setUpClass();
-                }
-                super.setUp();
-            }
-
-            @Override
-            protected void tearDown() throws Exception
-            {
-                try {
-                    // This will report running threads of the FTP server.
-                    // However, shutting down the FTP server first will always
-                    // report an exception closing the manager, because the
-                    // server is already down
-                    super.tearDown();
-                } finally {
-                    tearDownClass();
-                }
-            }
-        };
-    }
-
-    /**
-     * Stops the embedded Apache FTP Server (MINA).
-     */
-    static void tearDownClass()
-    {
-        if (Server != null)
-        {
-            Server.stop();
-            Server = null;
-        }
-    }
-
-    /**
-     * Returns the base folder for tests. You can override the DEFAULT_URI by using the system property name defined by
-     * TEST_URI.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        String uri = getSystemTestUriOverride();
-        if (uri == null)
-        {
-            uri = ConnectionUri;
-        }
-        final FileSystemOptions opts = new FileSystemOptions();
-        final FtpFileSystemConfigBuilder builder = FtpFileSystemConfigBuilder.getInstance();
-        builder.setPassiveMode(opts, true);
-        // FtpFileType.BINARY is the default
-        builder.setFileType(opts, FtpFileType.BINARY);
-        builder.setConnectTimeout(opts, 10000);
-        builder.setControlEncoding(opts, "UTF-8");
-        return manager.resolveFile(uri, opts);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("ftp", new FtpFileProvider());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftp/test/MultipleConnectionTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftp/test/MultipleConnectionTestCase.java
deleted file mode 100644
index 3076350..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftp/test/MultipleConnectionTestCase.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.commons.vfs2.provider.ftp.test;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.SocketException;
-
-import org.apache.commons.net.ftp.FTPClient;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.VFS;
-import org.apache.ftpserver.ftplet.FtpException;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class MultipleConnectionTestCase
-{
-
-    @BeforeClass
-    public static void setUpClass() throws FtpException, IOException
-    {
-        FtpProviderTestCase.setUpClass();
-    }
-
-    @AfterClass
-    public static void tearDownClass() throws MalformedURLException, FtpException
-    {
-        FtpProviderTestCase.tearDownClass();
-    }
-
-    private FileObject resolveRoot() throws FileSystemException
-    {
-        return VFS.getManager().resolveFile(FtpProviderTestCase.getConnectionUri());
-    }
-
-    @Test
-    public void testConnectRoot() throws SocketException, IOException
-    {
-        resolveRoot();
-        resolveRoot();
-    }
-
-    @Test
-    public void testUnderlyingConnect() throws SocketException, IOException
-    {
-        final FTPClient client1 = new FTPClient();
-        final FTPClient client2 = new FTPClient();
-        try
-        {
-            final String hostname = "localhost";
-            client1.connect(hostname, FtpProviderTestCase.getSocketPort());
-            client2.connect(hostname, FtpProviderTestCase.getSocketPort());
-        } finally
-        {
-            if (client1 != null)
-            {
-                client1.disconnect();
-            }
-            if (client2 != null)
-            {
-                client2.disconnect();
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/AbstractFtpsProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/AbstractFtpsProviderTestCase.java
deleted file mode 100644
index f82e4aa..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/AbstractFtpsProviderTestCase.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.ftps.test;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.ftps.FtpsFileProvider;
-import org.apache.commons.vfs2.provider.ftps.FtpsFileSystemConfigBuilder;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-import org.apache.commons.vfs2.util.FreeSocketPortUtil;
-import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.FtpServerFactory;
-import org.apache.ftpserver.ftplet.FtpException;
-import org.apache.ftpserver.ftplet.UserManager;
-import org.apache.ftpserver.listener.ListenerFactory;
-import org.apache.ftpserver.ssl.SslConfigurationFactory;
-import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
-import org.apache.ftpserver.usermanager.impl.BaseUser;
-import org.junit.Assert;
-
-/**
- * Abstract tests for FTP file systems.
- */
-abstract class AbstractFtpsProviderTestCase extends AbstractProviderTestConfig implements ProviderTestConfig
-{
-    private static int SocketPort;
-
-    /**
-     * Use %40 for @ in URLs
-     */
-    private static String ConnectionUri;
-
-    private static FtpServer Server;
-
-    protected FileSystemOptions fileSystemOptions;
-
-    private static final String TEST_URI = "test.ftps.uri";
-
-    private static final String USER_PROPS_RES = "org.apache.ftpsserver/users.properties";
-
-    private static final String SERVER_JKS_RES = "org.apache.ftpsserver/ftpserver.jks";
-
-    static String getConnectionUri()
-    {
-        return ConnectionUri;
-    }
-
-    static int getSocketPort()
-    {
-        return SocketPort;
-    }
-
-    static String getSystemTestUriOverride()
-    {
-        return System.getProperty(TEST_URI);
-    }
-
-    static void init() throws IOException
-    {
-        SocketPort = FreeSocketPortUtil.findFreeLocalPort();
-        // Use %40 for @ in a URL
-        ConnectionUri = "ftps://test:test@localhost:" + SocketPort;
-    }
-
-    /**
-     * Creates and starts an embedded Apache FTP Server (MINA).
-     *
-     * @param implicit FTPS connection mode
-     * @throws FtpException
-     * @throws IOException
-     */
-    static void setUpClass(final boolean implicit) throws FtpException, IOException
-    {
-        if (Server != null)
-        {
-            return;
-        }
-        init();
-        final FtpServerFactory serverFactory = new FtpServerFactory();
-        final PropertiesUserManagerFactory propertiesUserManagerFactory = new PropertiesUserManagerFactory();
-        final URL userPropsResource = ClassLoader.getSystemClassLoader().getResource(USER_PROPS_RES);
-        Assert.assertNotNull(USER_PROPS_RES, userPropsResource);
-        propertiesUserManagerFactory.setUrl(userPropsResource);
-        final UserManager userManager = propertiesUserManagerFactory.createUserManager();
-        final BaseUser user = (BaseUser) userManager.getUserByName("test");
-        // Pickup the home dir value at runtime even though we have it set in the user prop file
-        // The user prop file requires the "homedirectory" to be set
-        user.setHomeDirectory(getTestDirectory());
-        serverFactory.setUserManager(userManager);
-        final ListenerFactory factory = new ListenerFactory();
-        // set the port of the listener
-        factory.setPort(SocketPort);
-
-        // define SSL configuration
-        final URL serverJksResource = ClassLoader.getSystemClassLoader().getResource(SERVER_JKS_RES);
-        Assert.assertNotNull(SERVER_JKS_RES, serverJksResource);
-        final SslConfigurationFactory ssl = new SslConfigurationFactory();
-        final File keyStoreFile = FileUtils.toFile(serverJksResource);
-        Assert.assertTrue(keyStoreFile.toString(), keyStoreFile.exists());
-        ssl.setKeystoreFile(keyStoreFile);
-        ssl.setKeystorePassword("password");
-
-        // set the SSL configuration for the listener
-        factory.setSslConfiguration(ssl.createSslConfiguration());
-        factory.setImplicitSsl(implicit);
-
-        // replace the default listener
-        serverFactory.addListener("default", factory.createListener());
-
-        // start the server
-        Server = serverFactory.createServer();
-        Server.start();
-    }
-
-    /**
-     * Stops the embedded Apache FTP Server (MINA).
-     */
-    static void tearDownClass()
-    {
-        if (Server != null)
-        {
-            Server.stop();
-            Server = null;
-        }
-    }
-
-    static final class FtpProviderTestSuite extends ProviderTestSuite {
-        private final boolean implicit;
-
-        public FtpProviderTestSuite(final AbstractFtpsProviderTestCase providerConfig) throws Exception
-        {
-            super(providerConfig);
-            this.implicit = providerConfig.isImplicit();
-        }
-
-        @Override
-        protected void setUp() throws Exception
-        {
-            if (getSystemTestUriOverride() == null)
-            {
-                setUpClass(implicit);
-            }
-            super.setUp();
-        }
-
-        @Override
-        protected void tearDown() throws Exception
-        {
-            try {
-                // This will report running threads of the FTP server.
-                // However, shutting down the FTP server first will always
-                // report an exception closing the manager, because the
-                // server is already down
-                super.tearDown();
-            } finally {
-                tearDownClass();
-            }
-        }
-    }
-
-    protected abstract boolean isImplicit();
-
-    /**
-     * Returns the base folder for tests. You can override the DEFAULT_URI by using the system property name defined by
-     * TEST_URI.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        String uri = getSystemTestUriOverride();
-        if (uri == null)
-        {
-            uri = ConnectionUri;
-        }
-        return manager.resolveFile(uri, getFileSystemOptions());
-    }
-
-    protected FileSystemOptions getFileSystemOptions()
-    {
-        if (fileSystemOptions == null)
-        {
-            fileSystemOptions = new FileSystemOptions();
-            setupOptions(FtpsFileSystemConfigBuilder.getInstance());
-        }
-        return fileSystemOptions;
-    }
-
-    protected void setupOptions(final FtpsFileSystemConfigBuilder builder)
-    {
-        builder.setConnectTimeout(fileSystemOptions, Integer.valueOf(1000));
-        builder.setDataTimeout(fileSystemOptions, Integer.valueOf(2000));
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("ftps", new FtpsFileProvider());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/FtpsProviderExplicitTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/FtpsProviderExplicitTestCase.java
deleted file mode 100644
index bb8b373..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/FtpsProviderExplicitTestCase.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.commons.vfs2.provider.ftps.test;
-
-import junit.framework.Test;
-
-import org.apache.commons.vfs2.provider.ftps.FtpsDataChannelProtectionLevel;
-import org.apache.commons.vfs2.provider.ftps.FtpsFileSystemConfigBuilder;
-import org.apache.commons.vfs2.provider.ftps.FtpsMode;
-
-/**
- * Tests for FTPS file systems with explicit FTPS connection.
- */
-public class FtpsProviderExplicitTestCase extends AbstractFtpsProviderTestCase
-{
-    @Override
-    protected boolean isImplicit()
-    {
-        return false;
-    }
-
-    @Override
-    protected void setupOptions(final FtpsFileSystemConfigBuilder builder)
-    {
-        super.setupOptions(builder);
-        builder.setDataChannelProtectionLevel(fileSystemOptions, FtpsDataChannelProtectionLevel.P);
-        builder.setFtpsMode(fileSystemOptions, FtpsMode.EXPLICIT);
-    }
-
-    /**
-     * Creates the test suite for the ftps file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new FtpProviderTestSuite(new FtpsProviderExplicitTestCase());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/FtpsProviderImplicitTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/FtpsProviderImplicitTestCase.java
deleted file mode 100644
index 17d9d07..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/FtpsProviderImplicitTestCase.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.commons.vfs2.provider.ftps.test;
-
-import junit.framework.Test;
-
-import org.apache.commons.vfs2.provider.ftps.FtpsFileSystemConfigBuilder;
-import org.apache.commons.vfs2.provider.ftps.FtpsMode;
-
-/**
- * Tests for FTPS file systems with implicit FTPS connection.
- *
- * TODO: Fails for concurrent access.
- * Note, that the implicit mode is not standardized and the protocol may differ between the FTPS servers.
- * @see <a href="http://en.wikipedia.org/wiki/FTPS#Implicit">Wikipedia: FTPS/Implicit</a>
- */
-public class FtpsProviderImplicitTestCase extends AbstractFtpsProviderTestCase
-{
-    @Override
-    protected boolean isImplicit()
-    {
-        return true;
-    }
-
-    @Override
-    protected void setupOptions(final FtpsFileSystemConfigBuilder builder)
-    {
-        super.setupOptions(builder);
-        builder.setFtpsMode(fileSystemOptions, FtpsMode.IMPLICIT);
-    }
-
-    /**
-     * Creates the test suite for the ftps file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new FtpProviderTestSuite(new FtpsProviderImplicitTestCase());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/MultipleConnectionTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/MultipleConnectionTestCase.java
deleted file mode 100644
index 96b75b5..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ftps/test/MultipleConnectionTestCase.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.commons.vfs2.provider.ftps.test;
-
-import java.io.IOException;
-import java.net.SocketException;
-
-import org.apache.commons.net.ftp.FTPSClient;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.VFS;
-import org.apache.ftpserver.ftplet.FtpException;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class MultipleConnectionTestCase
-{
-
-    @BeforeClass
-    public static void setUpClass() throws FtpException, IOException
-    {
-        AbstractFtpsProviderTestCase.setUpClass(true);
-    }
-
-    @AfterClass
-    public static void tearDownClass()
-    {
-        AbstractFtpsProviderTestCase.tearDownClass();
-    }
-
-    private FTPSClient init(final FTPSClient client)
-    {
-        client.enterLocalPassiveMode();
-        return client;
-    }
-
-    private FileObject resolveRoot() throws FileSystemException
-    {
-        return VFS.getManager().resolveFile(AbstractFtpsProviderTestCase.getConnectionUri(),
-                new FtpsProviderImplicitTestCase().getFileSystemOptions());
-    }
-
-    @Test
-    public void testConnectRoot() throws IOException
-    {
-        resolveRoot();
-        resolveRoot();
-    }
-
-    @Test
-    public void testUnderlyingConnect() throws SocketException, IOException
-    {
-        final FTPSClient client1 = this.init(new FTPSClient(true));
-        final FTPSClient client2 = this.init(new FTPSClient(true));
-        try
-        {
-            final String hostname = "localhost";
-            client1.connect(hostname, AbstractFtpsProviderTestCase.getSocketPort());
-            client2.connect(hostname, AbstractFtpsProviderTestCase.getSocketPort());
-        } finally
-        {
-            if (client1 != null)
-            {
-                client1.disconnect();
-            }
-            if (client2 != null)
-            {
-                client2.disconnect();
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/hdfs/test/HdfsFileProviderTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/hdfs/test/HdfsFileProviderTest.java
deleted file mode 100644
index 160ebb1..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/hdfs/test/HdfsFileProviderTest.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.commons.vfs2.provider.hdfs.test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.Map;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.vfs2.CacheStrategy;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.cache.DefaultFilesCache;
-import org.apache.commons.vfs2.cache.SoftRefFilesCache;
-import org.apache.commons.vfs2.impl.DefaultFileReplicator;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.impl.FileContentInfoFilenameFactory;
-import org.apache.commons.vfs2.provider.hdfs.HdfsFileAttributes;
-import org.apache.commons.vfs2.provider.hdfs.HdfsFileProvider;
-import org.apache.commons.vfs2.util.Os;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hdfs.DFSConfigKeys;
-import org.apache.hadoop.hdfs.MiniDFSCluster;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-/**
- * This test class uses the Hadoop MiniDFSCluster class to create an embedded Hadoop cluster.
- * <P>
- * This will only work on systems that Hadoop supports.
- */
-@SuppressWarnings("resource")
-public class HdfsFileProviderTest
-{
-
-    // Turn off the MiniDFSCluster logging
-    static
-    {
-        System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
-    }
-
-    private static final int PORT = 8620;
-    private static final String HDFS_URI = "hdfs://localhost:" + PORT;
-    private static final String TEST_DIR1 = HDFS_URI + "/test-dir";
-    private static final Path DIR1_PATH = new Path("/test-dir");
-    private static final String TEST_FILE1 = TEST_DIR1 + "/accumulo-test-1.jar";
-    private static final Path FILE1_PATH = new Path(DIR1_PATH, "accumulo-test-1.jar");
-
-    private static DefaultFileSystemManager manager;
-    private static FileSystem hdfs;
-
-    protected static Configuration conf;
-    protected static MiniDFSCluster cluster;
-
-    @BeforeClass
-    public static void setUp() throws Exception
-    {
-        Logger.getRootLogger().setLevel(Level.ERROR);
-
-        // Put the MiniDFSCluster directory in the target directory
-        File data = new File("target/test/hdfstestdata").getAbsoluteFile();
-        data.mkdirs();
-        System.setProperty("test.build.data", data.toString());
-        FileUtils.cleanDirectory(data);
-
-        // Setup HDFS
-        conf = new Configuration();
-        conf.set(FileSystem.FS_DEFAULT_NAME_KEY, HDFS_URI);
-        conf.set("hadoop.security.token.service.use_ip", "true");
-        conf.setLong(DFSConfigKeys.DFS_BLOCK_SIZE_KEY, 1024 * 1024); // 1M blocksize
-
-        setUmask(conf);
-
-        cluster = new MiniDFSCluster(PORT, conf, 1, true, true, true, null, null, null, null);
-        cluster.waitActive();
-
-        // Set up the VFS
-        manager = new DefaultFileSystemManager();
-        manager.addProvider("hdfs", new HdfsFileProvider());
-        manager.init();
-        hdfs = cluster.getFileSystem();
-    }
-
-    /**
-     * Add {@code dfs.datanode.data.dir.perm} setting if OS needs it.
-     * <P>
-     * MiniDFSCluster will check the permissions on the data directories, but does not do a
-     * good job of setting them properly. We need to get the users umask and set the
-     * appropriate Hadoop property so that the data directories will be created with
-     * the correct permissions.
-     * <P>
-     * Will do nothing on Windows.
-     */
-    public static void setUmask(Configuration conf2)
-    {
-        if (Os.isFamily(Os.OS_FAMILY_WINDOWS))
-        {
-            return;
-        }
-
-        try
-        {
-            final Process p = Runtime.getRuntime().exec("/bin/sh -c umask");
-            final BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream()));
-            final String line = bri.readLine();
-            p.waitFor();
-            final Short umask = Short.parseShort(line.trim(), 8);
-            // Need to set permission to 777 xor umask
-            // leading zero makes java interpret as base 8
-            final int newPermission = 0777 ^ umask;
-            conf2.set("dfs.datanode.data.dir.perm", String.format("%03o", newPermission));
-        }
-        catch (final Exception e)
-        {
-            throw new RuntimeException("Error getting umask from O/S", e);
-        }
-    }
-
-    @AfterClass
-    public static void tearDown() throws Exception
-    {
-        if (null != hdfs)
-        {
-            hdfs.close();
-        }
-        manager.close();
-    }
-
-    @After
-    public void after() throws Exception
-    {
-        if (null != hdfs)
-        {
-            hdfs.delete(DIR1_PATH, true);
-        }
-    }
-
-    private FileObject createTestFile(final FileSystem hdfs) throws IOException
-    {
-        // Create the directory
-        hdfs.mkdirs(DIR1_PATH);
-        final FileObject dir = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(dir);
-        Assert.assertTrue(dir.exists());
-        Assert.assertTrue(dir.getType().equals(FileType.FOLDER));
-
-        // Create the file in the directory
-        hdfs.create(FILE1_PATH).close();
-        final FileObject f = manager.resolveFile(TEST_FILE1);
-        Assert.assertNotNull(f);
-        Assert.assertTrue(f.exists());
-        Assert.assertTrue(f.getType().equals(FileType.FILE));
-        return f;
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void testCanRenameTo() throws Exception
-    {
-        final FileObject fo = createTestFile(hdfs);
-        Assert.assertNotNull(fo);
-        fo.canRenameTo(fo);
-    }
-
-    @Test
-    public void testDoListChildren() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        final FileObject dir = file.getParent();
-
-        final FileObject[] children = dir.getChildren();
-        Assert.assertTrue(children.length == 1);
-        Assert.assertTrue(children[0].getName().equals(file.getName()));
-
-    }
-
-    @Test
-    public void testEquals() throws Exception
-    {
-        // Create test file (and check parent was created)
-        final FileObject dir = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(dir);
-        Assert.assertFalse(dir.exists());
-        final FileObject file1 = createTestFile(hdfs);
-        Assert.assertTrue(file1.exists());
-        Assert.assertTrue(dir.exists());
-
-        // Get a handle to the same file and ensure it is equal
-        final FileObject file2 = manager.resolveFile(TEST_FILE1);
-        Assert.assertEquals(file1, file2);
-
-        // Ensure different files on same filesystem are not equal
-        Assert.assertNotEquals(dir, file1);
-        Assert.assertNotEquals(dir, file2);
-    }
-
-    @Test
-    public void testGetAttributes() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        final Map<String, Object> attributes = file.getContent().getAttributes();
-        Assert.assertTrue(attributes.containsKey(HdfsFileAttributes.BLOCK_SIZE.toString()));
-        Assert.assertTrue(attributes.containsKey(HdfsFileAttributes.GROUP.toString()));
-        Assert.assertTrue(attributes.containsKey(HdfsFileAttributes.LAST_ACCESS_TIME.toString()));
-        Assert.assertTrue(attributes.containsKey(HdfsFileAttributes.LENGTH.toString()));
-        Assert.assertTrue(attributes.containsKey(HdfsFileAttributes.MODIFICATION_TIME.toString()));
-        Assert.assertTrue(attributes.containsKey(HdfsFileAttributes.OWNER.toString()));
-        Assert.assertTrue(attributes.containsKey(HdfsFileAttributes.PERMISSIONS.toString()));
-    }
-
-    @Test
-    public void testGetContentSize() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        Assert.assertEquals(0, file.getContent().getSize());
-    }
-
-    @Test
-    public void testGetInputStream() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        file.getContent().getInputStream().close();
-    }
-
-    @Test
-    public void testInit() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_FILE1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-    }
-
-    @Test
-    public void testIsHidden() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        Assert.assertFalse(file.isHidden());
-    }
-
-    @Test
-    public void testIsReadable() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        Assert.assertTrue(file.isReadable());
-    }
-
-    @Test
-    public void testIsWritable() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        Assert.assertFalse(file.isWriteable());
-    }
-
-    @Test
-    public void testLastModificationTime() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        Assert.assertFalse(-1 == file.getContent().getLastModifiedTime());
-    }
-
-    @Test(expected = FileSystemException.class)
-    public void testRandomAccessContent() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        file.getContent().getRandomAccessContent(RandomAccessMode.READWRITE).close();
-    }
-
-    @Test
-    public void testRandomAccessContent2() throws Exception
-    {
-        final FileObject fo = manager.resolveFile(TEST_DIR1);
-        Assert.assertNotNull(fo);
-        Assert.assertFalse(fo.exists());
-
-        // Create the test file
-        final FileObject file = createTestFile(hdfs);
-        Assert.assertTrue(fo.exists());
-        file.getContent().getRandomAccessContent(RandomAccessMode.READ).close();
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/hdfs/test/HdfsFileProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/hdfs/test/HdfsFileProviderTestCase.java
deleted file mode 100644
index 3b92e53..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/hdfs/test/HdfsFileProviderTestCase.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.commons.vfs2.provider.hdfs.test;
-
-import java.io.File;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.hdfs.HdfsFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hdfs.DFSConfigKeys;
-import org.apache.hadoop.hdfs.MiniDFSCluster;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-
-/**
- * This test class uses the Hadoop MiniDFSCluster class to create an embedded Hadoop cluster.
- * <P>
- * This will only work on systems that Hadoop supports.
- */
-public class HdfsFileProviderTestCase extends AbstractProviderTestConfig implements ProviderTestConfig
-{
-    public static class HdfsProviderTestSuite extends ProviderTestSuite
-    {
-
-        // Turn off the MiniDFSCluster logging
-        static
-        {
-            System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
-        }
-
-        public HdfsProviderTestSuite(final ProviderTestConfig providerConfig, final boolean addEmptyDir) throws Exception
-        {
-            super(providerConfig, addEmptyDir);
-        }
-
-        @SuppressWarnings("deprecation")
-        private void copyTestResources(final File directory, final Path parent) throws Exception
-        {
-            for (final File file : directory.listFiles())
-            {
-                if (file.isFile())
-                {
-                    final Path src = new Path(file.getAbsolutePath());
-                    final Path dst = new Path(parent, file.getName());
-                    hdfs.copyFromLocalFile(src, dst);
-                }
-                else if (file.isDirectory())
-                {
-                    final Path dir = new Path(parent, file.getName());
-                    if (hdfs.mkdirs(dir))
-                    {
-                        copyTestResources(file, dir);
-                    }
-                    else
-                    {
-                        fail("Unable to make directory: " + dir);
-                    }
-                }
-            }
-
-        }
-
-        @SuppressWarnings("deprecation")
-        @Override
-        protected void setUp() throws Exception
-        {
-            Logger.getRootLogger().setLevel(Level.OFF);
-
-            // Put the MiniDFSCluster directory in the target directory
-            File data = new File("target/test/hdfstestcasedata").getAbsoluteFile();
-            data.mkdirs();
-            System.setProperty("test.build.data", data.toString());
-            FileUtils.cleanDirectory(data);
-
-            // Setup HDFS
-            conf = new Configuration();
-            conf.set(FileSystem.FS_DEFAULT_NAME_KEY, HDFS_URI);
-            conf.set("hadoop.security.token.service.use_ip", "true");
-            conf.setLong(DFSConfigKeys.DFS_BLOCK_SIZE_KEY, 1024 * 1024); // 1M blocksize
-
-            HdfsFileProviderTest.setUmask(conf);
-
-            try
-            {
-                cluster = new MiniDFSCluster(PORT, conf, 1, true, true, true, null, null, null, null);
-                cluster.waitActive();
-            }
-            catch (final IOException e)
-            {
-                throw new RuntimeException("Error setting up mini cluster", e);
-            }
-            hdfs = cluster.getFileSystem();
-
-            // Copy the test directory into HDFS
-            final Path base = new Path("/test-data");
-            assertTrue("Unable to create base directory", hdfs.mkdirs(base));
-            final File testDir = AbstractVfsTestCase.getTestDirectoryFile();
-            copyTestResources(testDir, base);
-
-            super.setUp();
-        }
-
-        @Override
-        protected void tearDown() throws Exception
-        {
-            super.tearDown();
-            if (null != hdfs)
-            {
-                hdfs.close();
-            }
-        }
-    }
-    private static final int PORT = 8720;
-    private static final String HDFS_URI = "hdfs://localhost:" + PORT;
-    private static FileSystem hdfs;
-    private static Configuration conf;
-
-    private static MiniDFSCluster cluster;
-
-    /**
-     * Creates the test suite for the zip file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new HdfsProviderTestSuite(new HdfsFileProviderTestCase(), false);
-    }
-
-    /**
-     * Returns the base folder for read tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final String uri = HDFS_URI + "/test-data";
-        return manager.resolveFile(uri);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("hdfs", new HdfsFileProvider());
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/GetContentInfoFunctionalTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/GetContentInfoFunctionalTest.java
deleted file mode 100644
index 7e86952..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/GetContentInfoFunctionalTest.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.commons.vfs2.provider.http.test;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.VFS;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * Tests VFS-427 NPE on HttpFileObject.getContent().getContentInfo()
- *
- * @since 2.1
- */
-public class GetContentInfoFunctionalTest
-{
-
-    /**
-     * Tests VFS-427 NPE on HttpFileObject.getContent().getContentInfo().
-     *
-     * @throws FileSystemException
-     *             thrown when the getContentInfo API fails.
-     */
-    @Test
-    public void testGoogle() throws FileSystemException
-    {
-        final FileSystemManager fsManager = VFS.getManager();
-        final FileObject fo = fsManager.resolveFile("http://www.google.com/images/logos/ps_logo2.png");
-        final FileContent content = fo.getContent();
-        Assert.assertNotNull(content);
-        // Used to NPE before fix:
-        content.getContentInfo();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpFilesCacheTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpFilesCacheTestCase.java
deleted file mode 100644
index 2378639..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpFilesCacheTestCase.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.commons.vfs2.provider.http.test;
-
-import junit.framework.TestCase;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.VFS;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * Tests https://issues.apache.org/jira/browse/VFS-426
- *
- * @version $Id$
- * @since 2.1
- */
-public class HttpFilesCacheTestCase extends TestCase
-{
-
-    /**
-     * Tests https://issues.apache.org/jira/browse/VFS-426
-     */
-    @Test
-    public void testQueryStringUrls() throws FileSystemException
-    {
-        final String noQueryStringUrl = "http://commons.apache.org/vfs";
-        final String queryStringUrl = "http://commons.apache.org/vfs?query=string";
-        final String queryStringUrl2 = "http://commons.apache.org/vfs?query=string&more=stuff";
-
-        final FileSystemManager fileSystemManager = VFS.getManager();
-
-        final FileObject noQueryFile = fileSystemManager.resolveFile(noQueryStringUrl);
-        Assert.assertEquals(noQueryStringUrl, noQueryFile.getURL().toExternalForm());
-
-        final FileObject queryFile = fileSystemManager.resolveFile(queryStringUrl);
-        Assert.assertEquals(queryStringUrl, queryFile.getURL().toExternalForm()); // failed for VFS-426
-
-        final FileObject queryFile2 = fileSystemManager.resolveFile(queryStringUrl2);
-        Assert.assertEquals(queryStringUrl2, queryFile2.getURL().toExternalForm()); // failed for VFS-426
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpProviderTestCase.java
deleted file mode 100644
index 6f6af3b..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/http/test/HttpProviderTestCase.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.http.test;
-
-import java.io.File;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.apache.commons.vfs2.FileNotFolderException;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.VFS;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.http.HttpFileProvider;
-import org.apache.commons.vfs2.provider.http.HttpFileSystemConfigBuilder;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-import org.apache.commons.vfs2.util.FreeSocketPortUtil;
-import org.apache.commons.vfs2.util.NHttpServer;
-import org.junit.Assert;
-
-/**
- * Test cases for the HTTP provider.
- *
- */
-public class HttpProviderTestCase extends AbstractProviderTestConfig
-{
-    private static NHttpServer Server;
-
-    private static int SocketPort;
-
-    private static final String TEST_URI = "test.http.uri";
-
-    /**
-     * Use %40 for @ in URLs
-     */
-    private static String ConnectionUri;
-
-    private static String getSystemTestUriOverride()
-    {
-        return System.getProperty(TEST_URI);
-    }
-
-    /**
-     * Creates and starts an embedded Apache HTTP Server (HttpComponents).
-     *
-     * @throws Exception
-     */
-    private static void setUpClass() throws Exception
-    {
-        Server = new NHttpServer();
-        if (!Server.run(SocketPort, new File(getTestDirectory()), 5000))
-        {
-            throw new IllegalStateException("The embedded HTTP server has not completed startup, increase wait time");
-        }
-    }
-
-    /**
-     * Creates a new test suite.
-     *
-     * @return a new test suite.
-     * @throws Exception
-     *             Thrown when the suite cannot be constructed.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new HttpProviderTestCase())
-        {
-            /**
-             * Adds base tests - excludes the nested test cases.
-             */
-            @Override
-            protected void addBaseTests() throws Exception
-            {
-                super.addBaseTests();
-                addTests(HttpProviderTestCase.class);
-            }
-
-            @Override
-            protected void setUp() throws Exception
-            {
-                if (getSystemTestUriOverride() == null)
-                {
-                    setUpClass();
-                }
-                super.setUp();
-            }
-
-            @Override
-            protected void tearDown() throws Exception
-            {
-                tearDownClass();
-                super.tearDown();
-            }
-        };
-    }
-
-    /**
-     * Stops the embedded Apache HTTP Server.
-     *
-     * @throws IOException
-     */
-    private static void tearDownClass() throws IOException
-    {
-        if (Server != null)
-        {
-            Server.stop();
-        }
-    }
-
-    /**
-     * Builds a new test case.
-     *
-     * @throws IOException
-     *             Thrown if a free local socket port cannot be found.
-     */
-    public HttpProviderTestCase() throws IOException
-    {
-        SocketPort = FreeSocketPortUtil.findFreeLocalPort();
-        // Use %40 for @ in a URL
-        ConnectionUri = "http://localhost:" + SocketPort;
-    }
-
-    private void checkReadTestsFolder(final FileObject file) throws FileSystemException
-    {
-        Assert.assertNotNull(file.getChildren());
-        Assert.assertTrue(file.getChildren().length > 0);
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        String uri = getSystemTestUriOverride();
-        if (uri == null)
-        {
-            uri = ConnectionUri;
-        }
-        return manager.resolveFile(uri);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("http", new HttpFileProvider());
-    }
-
-    private void testResloveFolderSlash(final String uri, final boolean followRedirect) throws FileSystemException
-    {
-        VFS.getManager().getFilesCache().close();
-        final FileSystemOptions opts = new FileSystemOptions();
-        HttpFileSystemConfigBuilder.getInstance().setFollowRedirect(opts, followRedirect);
-        final FileObject file = VFS.getManager().resolveFile(uri, opts);
-        try
-        {
-            checkReadTestsFolder(file);
-        } catch (final FileNotFolderException e)
-        {
-            // Expected: VFS HTTP does not support listing children yet.
-        }
-    }
-
-    public void testResloveFolderSlashNoRedirectOff() throws FileSystemException
-    {
-        testResloveFolderSlash(ConnectionUri + "/read-tests", false);
-    }
-
-    public void testResloveFolderSlashNoRedirectOn() throws FileSystemException
-    {
-        testResloveFolderSlash(ConnectionUri + "/read-tests", true);
-    }
-
-    public void testResloveFolderSlashYesRedirectOff() throws FileSystemException
-    {
-        testResloveFolderSlash(ConnectionUri + "/read-tests/", false);
-    }
-
-    public void testResloveFolderSlashYesRedirectOn() throws FileSystemException
-    {
-        testResloveFolderSlash(ConnectionUri + "/read-tests/", true);
-    }
-
-    // Test no longer passing 2016/04/28
-    public void ignoreTestHttp405() throws FileSystemException
-    {
-        final FileObject f = VFS.getManager().resolveFile("http://www.w3schools.com/webservices/tempconvert.asmx?action=WSDL");
-        assert f.getContent().getSize() > 0;
-    }
-
-	/** Ensure VFS-453 options are present. */
-    public void testHttpTimeoutConfig() throws FileSystemException
-    {
-        final FileSystemOptions opts = new FileSystemOptions();
-        final HttpFileSystemConfigBuilder builder = HttpFileSystemConfigBuilder.getInstance();
-
-        // ensure defaults are 0
-        assertEquals(0, builder.getConnectionTimeout(opts));
-        assertEquals(0, builder.getSoTimeout(opts));
-        assertEquals("Jakarta-Commons-VFS", builder.getUserAgent(opts));
-
-        builder.setConnectionTimeout(opts, 60000);
-        builder.setSoTimeout(opts, 60000);
-        builder.setUserAgent(opts, "foo/bar");
-
-        // ensure changes are visible
-        assertEquals(60000, builder.getConnectionTimeout(opts));
-        assertEquals(60000, builder.getSoTimeout(opts));
-        assertEquals("foo/bar", builder.getUserAgent(opts));
-
-        // TODO: should also check the created HTTPClient
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/https/test/GetContentInfoFunctionalTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/https/test/GetContentInfoFunctionalTest.java
deleted file mode 100644
index 5ef3fe8..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/https/test/GetContentInfoFunctionalTest.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.commons.vfs2.provider.https.test;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.VFS;
-import org.apache.commons.vfs2.provider.http.HttpFileSystemConfigBuilder;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * Tests VFS-427 NPE on HttpFileObject.getContent().getContentInfo()
- *
- * @since 2.1
- */
-public class GetContentInfoFunctionalTest
-{
-
-    /**
-     * Tests VFS-427 NPE on HttpFileObject.getContent().getContentInfo().
-     *
-     * @throws FileSystemException
-     *             thrown when the getContentInfo API fails.
-     * @throws MalformedURLException
-     *             thrown when the System environment contains an invalid URL for an HTTPS proxy.
-     */
-    @Test
-    public void testGoogle() throws FileSystemException, MalformedURLException
-    {
-        String httpsProxyHost = null;
-        int httpsProxyPort = -1;
-        final String httpsProxy = System.getenv("https_proxy");
-        if (httpsProxy != null) {
-            final URL url = new URL(httpsProxy);
-            httpsProxyHost = url.getHost();
-            httpsProxyPort = url.getPort();
-        }
-        final FileSystemOptions opts;
-        if (httpsProxyHost != null) {
-            opts = new FileSystemOptions();
-            final HttpFileSystemConfigBuilder builder = HttpFileSystemConfigBuilder.getInstance();
-            builder.setProxyHost(opts, httpsProxyHost);
-            if (httpsProxyPort >= 0) {
-                builder.setProxyPort(opts, httpsProxyPort);
-            }
-        } else {
-            opts = null;
-        }
-
-        final FileSystemManager fsManager = VFS.getManager();
-        final FileObject fo = fsManager.resolveFile("https://www.google.com/images/logos/ps_logo2.png", opts);
-        final FileContent content = fo.getContent();
-        Assert.assertNotNull(content);
-        // Used to NPE before fix:
-        content.getContentInfo();
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/jar/test/JarAttributesTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/jar/test/JarAttributesTestCase.java
deleted file mode 100644
index e6efd14..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/jar/test/JarAttributesTestCase.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.commons.vfs2.provider.jar.test;
-
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.VFS;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * Tests JAR attributes.
- *
- * @version $Id$
- */
-public class JarAttributesTestCase extends TestCase
-{
-    private void printAttributes(final Map<String, Object> attributes)
-    {
-        for (final Map.Entry<String, Object> e : attributes.entrySet())
-        {
-            System.out.println("Key: " + e.getKey() + ", Value: " + e.getValue());
-        }
-    }
-
-    @Test
-    public void testAttributes() throws Exception
-    {
-        final FileObject file = JarProviderTestCase.getTestJar(VFS.getManager(), "test.jar");
-
-        final Map<String, Object> attributes = file.getContent().getAttributes();
-        Assert.assertEquals("1.0", attributes.get("Manifest-Version"));
-        // Debugging:
-        // this.printAttributes(attributes);
-    }
-
-    @Test
-    public void testNestedAttributes() throws Exception
-    {
-        final FileObject nested = JarProviderTestCase.getTestJar(VFS.getManager(), "nested.jar");
-        final FileObject file = nested.resolveFile("test.jar");
-
-        final Map<String, Object> attributes = file.getContent().getAttributes();
-        Assert.assertEquals("1.0", attributes.get("Manifest-Version"));
-        // Debugging:
-        // this.printAttributes(attributes);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/jar/test/JarProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/jar/test/JarProviderTestCase.java
deleted file mode 100644
index 7ba42da..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/jar/test/JarProviderTestCase.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.commons.vfs2.provider.jar.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.jar.JarFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Jar file system.
- */
-public class JarProviderTestCase extends AbstractProviderTestConfig implements ProviderTestConfig
-{
-    static FileObject getTestJar(final FileSystemManager manager, final String name) throws Exception
-    {
-        final File jarFile = AbstractVfsTestCase.getTestResource(name);
-        final String uri = "jar:file:" + jarFile.getAbsolutePath() + "!/";
-        return manager.resolveFile(uri);
-    }
-
-    /**
-     * Creates the test suite for the jar file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new JarProviderTestCase(), true);
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        return JarProviderTestCase.getTestJar(manager, "test.jar");
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("jar", new JarFileProvider());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/jar/test/NestedJarTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/jar/test/NestedJarTestCase.java
deleted file mode 100644
index 6b7a50d..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/jar/test/NestedJarTestCase.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.commons.vfs2.provider.jar.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.jar.JarFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Zip file system.
- */
-public class NestedJarTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for nested jar files.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new NestedJarTestCase(), true);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        manager.addProvider("jar", new JarFileProvider());
-        manager.addExtensionMap("jar", "jar");
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        // Locate the Jar file
-        final File outerFile = AbstractVfsTestCase.getTestResource("nested.jar");
-        final String uri = "jar:file:" + outerFile.getAbsolutePath() + "!/test.jar";
-        final FileObject jarFile = manager.resolveFile(uri);
-
-        // Now build the nested file system
-        final FileObject nestedFS = manager.createFileSystem(jarFile);
-        return nestedFS.resolveFile("/");
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/ConversionTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/ConversionTestCase.java
deleted file mode 100644
index 780e786..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/ConversionTestCase.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.commons.vfs2.provider.local.test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URL;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.VFS;
-import org.junit.Ignore;
-import org.junit.Test;
-
-/**
- * Tests conversion from VFS to File.
- * <p>
- * VFS-443 Need an easy way to convert from a FileObject to a File.
- */
-public class ConversionTestCase
-{
-
-    @Test
-    @Ignore
-    public void testFileNameWithSpaces() throws URISyntaxException, IOException
-    {
-        final File file = new File("target", "a name.txt");
-        final String fileURL = file.toURI().toURL().toExternalForm();
-        assertEquals(file.getAbsoluteFile(), new File(file.toURI().getPath()));
-        assertEquals(file.getAbsoluteFile(), new File(new URL(fileURL).toURI().getPath()));
-
-        final FileSystemManager manager = VFS.getManager();
-        final FileObject fo = manager.resolveFile(fileURL);
-        assertEquals(file.getAbsoluteFile(), new File(new URL(fo.getURL().toExternalForm()).toURI().getPath()));
-    }
-
-    @Test
-    @Ignore
-    public void testFileNameWithCharacters() throws URISyntaxException, IOException
-    {
-        final File file = new File("target", "+# %&.txt");
-        final String fileURL = file.toURI().toURL().toExternalForm();
-        assertEquals(file.getAbsoluteFile(), new File(file.toURI().getPath()));
-        assertEquals(file.getAbsoluteFile(), new File(new URL(fileURL).toURI().getPath()));
-        try
-        {
-            new FileOutputStream(file).close();
-            assertTrue(file.exists());
-
-            final FileSystemManager manager = VFS.getManager();
-            final FileObject fo = manager.resolveFile(fileURL);
-            assertTrue(fo.exists());
-            assertEquals(file.getAbsoluteFile(), new File(new URL(fo.getURL().toExternalForm()).toURI().getPath()));
-        }
-        finally
-        {
-            file.delete();
-        }
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/FileNameTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/FileNameTests.java
deleted file mode 100644
index 33d84a3..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/FileNameTests.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.commons.vfs2.provider.local.test;
-
-import java.io.File;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.test.AbstractProviderTestCase;
-
-/**
- * Additional naming tests for local file system.
- */
-public class FileNameTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Tests resolution of an absolute file name.
-     */
-    public void testAbsoluteFileName() throws Exception
-    {
-        // Locate file by absolute file name
-        final String fileName = new File("testdir").getAbsolutePath();
-        final FileObject absFile = getManager().resolveFile(fileName);
-
-        // Locate file by URI
-        final String uri = "file://" + fileName.replace(File.separatorChar, '/');
-        final FileObject uriFile = getManager().resolveFile(uri);
-
-        assertSame("file object", absFile, uriFile);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/LocalProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/LocalProviderTestCase.java
deleted file mode 100644
index 06d4602..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/LocalProviderTestCase.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.commons.vfs2.provider.local.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.PermissionsTests;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-import org.apache.commons.vfs2.util.Os;
-
-/**
- * Tests for the local file system.
- */
-public class LocalProviderTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for the local file system.
-     */
-    public static Test suite() throws Exception
-    {
-        final ProviderTestSuite testSuite = new ProviderTestSuite(new LocalProviderTestCase());
-
-        testSuite.addTests(FileNameTests.class);
-        // VFS-325
-        testSuite.addTests(UrlTests.class);
-        testSuite.addTests(PermissionsTests.class);
-
-        if (Os.isFamily(Os.OS_FAMILY_WINDOWS))
-        {
-            testSuite.addTests(WindowsFileNameTests.class);
-        }
-
-        return testSuite;
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final File testDir = AbstractVfsTestCase.getTestDirectoryFile();
-        return manager.toFileObject(testDir);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/UrlTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/UrlTests.java
deleted file mode 100644
index 713a1dd..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/UrlTests.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.commons.vfs2.provider.local.test;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.VFS;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.test.AbstractProviderTestCase;
-
-/**
- * Additional URL tests for local file system.
- *
- * @version $Revision$
- */
-public class UrlTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Tests FindFiles with a filename that has a hash sign in it.
-     */
-    public void testHashFindFiles() throws Exception
-    {
-        final FileSystemManager fsManager = VFS.getManager();
-
-        final FileObject[] foList = getBaseFolder().findFiles(Selectors.SELECT_FILES);
-
-        boolean hashFileFound = false;
-        for (final FileObject fo : foList)
-        {
-            if (fo.getURL().toString().contains("test-hash"))
-            {
-                hashFileFound = true;
-
-                assertEquals(fo.toString(), UriParser.decode(fo.getURL().toString()));
-            }
-        }
-
-        if (!hashFileFound)
-        {
-            fail("Test hash file containing 'test-hash' not found");
-        }
-    }
-
-    /**
-     * Tests resolution of an absolute file name.
-     */
-    public void testHashURL() throws Exception
-    {
-        final FileObject file = getReadFolder().resolveFile("test-hash-#test.txt");
-
-        assertEquals(file.toString(), UriParser.decode(file.getURL().toString()));
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/WindowsFileNameTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/WindowsFileNameTests.java
deleted file mode 100644
index ea858c9..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/local/test/WindowsFileNameTests.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.commons.vfs2.provider.local.test;

-

-import org.apache.commons.vfs2.FileName;

-import org.apache.commons.vfs2.FileObject;

-import org.apache.commons.vfs2.FileSystemException;

-import org.apache.commons.vfs2.provider.local.WindowsFileName;

-import org.apache.commons.vfs2.test.AbstractProviderTestCase;

-

-/**

- * Additional naming tests for local file system.

- * <p>

- * Only executed on Windows O/S.

- */

-public class WindowsFileNameTests

-    extends AbstractProviderTestCase

-{

-    public void testWindowsRoots() throws Exception

-    {

-        // valid URI forms of the filesystem root

-        String[] tests = new String[] { "file:///C:/", "file://C:/", "file:/C:/", "file:C:/" };

-

-        for(String name : tests)

-        {

-            FileName fn = getManager().resolveFile(name).getName();

-

-            // the following tests work for Windows file names only

-            assertSame(WindowsFileName.class, fn.getClass());

-

-            // all should result in the same FileName

-            assertEquals("file:///C:/", fn.toString());

-            assertEquals("/", fn.getPath());

-            assertEquals("/", fn.getPathDecoded());

-            assertEquals("file:///C:/", fn.getRootURI());

-            assertEquals("file:///C:/", fn.getFriendlyURI());

-

-            assertEquals("file:///C:/", fn.getRoot().toString());

-

-            assertEquals("", fn.getExtension());

-            assertEquals("", fn.getBaseName());

-        }

-    }

-

-    public void testWindowsWrongRoots() throws Exception

-    {

-        String[] tests = new String[] { "file:///C:", "file://C:", "file:/C:", "file:C:" };

-

-        for(String name : tests)

-        {

-            try

-            {

-                FileName fn = getManager().resolveFile(name).getName();

-                fail("should not accept root " + name);

-            }

-            catch (FileSystemException ex)

-            {

-                assertEquals("vfs.provider/invalid-absolute-uri.error", ex.getCode());

-                assertTrue(ex.toString().indexOf(name) >= 0);

-            }

-        }

-    }

-

-    public void testWindowsFilenameUNCStartError() throws Exception

-    {

-        try

-        {

-            final String FILE = "file://///";

-            FileObject fo = getManager().resolveFile(FILE);

-            fail("Windows File Parser should not allow " + FILE + " " + fo);

-        }

-        catch(FileSystemException ex)

-        {

-            assertEquals("Exception code", "vfs.provider/invalid-absolute-uri.error", ex.getCode());

-            ex = (FileSystemException)ex.getCause();

-            assertEquals("Exception code", "vfs.provider.local/missing-share-name.error", ex.getCode());

-        }

-    }

-

-    public void testWindowsFilenameParserError() throws Exception

-    {

-        // check VFS-338 with 2+4 slashes we want a dedicated error

-        try

-        {

-            final String FILE = "file://////";

-            FileObject fo = getManager().resolveFile(FILE);

-            fail("Windows File Parser should not allow " + FILE + " " + fo);

-        }

-        catch(FileSystemException ex)

-        {

-            assertEquals("Exception code", "vfs.provider/invalid-absolute-uri.error", ex.getCode());

-            ex = (FileSystemException)ex.getCause();

-            assertEquals("Exception code", "vfs.provider.local/not-absolute-file-name.error", ex.getCode());

-        }

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ram/test/CustomRamProviderTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ram/test/CustomRamProviderTest.java
deleted file mode 100644
index bc0b7e0..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ram/test/CustomRamProviderTest.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.ram.test;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.ram.RamFileProvider;
-import org.apache.commons.vfs2.provider.ram.RamFileSystemConfigBuilder;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Custom tests
- *
- * @version $Id$
- */
-public class CustomRamProviderTest
-{
-    private static final byte[] NON_EMPTY_FILE_CONTENT = new byte[]{ 1, 2, 3 };
-
-    private final List<Closeable> closeables = new ArrayList<Closeable>();
-
-    FileSystemOptions defaultRamFso = new FileSystemOptions();
-
-    DefaultFileSystemManager manager;
-
-    FileSystemOptions smallSizedFso = new FileSystemOptions();
-
-    FileSystemOptions zeroSizedFso = new FileSystemOptions();
-
-    /**
-     * Closes the given {@link Closeable} during the tearDown phase.
-     */
-    private <C extends Closeable> C closeOnTearDown(final C closeable)
-    {
-        this.closeables.add(closeable);
-        return closeable;
-    }
-
-    private InputStream createEmptyFile() throws FileSystemException, IOException
-    {
-        final FileObject root = manager.resolveFile("ram://file");
-        root.createFile();
-        return this.closeOnTearDown(root.getContent().getInputStream());
-    }
-
-    private InputStream createNonEmptyFile() throws FileSystemException, IOException
-    {
-        final FileObject root = manager.resolveFile("ram://file");
-        root.createFile();
-
-        final FileContent content = root.getContent();
-        final OutputStream output = this.closeOnTearDown(content.getOutputStream());
-        output.write(1);
-        output.write(2);
-        output.write(3);
-        output.flush();
-        output.close();
-
-        return this.closeOnTearDown(content.getInputStream());
-    }
-
-    @Before
-    public void setUp() throws Exception
-    {
-        manager = new DefaultFileSystemManager();
-        manager.addProvider("ram", new RamFileProvider());
-        manager.init();
-
-        // File Systems Options
-        RamFileSystemConfigBuilder.getInstance().setMaxSize(zeroSizedFso, 0L);
-        RamFileSystemConfigBuilder.getInstance().setMaxSize(smallSizedFso, 10L);
-    }
-
-    @After
-    public void tearDown() throws Exception
-    {
-        for (final Closeable closeable : this.closeables)
-        {
-            try
-            {
-                closeable.close();
-            } catch (final Exception e)
-            {
-                // ignore
-            }
-        }
-        manager.close();
-    }
-
-    @Test
-    public void testReadEmptyFileByteByByte() throws FileSystemException, IOException
-    {
-        final InputStream input = this.createEmptyFile();
-        assertEquals("Empty file didnt return EOF -1", -1, input.read());
-    }
-
-    @Test
-    public void testReadEmptyFileIntoBuffer() throws FileSystemException, IOException
-    {
-        final InputStream input = this.createEmptyFile();
-
-        final byte[] buffer = new byte[100];
-        assertEquals("Empty file didnt return when filling buffer", -1, input.read(buffer));
-        assertArrayEquals("Buffer was written too", new byte[100], buffer);
-    }
-
-    @Test
-    public void testReadEmptyFileIntoBufferWithOffsetAndLength() throws FileSystemException, IOException
-    {
-        final InputStream input = this.createEmptyFile();
-        final byte[] buffer = new byte[100];
-        assertEquals("Empty file didnt return when filling buffer", -1, input.read(buffer, 10, 90));
-        assertArrayEquals("Buffer was written too", new byte[100], buffer);
-    }
-
-    @Test
-    public void testReadNonEmptyFileByteByByte() throws FileSystemException, IOException
-    {
-        final InputStream input = this.createNonEmptyFile();
-
-        assertEquals("Read 1st byte failed", 1, input.read());
-        assertEquals("Rread 2st byte failed", 2, input.read());
-        assertEquals("Read 3st byte failed", 3, input.read());
-        assertEquals("File should be empty", -1, input.read());
-    }
-
-    @Test
-    public void testReadNonEmptyFileIntoBuffer() throws FileSystemException, IOException
-    {
-        final InputStream input = this.createNonEmptyFile();
-
-        final byte[] buffer = new byte[100];
-        assertEquals("Filling buffer failed when file is not empty", NON_EMPTY_FILE_CONTENT.length, input.read(buffer));
-
-        final byte[] expectedBuffer = new byte[100];
-        System.arraycopy(NON_EMPTY_FILE_CONTENT, 0, expectedBuffer, 0, NON_EMPTY_FILE_CONTENT.length);
-        assertArrayEquals("Buffer not filled", expectedBuffer, buffer);
-
-        Arrays.fill(buffer, (byte) 0);
-        Arrays.fill(expectedBuffer, (byte) 0);
-
-        assertEquals("File should be empty after filling buffer", -1, input.read(buffer));
-        assertArrayEquals("Buffer was written when empty", expectedBuffer, buffer);
-    }
-
-    @Test
-    public void testReadNonEmptyFileIntoBufferWithOffsetAndLength() throws FileSystemException, IOException
-    {
-        final InputStream input = this.createNonEmptyFile();
-
-        final byte[] buffer = new byte[100];
-        final int offset = 10;
-        assertEquals("Filling buffer failed when file is not empty", NON_EMPTY_FILE_CONTENT.length,
-                input.read(buffer, offset, 100 - offset));
-
-        final byte[] expectedBuffer = new byte[100];
-        System.arraycopy(NON_EMPTY_FILE_CONTENT, 0, expectedBuffer, offset, NON_EMPTY_FILE_CONTENT.length);
-        assertArrayEquals("Buffer not filled", expectedBuffer, buffer);
-
-        Arrays.fill(buffer, (byte) 0);
-        Arrays.fill(expectedBuffer, (byte) 0);
-        assertEquals("File should be empty after filling buffer", -1, input.read(buffer, 10, 90));
-        assertArrayEquals("Buffer was written when empty", expectedBuffer, buffer);
-    }
-
-    /**
-     *
-     * Checks root folder exists
-     *
-     * @throws FileSystemException
-     */
-    @Test
-    public void testRootFolderExists() throws FileSystemException
-    {
-        final FileObject root = manager.resolveFile("ram:///", defaultRamFso);
-        assertTrue(root.getType().hasChildren());
-
-        try
-        {
-            root.delete();
-            fail();
-        } catch (final FileSystemException e)
-        {
-            // Expected
-        }
-
-    }
-
-    @Test
-    public void testFSOptions() throws Exception
-    {
-        // Default FS
-        final FileObject fo1 = manager.resolveFile("ram:/");
-        final FileObject fo2 = manager.resolveFile("ram:/");
-        assertTrue("Both files should exist in the same fs instance.", fo1.getFileSystem() == fo2.getFileSystem());
-
-        FileSystemOptions fsOptions = fo1.getFileSystem().getFileSystemOptions();
-        long maxFilesystemSize = RamFileSystemConfigBuilder.getInstance().getLongMaxSize(fsOptions);
-        assertEquals("Filesystem option maxSize must be unlimited", Long.MAX_VALUE, maxFilesystemSize);
-
-        // Small FS
-        final FileObject fo3 = manager.resolveFile("ram:/fo3", smallSizedFso);
-        final FileObject fo4 = manager.resolveFile("ram:/", smallSizedFso);
-        assertTrue("Both files should exist in the same FileSystem instance.", fo3.getFileSystem() == fo4.getFileSystem());
-        assertTrue("Both files should exist in different FileSystem instance.", fo1.getFileSystem() != fo3.getFileSystem());
-
-        fsOptions = fo3.getFileSystem().getFileSystemOptions();
-        maxFilesystemSize = RamFileSystemConfigBuilder.getInstance().getLongMaxSize(fsOptions);
-        assertEquals("Filesystem option maxSize must be set", 10, maxFilesystemSize);
-    }
-
-    @Test
-    public void testSmallFS() throws Exception
-    {
-        // Small FS
-        final FileObject fo3 = manager.resolveFile("ram:/fo3", smallSizedFso);
-        fo3.createFile();
-        try
-        {
-            final OutputStream os = fo3.getContent().getOutputStream();
-            os.write(new byte[10]);
-            os.close();
-        } catch (final FileSystemException e)
-        {
-            fail("Test should be able to save such a small file");
-        }
-
-        try
-        {
-            final OutputStream os = fo3.getContent().getOutputStream();
-            os.write(new byte[11]);
-            os.close();
-            fail("It shouldn't save such a big file");
-        } catch (final FileSystemException e)
-        {
-            // Expected
-        }
-
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ram/test/RamProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ram/test/RamProviderTestCase.java
deleted file mode 100644
index f57d4f7..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/ram/test/RamProviderTestCase.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.commons.vfs2.provider.ram.test;
-
-
-import junit.framework.Test;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider;
-import org.apache.commons.vfs2.provider.ram.RamFileProvider;
-import org.apache.commons.vfs2.provider.ram.RamFileSystem;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the RAM file system.
- */
-public class RamProviderTestCase extends AbstractProviderTestConfig implements
-        ProviderTestConfig
-{
-    private boolean inited = false;
-
-    /** logger */
-    private static Log log = LogFactory.getLog(RamProviderTestCase.class);
-
-    /**
-     * Creates the test suite for the ram file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new RamProviderTestCase());
-    }
-
-    /**
-     * Prepares the file system manager.
-     *
-     * Imports test data from the disk.
-     *
-     * @throws Exception
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-            throws Exception
-    {
-        try
-        {
-            manager.addProvider("ram", new RamFileProvider());
-            manager.addProvider("file", new DefaultLocalFileProvider());
-        }
-        catch (final Exception e)
-        {
-            log.error(e);
-            throw e;
-        }
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager)
-            throws Exception
-    {
-        if (!inited)
-        {
-            // Import the test tree
-            final FileObject fo = manager.resolveFile("ram:/");
-            final RamFileSystem fs = (RamFileSystem) fo.getFileSystem();
-            fs.importTree(getTestDirectoryFile());
-            fo.close();
-
-            inited=true;
-        }
-
-        final String uri = "ram:/";
-        return manager.resolveFile(uri);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/res/test/ResourceProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/res/test/ResourceProviderTestCase.java
deleted file mode 100644
index 027542e..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/res/test/ResourceProviderTestCase.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.commons.vfs2.provider.res.test;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.jar.JarFileProvider;
-import org.apache.commons.vfs2.provider.res.ResourceFileProvider;
-import org.apache.commons.vfs2.provider.url.UrlFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Test cases for the resource provider.
- */
-public class ResourceProviderTestCase extends AbstractProviderTestConfig
-{
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new ResourceProviderTestCase());
-    }
-
-    /**
-     * Prepares the file system manager.  This implementation does nothing.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        manager.addProvider("res", new ResourceFileProvider());
-        manager.addProvider("file", new UrlFileProvider());
-        manager.addProvider("jar", new JarFileProvider());
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager)
-        throws Exception
-    {
-        final String baseDir = AbstractVfsTestCase.getResourceTestDirectory();
-        return manager.resolveFile("res:" + baseDir);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/sftp/test/SftpProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/sftp/test/SftpProviderTestCase.java
deleted file mode 100644
index bf6480d..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/sftp/test/SftpProviderTestCase.java
+++ /dev/null
@@ -1,785 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.sftp.test;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.URI;
-import java.security.PublicKey;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.TreeMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.sftp.SftpFileProvider;
-import org.apache.commons.vfs2.provider.sftp.SftpFileSystem;
-import org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder;
-import org.apache.commons.vfs2.provider.sftp.SftpStreamProxy;
-import org.apache.commons.vfs2.provider.sftp.TrustEveryoneUserInfo;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.PermissionsTests;
-import org.apache.commons.vfs2.test.ProviderReadTests;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-import org.apache.commons.vfs2.util.FreeSocketPortUtil;
-import org.apache.ftpserver.ftplet.FtpException;
-import org.apache.sshd.SshServer;
-import org.apache.sshd.common.NamedFactory;
-import org.apache.sshd.common.Session;
-import org.apache.sshd.common.SshException;
-import org.apache.sshd.common.session.AbstractSession;
-import org.apache.sshd.common.util.Buffer;
-import org.apache.sshd.common.util.SecurityUtils;
-import org.apache.sshd.server.Command;
-import org.apache.sshd.server.Environment;
-import org.apache.sshd.server.ExitCallback;
-import org.apache.sshd.server.FileSystemFactory;
-import org.apache.sshd.server.FileSystemView;
-import org.apache.sshd.server.ForwardingFilter;
-import org.apache.sshd.server.PasswordAuthenticator;
-import org.apache.sshd.server.PublickeyAuthenticator;
-import org.apache.sshd.server.SshFile;
-import org.apache.sshd.server.auth.UserAuthNone;
-import org.apache.sshd.server.command.ScpCommandFactory;
-import org.apache.sshd.server.filesystem.NativeSshFile;
-import org.apache.sshd.server.keyprovider.PEMGeneratorHostKeyProvider;
-import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
-import org.apache.sshd.server.session.ServerSession;
-import org.apache.sshd.server.sftp.SftpSubsystem;
-
-import com.jcraft.jsch.SftpATTRS;
-import com.jcraft.jsch.TestIdentityRepositoryFactory;
-
-/**
- * Tests cases for the SFTP provider.
- * <p>
- * Starts and stops an embedded Apache SSHd (MINA) server.
- * </p>
- */
-public class SftpProviderTestCase extends AbstractProviderTestConfig
-{
-    /**
-     * The underlying filesystem
-     */
-    private SftpFileSystem filesystem;
-
-    /**
-     * Implements FileSystemFactory because SSHd does not know about users and home directories.
-     */
-    static final class TestFileSystemFactory implements FileSystemFactory
-    {
-        /**
-         * Accepts only the known test user.
-         */
-        @Override
-        public FileSystemView createFileSystemView(final Session session) throws IOException
-        {
-            final String userName = session.getUsername();
-            if (!DEFAULT_USER.equals(userName))
-            {
-                return null;
-            }
-            return new TestFileSystemView(AbstractVfsTestCase.getTestDirectory(), userName);
-        }
-    }
-
-    /**
-     * Implements FileSystemView because SSHd does not know about users and home directories.
-     */
-    static final class TestFileSystemView implements FileSystemView
-    {
-        private final String homeDirStr;
-
-        private final String userName;
-
-        // private boolean caseInsensitive;
-
-        public TestFileSystemView(final String homeDirStr, final String userName)
-        {
-            this.homeDirStr = new File(homeDirStr).getAbsolutePath();
-            this.userName = userName;
-        }
-
-        @Override
-        public SshFile getFile(final SshFile baseDir, final String file)
-        {
-            return this.getFile(baseDir.getAbsolutePath(), file);
-        }
-
-        @Override
-        public SshFile getFile(final String file)
-        {
-            return this.getFile(homeDirStr, file);
-        }
-
-        protected SshFile getFile(final String dir, final String file)
-        {
-            final String home = removePrefix(NativeSshFile.normalizeSeparateChar(homeDirStr));
-            String userFileName = removePrefix(NativeSshFile.normalizeSeparateChar(file));
-            final File sshFile = userFileName.startsWith(home) ? new File(userFileName) : new File(home, userFileName);
-            userFileName = removePrefix(NativeSshFile.normalizeSeparateChar(sshFile.getAbsolutePath()));
-            return new TestNativeSshFile(userFileName, sshFile, userName);
-        }
-
-        private String removePrefix(final String s)
-        {
-            final int index = s.indexOf('/');
-            if (index < 1)
-            {
-                return s;
-            }
-            return s.substring(index);
-        }
-    }
-
-    /**
-     * Extends NativeSshFile because its constructor is protected and I do not want to create a whole NativeSshFile implementation for
-     * testing.
-     */
-    static class TestNativeSshFile extends NativeSshFile
-    {
-        TestNativeSshFile(final String fileName, final File file, final String userName)
-        {
-            super(fileName, file, userName);
-        }
-    }
-
-    private static int SocketPort;
-
-    private static final String DEFAULT_USER = "testtest";
-
-    // private static final String DEFAULT_PWD = "testtest";
-
-    private static String ConnectionUri;
-
-    private static SshServer Server;
-
-    private static final String TEST_URI = "test.sftp.uri";
-
-    /** True if we are testing the SFTP stream proxy */
-    private final boolean streamProxyMode;
-
-    private static String getSystemTestUriOverride()
-    {
-        return System.getProperty(TEST_URI);
-    }
-
-    /**
-     * Creates and starts an embedded Apache SSHd Server (MINA).
-     *
-     * @throws FtpException
-     * @throws IOException
-     */
-    private static void setUpClass() throws FtpException, IOException, InterruptedException
-    {
-        SocketPort = FreeSocketPortUtil.findFreeLocalPort();
-        // Use %40 for @ in a URL
-        ConnectionUri = String.format("sftp://%s@localhost:%d", DEFAULT_USER, SocketPort);
-
-        if (Server != null)
-        {
-            return;
-        }
-        // System.setProperty("vfs.sftp.sshdir", getTestDirectory() + "/../vfs.sftp.sshdir");
-        final String tmpDir = System.getProperty("java.io.tmpdir");
-        Server = SshServer.setUpDefaultServer();
-        Server.setPort(SocketPort);
-        if (SecurityUtils.isBouncyCastleRegistered())
-        {
-            // A temporary file will hold the key
-            final File keyFile = File.createTempFile("key", ".pem", new File(tmpDir));
-            keyFile.deleteOnExit();
-            // It has to be deleted in order to be generated
-            keyFile.delete();
-
-            final PEMGeneratorHostKeyProvider keyProvider = new PEMGeneratorHostKeyProvider(keyFile.getAbsolutePath());
-            Server.setKeyPairProvider(keyProvider);
-        } else
-        {
-            Server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(tmpDir + "/key.ser"));
-        }
-        final List<NamedFactory<Command>> list = new ArrayList<NamedFactory<Command>>(1);
-        list.add(new NamedFactory<Command>()
-        {
-
-            @Override
-            public String getName()
-            {
-                return "sftp";
-            }
-
-            @Override
-            public Command create()
-            {
-                return new MySftpSubsystem();
-            }
-        });
-        Server.setSubsystemFactories(list);
-        Server.setPasswordAuthenticator(new PasswordAuthenticator()
-        {
-            @Override
-            public boolean authenticate(final String username, final String password, final ServerSession session)
-            {
-                return username != null && username.equals(password);
-            }
-        });
-        Server.setPublickeyAuthenticator(new PublickeyAuthenticator()
-        {
-            @Override
-            public boolean authenticate(final String username, final PublicKey key, final ServerSession session)
-            {
-                // File f = new File("/Users/" + username + "/.ssh/authorized_keys");
-                return true;
-            }
-        });
-        Server.setForwardingFilter(new ForwardingFilter()
-        {
-            @Override
-            public boolean canConnect(final InetSocketAddress address, final ServerSession session)
-            {
-                return true;
-            }
-
-            @Override
-            public boolean canForwardAgent(final ServerSession session)
-            {
-                return true;
-            }
-
-            @Override
-            public boolean canForwardX11(final ServerSession session)
-            {
-                return true;
-            }
-
-            @Override
-            public boolean canListen(final InetSocketAddress address, final ServerSession session)
-            {
-                return true;
-            }
-        });
-        // Allows the execution of commands
-        Server.setCommandFactory(new ScpCommandFactory(new TestCommandFactory()));
-        // HACK Start
-        // How do we really do simple user to directory matching?
-        Server.setFileSystemFactory(new TestFileSystemFactory());
-        // HACK End
-        Server.start();
-        // HACK Start
-        // How do we really do simple security?
-        // Do this after we start the server to simplify this set up code.
-        Server.getUserAuthFactories().add(new UserAuthNone.Factory());
-        // HACK End
-    }
-
-
-    static private class BaseProviderTestSuite extends ProviderTestSuite {
-
-        public BaseProviderTestSuite(final ProviderTestConfig providerConfig) throws Exception
-        {
-            super(providerConfig);
-        }
-
-        @Override
-        protected void tearDown() throws Exception
-        {
-            // Close all active sessions
-            // Note that it should be done by super.tearDown()
-            // while closing
-            for (final AbstractSession session : Server.getActiveSessions()) {
-                session.close(true);
-            }
-            super.tearDown();
-        }
-
-    }
-
-    /**
-     * Creates the test suite for the ftp file system.
-     */
-    public static Test suite() throws Exception
-    {
-        // The test suite to be returned
-        final TestSuite suite = new TestSuite();
-
-        // --- Standard VFS test suite
-        final SftpProviderTestCase standardTestCase = new SftpProviderTestCase(false);
-        final ProviderTestSuite sftpSuite = new BaseProviderTestSuite(standardTestCase);
-
-        // VFS-405: set/get permissions
-        sftpSuite.addTests(PermissionsTests.class);
-
-        suite.addTest(sftpSuite);
-
-
-        // --- VFS-440: stream proxy test suite
-        // We override the addBaseTests method so that only
-        // one test is run (we just test that the input/output are correctly forwarded, and
-        // hence if the reading test succeeds/fails the other will also succeed/fail)
-        final SftpProviderTestCase streamProxyTestCase = new SftpProviderTestCase(true);
-        final ProviderTestSuite sftpStreamSuite = new BaseProviderTestSuite(streamProxyTestCase)
-        {
-            @Override
-            protected void addBaseTests() throws Exception
-            {
-                // Just tries to read
-                addTests(ProviderReadTests.class);
-            }
-        };
-        suite.addTest(sftpStreamSuite);
-
-
-        // Decorate the test suite to set up the Sftp server
-        final TestSetup setup = new TestSetup(suite)
-        {
-            @Override
-            protected void setUp() throws Exception
-            {
-                if (getSystemTestUriOverride() == null)
-                {
-                    setUpClass();
-                }
-                super.setUp();
-            }
-
-            @Override
-            protected void tearDown() throws Exception
-            {
-                // Close SFTP server if needed
-                tearDownClass();
-                super.tearDown();
-            }
-        };
-
-
-        return setup;
-    }
-
-    /**
-     * Stops the embedded Apache SSHd Server (MINA).
-     *
-     * @throws InterruptedException
-     */
-    private static void tearDownClass() throws InterruptedException
-    {
-        if (Server != null)
-        {
-            Server.stop();
-        }
-    }
-
-    public SftpProviderTestCase(final boolean streamProxyMode) throws IOException
-    {
-        this.streamProxyMode = streamProxyMode;
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        String uri = getSystemTestUriOverride();
-        if (uri == null)
-        {
-            uri = ConnectionUri;
-        }
-
-        final FileSystemOptions fileSystemOptions = new FileSystemOptions();
-        final SftpFileSystemConfigBuilder builder = SftpFileSystemConfigBuilder.getInstance();
-        builder.setStrictHostKeyChecking(fileSystemOptions, "no");
-        builder.setUserInfo(fileSystemOptions, new TrustEveryoneUserInfo());
-        builder.setIdentityRepositoryFactory(fileSystemOptions, new TestIdentityRepositoryFactory());
-
-        if (streamProxyMode)
-        {
-            final FileSystemOptions proxyOptions = (FileSystemOptions) fileSystemOptions.clone();
-
-            final URI parsedURI = new URI(uri);
-            final String userInfo = parsedURI.getUserInfo();
-            final String[] userFields = userInfo.split(":", 2);
-
-            builder.setProxyType(fileSystemOptions, SftpFileSystemConfigBuilder.PROXY_STREAM);
-            builder.setProxyUser(fileSystemOptions, userFields[0]);
-            if (userFields.length > 1)
-            {
-                builder.setProxyPassword(fileSystemOptions, userFields[1]);
-            }
-            builder.setProxyHost(fileSystemOptions, parsedURI.getHost());
-            builder.setProxyPort(fileSystemOptions, parsedURI.getPort());
-            builder.setProxyCommand(fileSystemOptions, SftpStreamProxy.NETCAT_COMMAND);
-            builder.setProxyOptions(fileSystemOptions, proxyOptions);
-            builder.setProxyPassword(fileSystemOptions, parsedURI.getAuthority());
-
-            // Set up the new URI
-            uri = String.format("sftp://%s@localhost:%d", userInfo, parsedURI.getPort());
-        }
-
-        final FileObject fileObject = manager.resolveFile(uri, fileSystemOptions);
-        this.filesystem = (SftpFileSystem) fileObject.getFileSystem();
-        return fileObject;
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("sftp", new SftpFileProvider());
-    }
-
-
-    /**
-     * The command factory for the SSH server:
-     * Handles these commands
-     * <p>
-     * <li><code>id -u</code> (permissions test)</li>
-     * <li><code>id -G</code> (permission tests)</li>
-     * <li><code>nc -q 0 localhost port</code> (Stream proxy tests)</li>
-     * </p>
-     */
-    private static class TestCommandFactory extends ScpCommandFactory
-    {
-
-        public static final Pattern NETCAT_COMMAND = Pattern.compile("nc -q 0 localhost (\\d+)");
-
-        @Override
-        public Command createCommand(final String command)
-        {
-            return new Command()
-            {
-                public ExitCallback callback = null;
-                public OutputStream out = null;
-                public OutputStream err = null;
-                public InputStream in = null;
-
-                @Override
-                public void setInputStream(final InputStream in)
-                {
-                    this.in = in;
-                }
-
-                @Override
-                public void setOutputStream(final OutputStream out)
-                {
-                    this.out = out;
-                }
-
-                @Override
-                public void setErrorStream(final OutputStream err)
-                {
-                    this.err = err;
-                }
-
-                @Override
-                public void setExitCallback(final ExitCallback callback)
-                {
-                    this.callback = callback;
-
-                }
-
-                @Override
-                public void start(final Environment env) throws IOException
-                {
-                    int code = 0;
-                    if (command.equals("id -G") || command.equals("id -u"))
-                    {
-                        new PrintStream(out).println(0);
-                    } else if (NETCAT_COMMAND.matcher(command).matches())
-                    {
-                        final Matcher matcher = NETCAT_COMMAND.matcher(command);
-                        matcher.matches();
-                        final int port = Integer.parseInt(matcher.group(1));
-
-                        final Socket socket = new Socket((String) null, port);
-
-                        if (out != null)
-                        {
-                            connect("from nc", socket.getInputStream(), out, null);
-                        }
-
-                        if (in != null)
-                        {
-                            connect("to nc", in, socket.getOutputStream(), callback);
-                        }
-
-                        return;
-
-                    } else
-                    {
-                        if (err != null)
-                        {
-                            new PrintStream(err).format("Unknown command %s%n", command);
-                        }
-                        code = -1;
-                    }
-
-                    if (out != null)
-                    {
-                        out.flush();
-                    }
-                    if (err != null)
-                    {
-                        err.flush();
-                    }
-                    callback.onExit(code);
-                }
-
-                @Override
-                public void destroy()
-                {
-                }
-            };
-        }
-    }
-
-    /**
-     * Creates a pipe thread that connects an input to an output
-     * @param name The name of the thread (for debugging purposes)
-     * @param in The input stream
-     * @param out The output stream
-     * @param callback An object whose method {@linkplain ExitCallback#onExit(int)} will be
-     *                 called when the pipe is broken. The integer argument is 0 if everything
-     *                 went well.
-     */
-    private static void connect(final String name, final InputStream in, final OutputStream out, final ExitCallback callback)
-    {
-        final Thread thread = new Thread(new Runnable()
-        {
-            @Override
-            public void run()
-            {
-                int code = 0;
-                try
-                {
-                    final byte buffer[] = new byte[1024];
-                    int len;
-                    while ((len = in.read(buffer, 0, buffer.length)) != -1)
-                    {
-                        out.write(buffer, 0, len);
-                        out.flush();
-                    }
-                }
-                catch (final SshException ex)
-                {
-                    // Nothing to do, this occurs when the connection
-                    // is closed on the remote side
-                }
-                catch (final IOException ex)
-                {
-                    if (!ex.getMessage().equals("Pipe closed"))
-                    {
-                        code = -1;
-                    }
-                }
-                if (callback != null)
-                {
-                    callback.onExit(code);
-                }
-            }
-        }, name);
-        thread.setDaemon(true);
-        thread.start();
-    }
-
-
-    private static class SftpAttrs
-    {
-        int flags = 0;
-        private int uid;
-        long size = 0;
-        private int gid;
-        private int atime;
-        private int permissions;
-        private int mtime;
-        private String[] extended;
-
-        private SftpAttrs(final Buffer buf)
-        {
-            int flags = 0;
-            flags = buf.getInt();
-
-            if ((flags & SftpATTRS.SSH_FILEXFER_ATTR_SIZE) != 0)
-            {
-                size = buf.getLong();
-            }
-            if ((flags & SftpATTRS.SSH_FILEXFER_ATTR_UIDGID) != 0)
-            {
-                uid = buf.getInt();
-                gid = buf.getInt();
-            }
-            if ((flags & SftpATTRS.SSH_FILEXFER_ATTR_PERMISSIONS) != 0)
-            {
-                permissions = buf.getInt();
-            }
-            if ((flags & SftpATTRS.SSH_FILEXFER_ATTR_ACMODTIME) != 0)
-            {
-                atime = buf.getInt();
-            }
-            if ((flags & SftpATTRS.SSH_FILEXFER_ATTR_ACMODTIME) != 0)
-            {
-                mtime = buf.getInt();
-            }
-
-        }
-    }
-
-    private static class MySftpSubsystem extends SftpSubsystem
-    {
-        TreeMap<String, Integer> permissions = new TreeMap<String, Integer>();
-        private int _version;
-
-        @Override
-        protected void process(final Buffer buffer) throws IOException
-        {
-            final int rpos = buffer.rpos();
-            final int length = buffer.getInt();
-            final int type = buffer.getByte();
-            final int id = buffer.getInt();
-
-            switch (type)
-            {
-                case SSH_FXP_SETSTAT:
-                case SSH_FXP_FSETSTAT:
-                {
-                    // Get the path
-                    final String path = buffer.getString();
-                    // Get the permission
-                    final SftpAttrs attrs = new SftpAttrs(buffer);
-                    permissions.put(path, attrs.permissions);
-//                    System.err.format("Setting [%s] permission to %o%n", path, attrs.permissions);
-                    break;
-                }
-
-                case SSH_FXP_REMOVE:
-                {
-                    // Remove cached attributes
-                    final String path = buffer.getString();
-                    permissions.remove(path);
-//                    System.err.format("Removing [%s] permission cache%n", path);
-                    break;
-                }
-
-                case SSH_FXP_INIT:
-                {
-                    // Just grab the version here
-                    this._version = id;
-                    break;
-                }
-            }
-
-            buffer.rpos(rpos);
-            super.process(buffer);
-
-        }
-
-        @Override
-        protected void writeAttrs(final Buffer buffer, final SshFile file, final int flags) throws IOException
-        {
-            if (!file.doesExist()) {
-                throw new FileNotFoundException(file.getAbsolutePath());
-            }
-
-
-            int p = 0;
-
-            final Integer cached = permissions.get(file.getAbsolutePath());
-            if (cached != null)
-            {
-                // Use cached permissions
-//                System.err.format("Using cached [%s] permission of %o%n", file.getAbsolutePath(), cached);
-                p |= cached;
-            } else
-            {
-                // Use permissions from Java file
-                if (file.isReadable())
-                {
-                    p |= S_IRUSR;
-                }
-                if (file.isWritable())
-                {
-                    p |= S_IWUSR;
-                }
-                if (file.isExecutable())
-                {
-                    p |= S_IXUSR;
-                }
-            }
-
-            if (_version >= 4)
-            {
-                final long size = file.getSize();
-//                String username = session.getUsername();
-                final long lastModif = file.getLastModified();
-                if (file.isFile())
-                {
-                    buffer.putInt(SSH_FILEXFER_ATTR_PERMISSIONS);
-                    buffer.putByte((byte) SSH_FILEXFER_TYPE_REGULAR);
-                    buffer.putInt(p);
-                } else if (file.isDirectory()) {
-                    buffer.putInt(SSH_FILEXFER_ATTR_PERMISSIONS);
-                    buffer.putByte((byte) SSH_FILEXFER_TYPE_DIRECTORY);
-                    buffer.putInt(p);
-                } else {
-                    buffer.putInt(0);
-                    buffer.putByte((byte) SSH_FILEXFER_TYPE_UNKNOWN);
-                }
-            } else {
-                if (file.isFile()) {
-                    p |= 0100000;
-                }
-                if (file.isDirectory()) {
-                    p |= 0040000;
-                }
-
-
-                if (file.isFile()) {
-                    buffer.putInt(SSH_FILEXFER_ATTR_SIZE| SSH_FILEXFER_ATTR_PERMISSIONS | SSH_FILEXFER_ATTR_ACMODTIME);
-                    buffer.putLong(file.getSize());
-                    buffer.putInt(p);
-                    buffer.putInt(file.getLastModified()/1000);
-                    buffer.putInt(file.getLastModified()/1000);
-                } else if (file.isDirectory()) {
-                    buffer.putInt(SSH_FILEXFER_ATTR_PERMISSIONS | SSH_FILEXFER_ATTR_ACMODTIME);
-                    buffer.putInt(p);
-                    buffer.putInt(file.getLastModified()/1000);
-                    buffer.putInt(file.getLastModified()/1000);
-                } else {
-                    buffer.putInt(0);
-                }
-            }
-        }
-
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/LargeTarTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/LargeTarTestCase.java
deleted file mode 100644
index 3f21084..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/LargeTarTestCase.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.commons.vfs2.provider.tar.test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.commons.compress.archivers.ArchiveStreamFactory;
-import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
-import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
-import org.apache.commons.compress.compressors.CompressorStreamFactory;
-import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;
-import org.apache.commons.compress.utils.IOUtils;
-import org.apache.commons.vfs2.CacheStrategy;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.cache.SoftRefFilesCache;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider;
-import org.apache.commons.vfs2.provider.tar.TarFileProvider;
-import org.junit.Before;
-import org.junit.Test;
-
-//@SuppressWarnings("nls")
-public class LargeTarTestCase {
-  private final static String baseDir = "target/test-classes/test-data/";
-
-  private DefaultFileSystemManager manager;
-  private final static String largeFilePath = baseDir;
-  private final static String largeFileName = "largefile";
-
-
-  @Before
-public void setUp() throws Exception {
-    manager = new DefaultFileSystemManager();
-
-    manager.setFilesCache(new SoftRefFilesCache());
-    manager.setCacheStrategy(CacheStrategy.ON_RESOLVE);
-
-    manager.addProvider("file", new DefaultLocalFileProvider());
-    manager.addProvider("tgz", new TarFileProvider());
-    manager.addProvider("tar", new TarFileProvider());
-
-    new File(baseDir).mkdir(); // if test is run standalone
-    createLargeFile(largeFilePath, largeFileName);
-  }
-
-  @Test
-  public void testLargeFile() throws Exception {
-    final File realFile = new File(largeFilePath + largeFileName + ".tar.gz");
-
-    final FileObject file = manager.resolveFile("tgz:file://" + realFile.getCanonicalPath() + "!/");
-
-    assertNotNull(file);
-    final List<FileObject> files = Arrays.asList(file.getChildren());
-
-    assertNotNull(files);
-    assertEquals(1, files.size());
-    final FileObject f = files.get(0);
-
-    assertTrue("Expected file not found: " + largeFileName + ".txt",
-        f.getName().getBaseName().equals(largeFileName + ".txt"));
-  }
-
-/*
-  public void testFileCheck() throws Exception {
-    String[] expectedFiles = {
-      "plugins.tsv",
-      "languages.tsv",
-      "browser_type.tsv",
-      "timezones.tsv",
-      "color_depth.tsv",
-      "resolution.tsv",
-      "connection_type.tsv",
-      "search_engines.tsv",
-      "javascript_version.tsv",
-      "operating_systems.tsv",
-      "country.tsv",
-      "browser.tsv"
-    };
-
-    fileCheck(expectedFiles, "tar:file://c:/temp/data/data/data-small.tar");
-  } */
-
-  protected void fileCheck(final String[] expectedFiles, final String tarFile) throws Exception {
-    assertNotNull(manager);
-    final FileObject file = manager.resolveFile(tarFile);
-
-    assertNotNull(file);
-    final List<FileObject> files = Arrays.asList(file.getChildren());
-
-    assertNotNull(files);
-    for (final String expectedFile : expectedFiles)
-    {
-      assertTrue("Expected file not found: " + expectedFile, fileExists(expectedFile, files));
-    }
-  }
-
-  /**
-   * Search for the expected file in a given list, without using the full path.
-   *
-   * @param expectedFile the expected file.
-   * @param files a list of files to search.
-   * @return {@code true} if {@code expectedFile} is in {@code files}.
-   */
-    protected boolean fileExists(final String expectedFile, final List<FileObject> files)
-    {
-        for (final FileObject file : files)
-        {
-            if (file.getName().getBaseName().equals(expectedFile))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    protected boolean endsWith(final String testString, final String[] testList)
-    {
-        for (final String string : testList)
-        {
-            if (testString.endsWith(string))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-  //@SuppressWarnings("unused")
-  protected void createLargeFile(final String path, final String name) throws Exception {
-    final long _1K = 1024;
-    final long _1M = 1024 * _1K;
-//    long _256M = 256 * _1M;
-//    long _512M = 512 * _1M;
-    final long _1G = 1024 * _1M;
-
-    // File size of 3 GB
-    final long fileSize = 3 * _1G;
-
-    final File tarGzFile = new File(path + name + ".tar.gz");
-
-    if(!tarGzFile.exists()) {
-      System.out.println("This test is a bit slow. It needs to write 3GB of data as a compressed file (approx. 3MB) to your hard drive");
-
-      final PipedOutputStream outTarFileStream = new PipedOutputStream();
-      final PipedInputStream inTarFileStream = new PipedInputStream(outTarFileStream);
-
-      final Thread source = new Thread(){
-
-        @Override
-        public void run() {
-            final byte ba_1k[] = new byte[(int) _1K];
-            for(int i=0; i < ba_1k.length; i++){
-                ba_1k[i]='a';
-            }
-            try {
-                final TarArchiveOutputStream outTarStream =
-                    (TarArchiveOutputStream)new ArchiveStreamFactory()
-                    .createArchiveOutputStream(ArchiveStreamFactory.TAR, outTarFileStream);
-                // Create archive contents
-                final TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(name + ".txt");
-                tarArchiveEntry.setSize(fileSize);
-
-                outTarStream.putArchiveEntry(tarArchiveEntry);
-                for(long i = 0; i < fileSize; i+= ba_1k.length) {
-                    outTarStream.write(ba_1k);
-                }
-                outTarStream.closeArchiveEntry();
-                outTarStream.close();
-                outTarFileStream.close();
-            } catch (final Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-      };
-      source.start();
-
-      // Create compressed archive
-      final OutputStream outGzipFileStream = new FileOutputStream(path + name + ".tar.gz");
-
-      final GzipCompressorOutputStream outGzipStream = (GzipCompressorOutputStream)new CompressorStreamFactory()
-      .createCompressorOutputStream(CompressorStreamFactory.GZIP, outGzipFileStream);
-
-      IOUtils.copy(inTarFileStream, outGzipStream);
-      inTarFileStream.close();
-
-      outGzipStream.close();
-      outGzipFileStream.close();
-
-    }
-  }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTarTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTarTestCase.java
deleted file mode 100644
index cc18179..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTarTestCase.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.commons.vfs2.provider.tar.test;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemConfigBuilder;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.auth.StaticUserAuthenticator;
-import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.tar.TarFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Tar file system, using a tar file nested inside another tar file.
- */
-public class NestedTarTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for nested tar files.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new NestedTarTestCase(), true);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        manager.addProvider("tar", new TarFileProvider());
-        manager.addExtensionMap("tar", "tar");
-        manager.addMimeTypeMap("application/x-tar", "tar");
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        // We test with non-empty FS options to make sure they are propagated
-        final FileSystemOptions opts = new FileSystemOptions();
-        DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, new StaticUserAuthenticator("domain",  null,  null));
-
-        // Locate the base Tar file
-        final String tarFilePath = AbstractVfsTestCase.getTestResource("nested.tar").getAbsolutePath();
-
-        // Now build the nested file system
-        final String uri = "tar:file:" + tarFilePath + "!/test.tar";
-        final FileObject tarFile = manager.resolveFile(uri, opts);
-        final FileObject nestedFS = manager.createFileSystem(tarFile);
-        return nestedFS.resolveFile("/");
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTbz2TestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTbz2TestCase.java
deleted file mode 100644
index f8f8235..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTbz2TestCase.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.commons.vfs2.provider.tar.test;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.tar.TarFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Tar file system, using a tar file nested inside another tar file.
- */
-public class NestedTbz2TestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for nested tar files.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new NestedTbz2TestCase(), true);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        manager.addProvider("tbz2", new TarFileProvider());
-        manager.addExtensionMap("tbz2", "tbz2");
-        manager.addProvider("tar", new TarFileProvider());
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        // Locate the base Tar file
-        final String tarFilePath = AbstractVfsTestCase.getTestResource("nested.tbz2").getAbsolutePath();
-        final String uri = "tbz2:file:" + tarFilePath + "!/test.tbz2";
-        final FileObject tarFile = manager.resolveFile(uri);
-
-        // Now build the nested file system
-        final FileObject nestedFS = manager.createFileSystem(tarFile);
-        return nestedFS.resolveFile("/");
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTgzTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTgzTestCase.java
deleted file mode 100644
index 69746b6..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTgzTestCase.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.commons.vfs2.provider.tar.test;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.tar.TarFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Tar file system, using a tar file nested inside another tar file.
- */
-public class NestedTgzTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for nested tar files.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new NestedTgzTestCase(), true);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        manager.addProvider("tgz", new TarFileProvider());
-        manager.addExtensionMap("tgz", "tgz");
-        manager.addProvider("tar", new TarFileProvider());
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        // Locate the base Tar file
-        final String tarFilePath = AbstractVfsTestCase.getTestResource("nested.tgz").getAbsolutePath();
-        final String uri = "tgz:file:" + tarFilePath + "!/test.tgz";
-        final FileObject tarFile = manager.resolveFile(uri);
-
-        // Now build the nested file system
-        final FileObject nestedFS = manager.createFileSystem(tarFile);
-        return nestedFS.resolveFile("/");
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/TarProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/TarProviderTestCase.java
deleted file mode 100644
index 2aa466e..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/TarProviderTestCase.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.commons.vfs2.provider.tar.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.tar.TarFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Tar file system.
- */
-public class TarProviderTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for the tar file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new TarProviderTestCase(), true);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("tar", new TarFileProvider());
-        manager.addMimeTypeMap("application/x-tar", "tar");
-    }
-
-    /**
-     * Returns the base folder for read tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final File tarFile = AbstractVfsTestCase.getTestResource("test.tar");
-        final String uri = "tar:file:" + tarFile.getAbsolutePath() + "!/";
-        return manager.resolveFile(uri);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/Tbz2ProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/Tbz2ProviderTestCase.java
deleted file mode 100644
index 5104518..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/Tbz2ProviderTestCase.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.commons.vfs2.provider.tar.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.tar.TarFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Tar file system.
- */
-public class Tbz2ProviderTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for the tar file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new Tbz2ProviderTestCase(), true);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("tbz2", new TarFileProvider());
-        manager.addProvider("tar", new TarFileProvider());
-    }
-
-    /**
-     * Returns the base folder for read tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final File tarFile = AbstractVfsTestCase.getTestResource("test.tbz2");
-        final String uri = "tbz2:file:" + tarFile.getAbsolutePath() + "!/";
-        return manager.resolveFile(uri);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/TgzProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/TgzProviderTestCase.java
deleted file mode 100644
index dc8db6b..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/TgzProviderTestCase.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.commons.vfs2.provider.tar.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.tar.TarFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Tar file system.
- */
-public class TgzProviderTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for the tar file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new TgzProviderTestCase(), true);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        // manager.addProvider("tgz", new TgzFileProvider());
-        manager.addProvider("tgz", new TarFileProvider());
-        manager.addProvider("tar", new TarFileProvider());
-    }
-
-    /**
-     * Returns the base folder for read tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final File tarFile = AbstractVfsTestCase.getTestResource("test.tgz");
-        final String uri = "tgz:file:" + tarFile.getAbsolutePath() + "!/";
-        return manager.resolveFile(uri);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/temp/test/TemporaryProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/temp/test/TemporaryProviderTestCase.java
deleted file mode 100644
index 43009fe..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/temp/test/TemporaryProviderTestCase.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.commons.vfs2.provider.temp.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.temp.TemporaryFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Test cases for the tmp: file provider.
- */
-public class TemporaryProviderTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for the tmp file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new TemporaryProviderTestCase());
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        final File baseDir = AbstractVfsTestCase.getTestDirectoryFile();
-        manager.addProvider("tmp", new TemporaryFileProvider(baseDir));
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        return manager.resolveFile("tmp:/");
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/FileObjectSortTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/FileObjectSortTestCase.java
deleted file mode 100644
index 93eb682..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/FileObjectSortTestCase.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.commons.vfs2.provider.test;

-

-import java.util.Arrays;

-import java.util.Collections;

-import java.util.List;

-

-import org.apache.commons.vfs2.FileObject;

-import org.apache.commons.vfs2.FileSystem;

-import org.apache.commons.vfs2.FileSystemException;

-import org.apache.commons.vfs2.VFS;

-import org.junit.Assert;

-import org.junit.BeforeClass;

-import org.junit.Test;

-

-/**

- * Tests FileObject sorting.

- *

- * $Id$

- */

-public class FileObjectSortTestCase {

-

-    /**

-     * The size of arrays to sort.

-     */

-    private static final int SIZE = 100;

-

-    // Consider @Immutable

-    private static FileSystem VfsFileSystem;

-

-    // Consider @Immutable

-    private static FileObject[] SortedArray;

-

-    // Consider @Immutable

-    private static FileObject[] UnSortedArray;

-

-    private static FileObject resolveFile(final FileSystem fs, final int i) throws FileSystemException {

-        return fs.resolveFile(String.format("%010d", i));

-    }

-

-    @BeforeClass

-    public static void setUpClass() throws FileSystemException {

-        VfsFileSystem = VFS.getManager().createVirtualFileSystem("vfs://").getFileSystem();

-        SortedArray = new FileObject[SIZE];

-        for (int i = 0; i < SIZE; i++) {

-            SortedArray[i] = FileObjectSortTestCase.resolveFile(VfsFileSystem, i);

-        }

-        UnSortedArray = new FileObject[SIZE];

-        for (int i = 0; i < SIZE; i++) {

-            UnSortedArray[i] = FileObjectSortTestCase.resolveFile(VfsFileSystem, SIZE - i - 1);

-        }

-    }

-

-    /**

-     * Tests that sorting ignores case.

-     *

-     * @throws FileSystemException

-     */

-    @Test

-    public void testSortArrayIgnoreCase() throws FileSystemException {

-        final FileObject file1 = VfsFileSystem.resolveFile("A1");

-        final FileObject file2 = VfsFileSystem.resolveFile("a2");

-        final FileObject file3 = VfsFileSystem.resolveFile("A3");

-        final FileObject[] actualArray = { file3, file1, file2, file1, file2 };

-        final FileObject[] expectedArray = { file1, file1, file2, file2, file3 };

-        Arrays.sort(actualArray);

-        Assert.assertArrayEquals(expectedArray, actualArray);

-    }

-

-    /**

-     * Tests sorting an array

-     *

-     * @throws FileSystemException

-     */

-    @Test

-    public void testSortArrayMoveAll() throws FileSystemException {

-        final FileObject[] actualArray = UnSortedArray.clone();

-        Assert.assertFalse(Arrays.equals(UnSortedArray, SortedArray));

-        Arrays.sort(actualArray);

-        Assert.assertArrayEquals(SortedArray, actualArray);

-    }

-

-    /**

-     * Tests that sorting an array already in oder does not mess it up.

-     *

-     * @throws FileSystemException

-     */

-    @Test

-    public void testSortArrayMoveNone() throws FileSystemException {

-        final FileObject[] actualArray = SortedArray.clone();

-        Arrays.sort(actualArray);

-        Assert.assertArrayEquals(SortedArray, actualArray);

-    }

-

-    /**

-     * Tests sorting a list

-     *

-     * @throws FileSystemException

-     */

-    @Test

-    public void testSortListMoveAll() throws FileSystemException {

-        final List<FileObject> actualList = Arrays.asList(UnSortedArray);

-        final List<FileObject> expectedSortedList = Arrays.asList(SortedArray);

-        Assert.assertFalse(actualList.equals(expectedSortedList));

-        Collections.sort(actualList);

-        Assert.assertTrue(actualList.equals(expectedSortedList));

-    }

-

-    /**

-     * Tests that sorting a list already in oder does not mess it up.

-     *

-     * @throws FileSystemException

-     */

-    @Test

-    public void testSortListMoveNone() throws FileSystemException {

-        final List<FileObject> actualList = Arrays.asList(SortedArray);

-        final List<FileObject> expectedSortedList = Arrays.asList(SortedArray);

-        Collections.sort(actualList);

-        Assert.assertTrue(actualList.equals(expectedSortedList));

-    }

-

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/GenericFileNameTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/GenericFileNameTestCase.java
deleted file mode 100644
index 925922e..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/GenericFileNameTestCase.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.commons.vfs2.provider.test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.GenericFileName;
-import org.apache.commons.vfs2.provider.URLFileNameParser;
-
-/**
- * Some GenericFileName test cases.
- */
-public class GenericFileNameTestCase
-    extends AbstractVfsTestCase
-{
-    /**
-     * Tests parsing a URI into its parts.
-     */
-    public void testParseUri() throws Exception
-    {
-        final URLFileNameParser urlParser = new URLFileNameParser(21);
-        // Simple name
-        GenericFileName name = (GenericFileName) urlParser.parseUri(null, null, "ftp://hostname/file");
-        assertEquals("ftp", name.getScheme());
-        assertNull(name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(21, name.getPort());
-        assertEquals(name.getDefaultPort(), name.getPort());
-        assertEquals("/file", name.getPath());
-        assertEquals("ftp://hostname/", name.getRootURI());
-        assertEquals("ftp://hostname/file", name.getURI());
-
-        // Name with port
-        name = (GenericFileName) urlParser.parseUri(null, null, "ftp://hostname:9090/file");
-        assertEquals("ftp", name.getScheme());
-        assertNull(name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(9090, name.getPort());
-        assertEquals("/file", name.getPath());
-        assertEquals("ftp://hostname:9090/", name.getRootURI());
-        assertEquals("ftp://hostname:9090/file", name.getURI());
-
-        // Name with no path
-        name = (GenericFileName) urlParser.parseUri(null, null, "ftp://hostname");
-        assertEquals("ftp", name.getScheme());
-        assertNull(name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(21, name.getPort());
-        assertEquals("/", name.getPath());
-        assertEquals("ftp://hostname/", name.getRootURI());
-        assertEquals("ftp://hostname/", name.getURI());
-
-        // Name with username
-        name = (GenericFileName) urlParser.parseUri(null, null, "ftp://user@hostname/file");
-        assertEquals("ftp", name.getScheme());
-        assertEquals("user", name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(21, name.getPort());
-        assertEquals("/file", name.getPath());
-        assertEquals("ftp://user@hostname/", name.getRootURI());
-        assertEquals("ftp://user@hostname/file", name.getURI());
-
-        // Name with username and password
-        name = (GenericFileName) urlParser.parseUri(null, null, "ftp://user:password@hostname/file");
-        assertEquals("ftp", name.getScheme());
-        assertEquals("user", name.getUserName());
-        assertEquals("password", name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(21, name.getPort());
-        assertEquals("/file", name.getPath());
-        assertEquals("ftp://user:password@hostname/", name.getRootURI());
-        assertEquals("ftp://user:password@hostname/file", name.getURI());
-
-        // Encoded username and password
-        name = (GenericFileName) urlParser.parseUri(null, null, "ftp://%75ser%3A:%40@hostname");
-        assertEquals("ftp", name.getScheme());
-        assertEquals("user:", name.getUserName());
-        assertEquals("@", name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(21, name.getPort());
-        assertEquals("/", name.getPath());
-        assertEquals("ftp://user%3a:%40@hostname/", name.getRootURI());
-        assertEquals("ftp://user%3a:%40@hostname/", name.getURI());
-    }
-
-    /**
-     * Tests error handling in URI parser.
-     */
-    public void testBadlyFormedUri() throws Exception
-    {
-        // Does not start with ftp://
-        testBadlyFormedUri("ftp:", "vfs.provider/missing-double-slashes.error");
-        testBadlyFormedUri("ftp:/", "vfs.provider/missing-double-slashes.error");
-        testBadlyFormedUri("ftp:a", "vfs.provider/missing-double-slashes.error");
-
-        // Missing hostname
-        testBadlyFormedUri("ftp://", "vfs.provider/missing-hostname.error");
-        testBadlyFormedUri("ftp://:21/file", "vfs.provider/missing-hostname.error");
-        testBadlyFormedUri("ftp:///file", "vfs.provider/missing-hostname.error");
-
-        // Empty port
-        testBadlyFormedUri("ftp://host:", "vfs.provider/missing-port.error");
-        testBadlyFormedUri("ftp://host:/file", "vfs.provider/missing-port.error");
-        testBadlyFormedUri("ftp://host:port/file", "vfs.provider/missing-port.error");
-
-        // Missing absolute path
-        testBadlyFormedUri("ftp://host:90a", "vfs.provider/missing-hostname-path-sep.error");
-        testBadlyFormedUri("ftp://host?a", "vfs.provider/missing-hostname-path-sep.error");
-    }
-
-    /**
-     * Tests that parsing a URI fails with the expected error.
-     */
-    private void testBadlyFormedUri(final String uri, final String errorMsg)
-    {
-        try
-        {
-            new URLFileNameParser(80).parseUri(null, null, uri);
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            assertSameMessage(errorMsg, uri, e);
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/JunctionProviderConfig.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/JunctionProviderConfig.java
deleted file mode 100644
index 6aa9f7b..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/JunctionProviderConfig.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.commons.vfs2.provider.test;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FilesCache;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-
-/**
- * A provider config that wraps another provider, to run the tests via
- * junctions.
- */
-public class JunctionProviderConfig
-    implements ProviderTestConfig
-{
-    private final ProviderTestConfig config;
-
-    public JunctionProviderConfig(final ProviderTestConfig config)
-    {
-        this.config = config;
-    }
-
-    /**
-     * Returns a DefaultFileSystemManager instance (or subclass instance).
-     */
-    @Override
-    public DefaultFileSystemManager getDefaultFileSystemManager() {
-        return config.getDefaultFileSystemManager();
-    }
-
-    @Override
-    public FilesCache getFilesCache()
-    {
-        return config.getFilesCache();
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        config.prepare(manager);
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final FileObject baseFolder = config.getBaseTestFolder(manager);
-
-        // Create an empty file system, then link in the base folder
-        final FileSystem newFs = manager.createVirtualFileSystem("vfs:").getFileSystem();
-        final String junctionPoint = "/some/dir";
-        newFs.addJunction(junctionPoint, baseFolder);
-
-        return newFs.resolveFile(junctionPoint);
-    }
-
-    @Override
-    public boolean isFileSystemRootAccessible()
-    {
-        return true;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/JunctionTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/JunctionTests.java
deleted file mode 100644
index d09a38a..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/JunctionTests.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.commons.vfs2.provider.test;
-
-import java.io.File;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.test.AbstractProviderTestCase;
-
-/**
- * Additional junction test cases.
- */
-public class JunctionTests
-    extends AbstractProviderTestCase
-{
-    private FileObject getBaseDir() throws FileSystemException
-    {
-        final File file = AbstractVfsTestCase.getTestDirectoryFile();
-        assertTrue(file.exists());
-        return getManager().toFileObject(file);
-    }
-
-    /**
-     * Checks nested junctions are not supported.
-     */
-    public void testNestedJunction() throws Exception
-    {
-        final FileSystem fs = getManager().createVirtualFileSystem("vfs:").getFileSystem();
-        final FileObject baseDir = getBaseDir();
-        fs.addJunction("/a", baseDir);
-
-        // Nested
-        try
-        {
-            fs.addJunction("/a/b", baseDir);
-            fail();
-        }
-        catch (final Exception e)
-        {
-            assertSameMessage("vfs.impl/nested-junction.error", "vfs:/a/b", e);
-        }
-
-        // At same point
-        try
-        {
-            fs.addJunction("/a", baseDir);
-            fail();
-        }
-        catch (final Exception e)
-        {
-            assertSameMessage("vfs.impl/nested-junction.error", "vfs:/a", e);
-        }
-    }
-
-    /**
-     * Checks ancestors are created when a junction is created.
-     */
-    public void testAncestors() throws Exception
-    {
-        final FileSystem fs = getManager().createVirtualFileSystem("vfs://").getFileSystem();
-        final FileObject baseDir = getBaseDir();
-
-        // Make sure the file at the junction point and its ancestors do not exist
-        FileObject file = fs.resolveFile("/a/b");
-        assertFalse(file.exists());
-        file = file.getParent();
-        assertFalse(file.exists());
-        file = file.getParent();
-        assertFalse(file.exists());
-
-        // Add the junction
-        fs.addJunction("/a/b", baseDir);
-
-        // Make sure the file at the junction point and its ancestors exist
-        file = fs.resolveFile("/a/b");
-        assertTrue("Does not exist", file.exists());
-        file = file.getParent();
-        assertTrue("Does not exist", file.exists());
-        file = file.getParent();
-        assertTrue("Does not exist", file.exists());
-    }
-
-    // Check that file @ junction point exists only when backing file exists
-    // Add 2 junctions with common parent
-    // Compare real and virtual files
-    // Events
-    // Remove junctions
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/VirtualProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/VirtualProviderTestCase.java
deleted file mode 100644
index 0d15c51..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/test/VirtualProviderTestCase.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.commons.vfs2.provider.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Test cases for the virtual file system provider.
- */
-public class VirtualProviderTestCase
-    extends AbstractProviderTestConfig
-{
-    public static Test suite() throws Exception
-    {
-        final ProviderTestSuite testSuite = new ProviderTestSuite(new VirtualProviderTestCase());
-        testSuite.addTests(JunctionTests.class);
-        return testSuite;
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final File baseDir = AbstractVfsTestCase.getTestDirectoryFile();
-        final FileObject baseFile = manager.toFileObject(baseDir);
-        return manager.createVirtualFileSystem(baseFile);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/url/test/UrlHttpProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/url/test/UrlHttpProviderTestCase.java
deleted file mode 100644
index 201485e..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/url/test/UrlHttpProviderTestCase.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.commons.vfs2.provider.url.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.url.UrlFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Test cases for the generic provider.
- */
-public class UrlHttpProviderTestCase
-    extends AbstractProviderTestConfig
-{
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new UrlHttpProviderTestCase());
-    }
-
-    /**
-     * Prepares the file system manager.  This implementation does nothing.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        manager.addProvider("http", new UrlFileProvider());
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager)
-        throws Exception
-    {
-        final File baseDir = AbstractVfsTestCase.getTestDirectoryFile();
-        return manager.resolveFile(baseDir.toURI().toURL().toExternalForm());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/url/test/UrlProviderHttpTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/url/test/UrlProviderHttpTestCase.java
deleted file mode 100644
index 031f205..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/url/test/UrlProviderHttpTestCase.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.commons.vfs2.provider.url.test;
-
-import java.io.File;
-import java.io.IOException;
-
-import junit.framework.Test;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.url.UrlFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-import org.apache.commons.vfs2.util.FreeSocketPortUtil;
-import org.apache.commons.vfs2.util.NHttpServer;
-
-/**
- * Test cases for HTTP with the default provider.
- *
- */
-public class UrlProviderHttpTestCase extends AbstractProviderTestConfig
-{
-    private static NHttpServer Server;
-
-    private static int SocketPort;
-
-    private static final String TEST_URI = "test.http.uri";
-
-    /**
-     * Use %40 for @ in URLs
-     */
-    private static String ConnectionUri;
-
-    private static String getSystemTestUriOverride()
-    {
-        return System.getProperty(TEST_URI);
-    }
-
-    /**
-     * Creates and starts an embedded Apache HTTP Server ().
-     *
-     * @throws Exception
-     */
-    private static void setUpClass() throws Exception
-    {
-        Server = new NHttpServer();
-        if (!Server.run(SocketPort, new File(getTestDirectory()), 5000))
-        {
-            throw new IllegalStateException("The embedded HTTP server has not completed startup, increase wait time");
-        }
-    }
-
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new UrlProviderHttpTestCase())
-        {
-            @Override
-            protected void setUp() throws Exception
-            {
-                if (getSystemTestUriOverride() == null)
-                {
-                    setUpClass();
-                }
-                super.setUp();
-            }
-
-            @Override
-            protected void tearDown() throws Exception
-            {
-                tearDownClass();
-                super.tearDown();
-            }
-        };
-    }
-
-    /**
-     * Stops the embedded Apache HTTP Server ().
-     *
-     * @throws IOException
-     */
-    private static void tearDownClass() throws IOException
-    {
-        if (Server != null)
-        {
-            Server.stop();
-        }
-    }
-
-    public UrlProviderHttpTestCase() throws IOException
-    {
-        SocketPort = FreeSocketPortUtil.findFreeLocalPort();
-        // Use %40 for @ in a URL
-        ConnectionUri = "http://localhost:" + SocketPort;
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        String uri = getSystemTestUriOverride();
-        if (uri == null)
-        {
-            uri = ConnectionUri;
-        }
-        return manager.resolveFile(uri);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("http", new UrlFileProvider());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/url/test/UrlProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/url/test/UrlProviderTestCase.java
deleted file mode 100644
index 6f36b47..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/url/test/UrlProviderTestCase.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.commons.vfs2.provider.url.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.url.UrlFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Test cases for the generic provider.
- */
-public class UrlProviderTestCase
-    extends AbstractProviderTestConfig
-{
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new UrlProviderTestCase());
-    }
-
-    /**
-     * Prepares the file system manager.  This implementation does nothing.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        manager.addProvider("file", new UrlFileProvider());
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager)
-        throws Exception
-    {
-        final File baseDir = AbstractVfsTestCase.getTestDirectoryFile();
-        return manager.resolveFile(baseDir.toURI().toURL().toExternalForm());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/JackrabbitMain.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/JackrabbitMain.java
deleted file mode 100644
index f3684fb..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/JackrabbitMain.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*

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

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

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

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

- *

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

- *

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

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

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

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

- * limitations under the License.

- */

-

-package org.apache.commons.vfs2.provider.webdav.test;

-

-import java.io.File;

-import java.io.IOException;

-import java.io.InputStream;

-import java.net.URL;

-import java.util.Collections;

-import java.util.Enumeration;

-

-import org.apache.commons.cli.CommandLine;

-import org.apache.commons.cli.GnuParser;

-import org.apache.commons.cli.HelpFormatter;

-import org.apache.commons.cli.Options;

-import org.apache.commons.cli.ParseException;

-import org.apache.commons.io.IOUtils;

-import org.apache.jackrabbit.servlet.jackrabbit.JackrabbitRepositoryServlet;

-import org.apache.jackrabbit.standalone.Main;

-import org.apache.log4j.AppenderSkeleton;

-import org.apache.log4j.ConsoleAppender;

-import org.apache.log4j.FileAppender;

-import org.apache.log4j.Layout;

-import org.apache.log4j.Level;

-import org.apache.log4j.Logger;

-import org.apache.log4j.PatternLayout;

-import org.apache.log4j.Priority;

-import org.mortbay.jetty.Connector;

-import org.mortbay.jetty.NCSARequestLog;

-import org.mortbay.jetty.Server;

-import org.mortbay.jetty.bio.SocketConnector;

-import org.mortbay.jetty.handler.RequestLogHandler;

-import org.mortbay.jetty.servlet.ServletHolder;

-import org.mortbay.jetty.webapp.WebAppContext;

-

-/**

- * Manages a Jackrabbit server instance.

- *

- * Copied and minimally changed from Jackrabbit's Main class in 1.5.2 to add a shutdown method.

- *

- * @since 2.1

- */

-class JackrabbitMain

-{

-

-    /**

-     * @param args

-     */

-    public static void main(final String[] args) throws Exception

-    {

-        new JackrabbitMain(args).run();

-    }

-

-    private final Options options = new Options();

-

-    private final CommandLine command;

-

-    private final RequestLogHandler accessLog = new RequestLogHandler();

-

-    private final WebAppContext webapp = new WebAppContext();

-

-    private final Connector connector = new SocketConnector();

-

-    private final Server server = new Server();

-

-    private FileAppender jackrabbitAppender;

-    private FileAppender jettyAppender;

-

-

-    public JackrabbitMain(final String[] args) throws ParseException

-    {

-        options.addOption("?", "help", false, "print this message");

-        options.addOption("n", "notice", false, "print copyright notices");

-        options.addOption("l", "license", false, "print license information");

-

-        options.addOption("q", "quiet", false, "disable console output");

-        options.addOption("d", "debug", false, "enable debug logging");

-

-        options.addOption("h", "host", true, "IP address of the HTTP server");

-        options.addOption("p", "port", true, "TCP port of the HTTP server (8080)");

-        options.addOption("f", "file", true, "location of this jar file");

-        options.addOption("r", "repo", true, "repository directory (jackrabbit)");

-        options.addOption("c", "conf", true, "repository configuration file");

-

-        command = new GnuParser().parse(options, args);

-    }

-

-    private void copyToOutput(final String resource) throws IOException

-    {

-        final InputStream stream = JackrabbitMain.class.getResourceAsStream(resource);

-        try

-        {

-            IOUtils.copy(stream, System.out);

-        } finally

-        {

-            stream.close();

-        }

-    }

-

-    private void message(final String message)

-    {

-        if (!command.hasOption("quiet"))

-        {

-            System.out.println(message);

-        }

-    }

-

-    private void prepareAccessLog(final File log)

-    {

-        final NCSARequestLog ncsa = new NCSARequestLog(new File(log, "access.log.yyyy_mm_dd").getPath());

-        ncsa.setFilenameDateFormat("yyyy-MM-dd");

-        accessLog.setRequestLog(ncsa);

-    }

-

-    private void prepareConnector()

-    {

-        final String port = command.getOptionValue("port", "8080");

-        connector.setPort(Integer.parseInt(port));

-        final String host = command.getOptionValue("host");

-        if (host != null)

-        {

-            connector.setHost(host);

-        }

-    }

-

-    private void prepareServerLog(final File log) throws IOException

-    {

-        final Layout layout = new PatternLayout("%d{dd.MM.yyyy HH:mm:ss} *%-5p* %c{1}: %m%n");

-

-        final Logger jackrabbitLog = Logger.getRootLogger();

-        jackrabbitAppender = new FileAppender(layout, new File(log, "jackrabbit.log").getPath());

-        jackrabbitAppender.setThreshold(Level.ALL);

-        jackrabbitLog.addAppender(jackrabbitAppender);

-

-        final Logger jettyLog = Logger.getLogger("org.mortbay.log");

-        jettyAppender = new FileAppender(layout, new File(log, "jetty.log").getPath());

-        jettyAppender.setThreshold(Level.ALL);

-        jettyLog.addAppender(jettyAppender);

-        jettyLog.setAdditivity(false);

-

-        System.setProperty("derby.stream.error.file", new File(log, "derby.log").getPath());

-    }

-

-    private void prepareShutdown()

-    {

-        Runtime.getRuntime().addShutdownHook(new Thread()

-        {

-            @Override

-            public void run()

-            {

-                try

-                {

-                    shutdown();

-                } catch (final Exception e)

-                {

-                    e.printStackTrace();

-                }

-            }

-

-        });

-    }

-

-    private void prepareWebapp(final File file, final File repository, final File tmp)

-    {

-        webapp.setContextPath("/");

-        webapp.setWar(file.getPath());

-        webapp.setClassLoader(JackrabbitMain.class.getClassLoader());

-        // we use a modified web.xml which has some servlets remove (which produce random empty directories)

-        URL res = getResource("/jcrweb.xml");

-        if (res != null)

-            webapp.setDescriptor(res.toString());

-        webapp.setExtractWAR(false);

-        webapp.setTempDirectory(tmp);

-

-        final ServletHolder servlet = new ServletHolder(JackrabbitRepositoryServlet.class);

-        servlet.setInitOrder(1);

-        servlet.setInitParameter("repository.home", repository.getAbsolutePath());

-        final String conf = command.getOptionValue("conf");

-        if (conf != null)

-        {

-            servlet.setInitParameter("repository.config", conf);

-        }

-        webapp.addServlet(servlet, "/repository.properties");

-    }

-

-    /** Try to load a resource with various classloaders. */

-    private URL getResource(String name)

-    {

-        URL res = Thread.currentThread().getContextClassLoader().getResource(name);

-        if (res == null)

-        {

-            res = getClass().getResource(name);

-        }

-        return res; // might be null

-    }

-

-    public void run() throws Exception

-    {

-        String defaultFile = "jackrabbit-standalone.jar";

-        final URL location = Main.class.getProtectionDomain().getCodeSource().getLocation();

-        if (location != null && "file".equals(location.getProtocol()))

-        {

-            final File file = new File(location.getPath());

-            if (file.isFile())

-            {

-                defaultFile = location.getPath();

-            }

-        }

-        final File file = new File(command.getOptionValue("file", defaultFile));

-

-        if (command.hasOption("help"))

-        {

-            final HelpFormatter formatter = new HelpFormatter();

-            formatter.printHelp("java -jar " + file.getName(), options, true);

-        } else if (command.hasOption("notice"))

-        {

-            copyToOutput("/META-INF/NOTICE.txt");

-        } else if (command.hasOption("license"))

-        {

-            copyToOutput("/META-INF/LICENSE.txt");

-        } else

-        {

-            message("Welcome to Apache Jackrabbit!");

-            message("-------------------------------");

-

-            final File repository = new File(command.getOptionValue("repo", "target/test/jackrabbit"));

-            message("Using repository directory " + repository);

-            repository.mkdirs();

-            final File tmp = new File(repository, "tmp");

-            tmp.mkdir();

-            final File log = new File(repository, "log");

-            log.mkdir();

-

-            message("Writing log messages to " + log);

-            prepareServerLog(log);

-

-            message("Starting the server...");

-            prepareWebapp(file, repository, tmp);

-            accessLog.setHandler(webapp);

-            prepareAccessLog(log);

-            server.setHandler(accessLog);

-

-            prepareConnector();

-            server.addConnector(connector);

-            prepareShutdown();

-

-            try

-            {

-                server.start();

-

-                String host = connector.getHost();

-                if (host == null)

-                {

-                    host = "localhost";

-                }

-                message("Apache Jackrabbit is now running at " + "http://" + host + ":" + connector.getPort() + "/");

-            } catch (final Throwable t)

-            {

-                System.err.println("Unable to start the server: " + t.getMessage());

-                System.exit(1);

-            }

-        }

-    }

-

-    public void shutdown() throws Exception, InterruptedException

-    {

-        message("Shutting down the server...");

-        server.setGracefulShutdown(5);

-        server.stop();

-        Logger.getRootLogger().removeAppender(jackrabbitAppender);

-        Logger.getLogger("org.mortbay.log").removeAppender(jettyAppender);

-        jackrabbitAppender.close();

-        jettyAppender.close();

-        server.join();

-        message("-------------------------------");

-        message("Goodbye from Apache Jackrabbit!");

-    }

-

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/JcrUtils.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/JcrUtils.java
deleted file mode 100644
index 10ccbc8..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/JcrUtils.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.

- */

-

-// COPIED FROM JACKRABBIT 2.4.0

-

-package org.apache.commons.vfs2.provider.webdav.test;

-

-import java.io.InputStream;

-import java.util.Calendar;

-

-import javax.jcr.Node;

-import javax.jcr.RepositoryException;

-import javax.jcr.Value;

-

-/**

- * Collection of static utility methods for use with the JCR 1.0 API and Apache Jackrabbit 1.5.2.

- *

- * Copied, adapted and pruned down from Jackrabbit 2.4.0.

- *

- * @since 2.1

- */

-class JcrUtils

-{

-

-    private static final String NodeType_NT_RESOURCE = "nt:resource";

-

-    private static final String Node_JCR_CONTENT = "jcr:content";

-

-    private static final String NodeType_NT_FOLDER = "nt:folder";

-

-    private static final String NodeType_NT_FILE = "nt:file";

-

-    private static final String Property_JCR_MIMETYPE = "jcr:mimeType";

-

-    private static final String Property_JCR_ENCODING = "jcr:encoding";

-

-    private static final String Property_JCR_LAST_MODIFIED = "jcr:lastModified";

-

-    private static final String Property_JCR_DATA = "jcr:data";

-

-    /**

-     * Returns the named child of the given node, creating it as an nt:folder node if it does not already exist. The caller is expected to

-     * take care of saving or discarding any transient changes.

-     * <p>

-     * Note that the type of the returned node is <em>not</em> guaranteed to match nt:folder in case the node already existed. The caller

-     * can use an explicit {@link Node#isNodeType(String)} check if needed, or simply use a data-first approach and not worry about the node

-     * type until a constraint violation is encountered.

-     *

-     * @param parent

-     *            parent node

-     * @param name

-     *            name of the child node

-     * @return the child node

-     * @throws RepositoryException

-     *             if the child node can not be accessed or created

-     */

-    public static Node getOrAddFolder(final Node parent, final String name) throws RepositoryException

-    {

-        return getOrAddNode(parent, name, NodeType_NT_FOLDER);

-    }

-

-    /**

-     * Returns the named child of the given node, creating the child if it does not already exist. If the child node gets added, then it is

-     * created with the given node type. The caller is expected to take care of saving or discarding any transient changes.

-     *

-     * @see Node#getNode(String)

-     * @see Node#addNode(String, String)

-     * @see Node#isNodeType(String)

-     * @param parent

-     *            parent node

-     * @param name

-     *            name of the child node

-     * @param type

-     *            type of the child node, ignored if the child already exists

-     * @return the child node

-     * @throws RepositoryException

-     *             if the child node can not be accessed or created

-     */

-    public static Node getOrAddNode(final Node parent, final String name, final String type) throws RepositoryException

-    {

-        if (parent.hasNode(name))

-        {

-            return parent.getNode(name);

-        } else

-        {

-            return parent.addNode(name, type);

-        }

-    }

-

-    /**

-     * Creates or updates the named child of the given node. If the child does not already exist, then it is created using the nt:file node

-     * type. This file child node is returned from this method.

-     * <p>

-     * If the file node does not already contain a jcr:content child, then one is created using the nt:resource node type. The following

-     * properties are set on the jcr:content node:

-     * <dl>

-     * <dt>jcr:mimeType</dt>

-     * <dd>media type</dd>

-     * <dt>jcr:encoding (optional)</dt>

-     * <dd>charset parameter of the media type, if any</dd>

-     * <dt>jcr:lastModified</dt>

-     * <dd>current time</dd>

-     * <dt>jcr:data</dt>

-     * <dd>binary content</dd>

-     * </dl>

-     * <p>

-     * Note that the types of the returned node or the jcr:content child are <em>not</em> guaranteed to match nt:file and nt:resource in

-     * case the nodes already existed. The caller can use an explicit {@link Node#isNodeType(String)} check if needed, or simply use a

-     * data-first approach and not worry about the node type until a constraint violation is encountered.

-     * <p>

-     * The given binary content stream is closed by this method.

-     *

-     * @param parent

-     *            parent node

-     * @param name

-     *            name of the file

-     * @param mime

-     *            media type of the file

-     * @param data

-     *            binary content of the file

-     * @return the child node

-     * @throws RepositoryException

-     *             if the child node can not be created or updated

-     */

-    public static Node putFile(final Node parent, final String name, final String mime, final InputStream data) throws RepositoryException

-    {

-        return putFile(parent, name, mime, data, Calendar.getInstance());

-    }

-

-    /**

-     * Creates or updates the named child of the given node. If the child does not already exist, then it is created using the nt:file node

-     * type. This file child node is returned from this method.

-     * <p>

-     * If the file node does not already contain a jcr:content child, then one is created using the nt:resource node type. The following

-     * properties are set on the jcr:content node:

-     * <dl>

-     * <dt>jcr:mimeType</dt>

-     * <dd>media type</dd>

-     * <dt>jcr:encoding (optional)</dt>

-     * <dd>charset parameter of the media type, if any</dd>

-     * <dt>jcr:lastModified</dt>

-     * <dd>date of last modification</dd>

-     * <dt>jcr:data</dt>

-     * <dd>binary content</dd>

-     * </dl>

-     * <p>

-     * Note that the types of the returned node or the jcr:content child are <em>not</em> guaranteed to match nt:file and nt:resource in

-     * case the nodes already existed. The caller can use an explicit {@link Node#isNodeType(String)} check if needed, or simply use a

-     * data-first approach and not worry about the node type until a constraint violation is encountered.

-     * <p>

-     * The given binary content stream is closed by this method.

-     *

-     * @param parent

-     *            parent node

-     * @param name

-     *            name of the file

-     * @param mime

-     *            media type of the file

-     * @param data

-     *            binary content of the file

-     * @param date

-     *            date of last modification

-     * @return the child node

-     * @throws RepositoryException

-     *             if the child node can not be created or updated

-     */

-    public static Node putFile(final Node parent, final String name, final String mime, final InputStream data, final Calendar date)

-            throws RepositoryException

-    {

-        final Value binary = parent.getSession().getValueFactory().createValue(data);

-        try

-        {

-            final Node file = getOrAddNode(parent, name, NodeType_NT_FILE);

-            final Node content = getOrAddNode(file, Node_JCR_CONTENT, NodeType_NT_RESOURCE);

-

-            content.setProperty(Property_JCR_MIMETYPE, mime);

-            final String[] parameters = mime.split(";");

-            for (int i = 1; i < parameters.length; i++)

-            {

-                final int equals = parameters[i].indexOf('=');

-                if (equals != -1)

-                {

-                    final String parameter = parameters[i].substring(0, equals);

-                    if ("charset".equalsIgnoreCase(parameter.trim()))

-                    {

-                        content.setProperty(Property_JCR_ENCODING, parameters[i].substring(equals + 1).trim());

-                    }

-                }

-            }

-

-            content.setProperty(Property_JCR_LAST_MODIFIED, date);

-            content.setProperty(Property_JCR_DATA, binary);

-            return file;

-        } finally

-        {

-            // JCR 2.0 API:

-            // binary.dispose();

-        }

-    }

-

-    /**

-     * Private constructor to prevent instantiation of this class.

-     */

-    private JcrUtils()

-    {

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestCase.java
deleted file mode 100644
index f9d7c52..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestCase.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.commons.vfs2.provider.webdav.test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.jcr.Value;
-
-import junit.framework.Test;
-
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.temp.TemporaryFileProvider;
-import org.apache.commons.vfs2.provider.webdav.WebdavFileProvider;
-import org.apache.commons.vfs2.provider.webdav.WebdavFileSystemConfigBuilder;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-import org.apache.commons.vfs2.util.FreeSocketPortUtil;
-import org.apache.jackrabbit.core.TransientRepository;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-
-/**
- * Test cases for the WebDAV provider.
- *
- */
-public class WebdavProviderTestCase extends AbstractProviderTestConfig
-{
-    private static final char[] PASSWORD = new char[0];
-
-    private static final String USER_ID = "admin";
-
-    private static int SocketPort;
-
-    private static final String TEST_URI = "test.webdav.uri";
-
-    private static JackrabbitMain JrMain;
-
-    /**
-     * Use %40 for @ in URLs
-     */
-    private static String ConnectionUri;
-
-    private static File RepoDirectory;
-
-    private static boolean DEBUG = Boolean.getBoolean("WebdavProviderTestCase.Debug");
-
-    static File createTempDirectory() throws IOException
-    {
-        // create base folder
-        final File base = new File("./target/test").getCanonicalFile();
-        base.mkdirs();
-
-        final File tempFile = File.createTempFile("WebdavProviderTestCase_", ".tmp", base);
-
-        if (!tempFile.delete())
-        {
-            throw new IOException("Could not delete temp file: " + tempFile.getAbsolutePath());
-        }
-
-        if (!tempFile.mkdir())
-        {
-            throw new IOException("Could not create temp directory: " + tempFile.getAbsolutePath());
-        }
-
-        if (DEBUG)
-            System.out.println("Working in " + tempFile);
-
-        return tempFile;
-    }
-
-    private static void dump(final File repoDirectory) throws Exception
-    {
-        final TransientRepository repository = getTransientRepository(repoDirectory);
-        try
-        {
-            final Session session = getSession(repository);
-            message("Root node dump:");
-            dump(session.getRootNode());
-            session.logout();
-        } finally
-        {
-            repository.shutdown();
-        }
-    }
-
-    /** Recursively outputs the contents of the given node. */
-    private static void dump(final Node node) throws RepositoryException
-    {
-        // First output the node path
-        message(node.getPath());
-        // Skip the virtual (and large!) jcr:system subtree
-        if (node.getName().equals("jcr:system"))
-        {
-            return;
-        }
-
-        if (node.getName().equals("jcr:content"))
-        {
-            return;
-        }
-
-        // Then output the properties
-        final PropertyIterator properties = node.getProperties();
-        while (properties.hasNext())
-        {
-            final Property property = properties.nextProperty();
-            if (property.getDefinition().isMultiple())
-            {
-                // A multi-valued property, print all values
-                final Value[] values = property.getValues();
-                for (final Value value : values)
-                {
-                    message(property.getPath() + " = " + value.getString());
-                }
-            } else
-            {
-                // A single-valued property
-                message(property.getPath() + " = " + property.getString());
-            }
-        }
-
-        // Finally output all the child nodes recursively
-        final NodeIterator nodes = node.getNodes();
-        while (nodes.hasNext())
-        {
-            dump(nodes.nextNode());
-        }
-    }
-
-    private static Session getSession(final TransientRepository repository) throws RepositoryException
-    {
-        return repository.login(new SimpleCredentials(USER_ID, PASSWORD));
-    }
-
-    private static String getSystemTestUriOverride()
-    {
-        return System.getProperty(TEST_URI);
-    }
-
-    private static TransientRepository getTransientRepository(final File repoDirectory) throws IOException
-    {
-        // Jackrabbit 1.6:
-        // TransientRepository repository = new TransientRepository(repoDirectory);
-        // Jackrabbit 1.5.2:
-        return new TransientRepository(new File(repoDirectory, "repository.xml").toString(), repoDirectory.toString());
-    }
-
-    private static void importFiles(final File repoDirectory, final File sourceDir) throws Exception
-    {
-        final TransientRepository repository = getTransientRepository(repoDirectory);
-        try
-        {
-            final Session session = getSession(repository);
-            importFiles(session.getRootNode(), sourceDir);
-            session.save();
-            session.logout();
-        } finally
-        {
-            repository.shutdown();
-        }
-    }
-
-    private static void importFiles(final Node parent, final File sourceDir) throws RepositoryException, IOException
-    {
-        final File[] files = sourceDir.listFiles();
-        for (final File file : files)
-        {
-            if (file.isFile())
-            {
-                final InputStream data = new FileInputStream(file);
-                try
-                {
-                    message("Importing file " + file);
-                    JcrUtils.putFile(parent, file.getName(), "application/octet-stream", data);
-                } finally
-                {
-                    data.close();
-                }
-            } else if (file.isDirectory())
-            {
-                message("Importing folder " + file);
-                final Node folder = JcrUtils.getOrAddFolder(parent, file.getName());
-                importFiles(folder, file);
-            }
-        }
-    }
-
-    private static void message(final IOException e)
-    {
-        if (DEBUG)
-        {
-            e.printStackTrace();
-        }
-    }
-
-    private static void message(final String string)
-    {
-        if (DEBUG)
-        {
-            System.out.println(string);
-        }
-    }
-
-    /**
-     * Creates and starts an embedded Apache WebDAV Server (Jackrabbit).
-     *
-     * @throws Exception
-     */
-    private static void setUpClass() throws Exception
-    {
-        // Create temp dir for repo
-        RepoDirectory = createTempDirectory();
-        message("Created temp directory " + RepoDirectory);
-        // Populate repo
-        importFiles(RepoDirectory, new File(getTestDirectory()));
-        dump(RepoDirectory);
-        // Start server with temp repo
-        startJackrabbit(RepoDirectory);
-        message("Returned from org.apache.jackrabbit.standalone.Main " + SocketPort);
-    }
-
-    /**
-     * Starts an embedded Apache Jackrabbit server.
-     *
-     * @param repoDirectory
-     * @throws Exception
-     */
-    private static void startJackrabbit(final File repoDirectory) throws Exception
-    {
-        boolean quiet = false;
-        if (!DEBUG)
-        {
-            Logger.getLogger("org.apache.jackrabbit").setLevel(Level.WARN);
-            Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.ERROR);
-            Logger.getLogger("org.apache.commons.vfs2").setLevel(Level.WARN);
-            Logger.getLogger("org.mortbay").setLevel(Level.WARN);
-            quiet = true;
-        }
-        JrMain = new JackrabbitMain(new String[]
-        { "--port", Integer.toString(SocketPort), "--repo", repoDirectory.toString(), quiet ? "--quiet" : "" });
-        JrMain.run();
-    }
-
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new WebdavProviderTestCase())
-        {
-            @Override
-            protected void setUp() throws Exception
-            {
-                if (getSystemTestUriOverride() == null)
-                {
-                    setUpClass();
-                }
-                super.setUp();
-            }
-
-            @Override
-            protected void tearDown() throws Exception
-            {
-                tearDownClass();
-                super.tearDown();
-            }
-        };
-    }
-
-    /**
-     * Tears down resources for this test case.
-     * <ol>
-     * <li>Shuts down the embedded Jackrabbit</li>
-     * <li>Extra clean up for org.apache.commons.httpclient.MultiThreadedHttpConnectionManager</li>
-     * <li>Remove temporary repository directory.</li>
-     * </ol>
-     * Stops the embedded Apache WebDAV Server.
-     *
-     * @throws Exception
-     * @throws
-     */
-    private static void tearDownClass() throws Exception
-    {
-        // Main JR shutdown
-        JrMain.shutdown();
-        // WARN logged because one thread is still there, so clean up explicitly.
-        MultiThreadedHttpConnectionManager.shutdownAll();
-
-        if (DEBUG)
-        {
-            message("Skipping cleanup of " + RepoDirectory);
-            return;
-        }
-
-        // Remove repo dir
-        try
-        {
-            message("Deleting temp directory " + RepoDirectory);
-            FileUtils.deleteDirectory(RepoDirectory);
-        } catch (final IOException e)
-        {
-            message(e);
-            if (RepoDirectory.exists())
-            {
-                message("Directory will be deleted on VM exit " + RepoDirectory);
-                RepoDirectory.deleteOnExit();
-            }
-        }
-    }
-
-    public WebdavProviderTestCase() throws IOException
-    {
-        SocketPort = FreeSocketPortUtil.findFreeLocalPort();
-        message("FreeSocketPortUtil.findFreeLocalPort() = " + SocketPort);
-        // Use %40 for @ in a URL
-        // Any user id and password will do with the default Jackrabbit set up.
-        ConnectionUri = String.format("webdav://%s@localhost:%d/repository/default", USER_ID, SocketPort);
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        String uri = getSystemTestUriOverride();
-        if (uri == null)
-        {
-            uri = ConnectionUri;
-        }
-        final WebdavFileSystemConfigBuilder builder = (WebdavFileSystemConfigBuilder) manager
-                .getFileSystemConfigBuilder("webdav");
-        final FileSystemOptions opts = new FileSystemOptions();
-        builder.setRootURI(opts, uri);
-        return manager.resolveFile(uri, opts);
-    }
-
-    @Override
-    public boolean isFileSystemRootAccessible()
-    {
-        return false;
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("webdav", new WebdavFileProvider());
-        manager.addProvider("tmp", new TemporaryFileProvider());
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestSuite.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestSuite.java
deleted file mode 100644
index f9f1a5e..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavProviderTestSuite.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.commons.vfs2.provider.webdav.test;
-
-import org.apache.commons.vfs2.test.ContentTests;
-import org.apache.commons.vfs2.test.LastModifiedTests;
-import org.apache.commons.vfs2.test.NamingTests;
-import org.apache.commons.vfs2.test.ProviderCacheStrategyTests;
-import org.apache.commons.vfs2.test.ProviderDeleteTests;
-import org.apache.commons.vfs2.test.ProviderRandomReadTests;
-import org.apache.commons.vfs2.test.ProviderRandomReadWriteTests;
-import org.apache.commons.vfs2.test.ProviderReadTests;
-import org.apache.commons.vfs2.test.ProviderRenameTests;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-import org.apache.commons.vfs2.test.ProviderWriteAppendTests;
-import org.apache.commons.vfs2.test.ProviderWriteTests;
-import org.apache.commons.vfs2.test.UriTests;
-import org.apache.commons.vfs2.test.UrlStructureTests;
-import org.apache.commons.vfs2.test.UrlTests;
-
-/**
- * The suite of tests for a file system.
- */
-public class WebdavProviderTestSuite extends ProviderTestSuite
-{
-    /**
-     * Adds the tests for a file system to this suite.
-     */
-    public WebdavProviderTestSuite(final ProviderTestConfig providerConfig) throws Exception
-    {
-        this(providerConfig, "", false, false);
-    }
-
-    /**
-     * Adds the tests for a file system to this suite. Provider has an empty directory.
-     */
-    public WebdavProviderTestSuite(final ProviderTestConfig providerConfig,
-                             final boolean addEmptyDir) throws Exception
-    {
-        this(providerConfig, "", false, addEmptyDir);
-    }
-
-
-
-    protected WebdavProviderTestSuite(final ProviderTestConfig providerConfig,
-                                final String prefix,
-                                final boolean nested,
-                                final boolean addEmptyDir)
-        throws Exception
-    {
-        super(providerConfig, prefix, nested, addEmptyDir);
-    }
-
-    /**
-     * Adds base tests - excludes the nested test cases.
-     */
-    @Override
-    protected void addBaseTests() throws Exception
-    {
-        addTests(ProviderCacheStrategyTests.class);
-        addTests(UriTests.class);
-        addTests(NamingTests.class);
-        addTests(ContentTests.class);
-        addTests(ProviderReadTests.class);
-        addTests(ProviderRandomReadTests.class);
-        addTests(ProviderWriteTests.class);
-        addTests(ProviderWriteAppendTests.class);
-        addTests(ProviderRandomReadWriteTests.class);
-        addTests(ProviderRenameTests.class);
-        addTests(ProviderDeleteTests.class);
-        addTests(LastModifiedTests.class);
-        addTests(UrlTests.class);
-        addTests(UrlStructureTests.class);
-        // The class loader test requires the classes be uploaded to the webdav repo.
-        //addTests(VfsClassLoaderTests.class);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavVersioningTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavVersioningTests.java
deleted file mode 100644
index 5eecb3b..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/webdav/test/WebdavVersioningTests.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.commons.vfs2.provider.webdav.test;
-
-import java.io.OutputStream;
-import java.util.Map;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.provider.URLFileName;
-import org.apache.commons.vfs2.provider.webdav.WebdavFileSystemConfigBuilder;
-import org.apache.commons.vfs2.test.AbstractProviderTestCase;
-import org.apache.jackrabbit.webdav.version.DeltaVConstants;
-import org.apache.jackrabbit.webdav.version.VersionControlledResource;
-
-/**
- * Test to verify Webdav Versioning support
- */
-public class WebdavVersioningTests extends AbstractProviderTestCase
-{
-    /**
-     */
-    public void testVersioning() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-        final FileSystemOptions opts = scratchFolder.getFileSystem().getFileSystemOptions();
-        final WebdavFileSystemConfigBuilder builder =
-            (WebdavFileSystemConfigBuilder)getManager().getFileSystemConfigBuilder("webdav");
-        builder.setVersioning(opts, true);
-        final FileObject file = getManager().resolveFile(scratchFolder, "file1.txt", opts);
-        final FileSystemOptions newOpts = file.getFileSystem().getFileSystemOptions();
-        assertTrue(opts == newOpts);
-        assertTrue(builder.isVersioning(newOpts));
-        assertTrue(!file.exists());
-        file.createFile();
-        assertTrue(file.exists());
-        assertSame(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-        assertEquals(0, file.getContent().getSize());
-        assertFalse(file.isExecutable());
-        assertFalse(file.isHidden());
-        assertTrue(file.isReadable());
-        assertTrue(file.isWriteable());
-        Map<?, ?> map = file.getContent().getAttributes();
-        final String name = ((URLFileName)file.getName()).getUserName();
-        assertTrue(map.containsKey(DeltaVConstants.CREATOR_DISPLAYNAME.toString()));
-        if (name != null)
-        {
-            assertEquals(name, map.get(DeltaVConstants.CREATOR_DISPLAYNAME.toString()));
-        }
-        assertTrue(map.containsKey(VersionControlledResource.CHECKED_IN.toString()));
-
-        // Create the source file
-        final String content = "Here is some sample content for the file.  Blah Blah Blah.";
-
-        final OutputStream os = file.getContent().getOutputStream();
-        try
-        {
-            os.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os.close();
-        }
-        assertSameContent(content, file);
-        map = file.getContent().getAttributes();
-        assertTrue(map.containsKey(DeltaVConstants.CREATOR_DISPLAYNAME.toString()));
-        if (name != null)
-        {
-            assertEquals(name, map.get(DeltaVConstants.CREATOR_DISPLAYNAME.toString()));
-        }
-        assertTrue(map.containsKey(VersionControlledResource.CHECKED_IN.toString()));
-        builder.setVersioning(opts, false);
-    }
-    /**
-     */
-    public void testVersioningWithCreator() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-        final FileSystemOptions opts = scratchFolder.getFileSystem().getFileSystemOptions();
-        final WebdavFileSystemConfigBuilder builder =
-            (WebdavFileSystemConfigBuilder)getManager().getFileSystemConfigBuilder("webdav");
-        builder.setVersioning(opts, true);
-        builder.setCreatorName(opts, "testUser");
-        final FileObject file = getManager().resolveFile(scratchFolder, "file1.txt", opts);
-        final FileSystemOptions newOpts = file.getFileSystem().getFileSystemOptions();
-        assertTrue(opts == newOpts);
-        assertTrue(builder.isVersioning(newOpts));
-        assertTrue(!file.exists());
-        file.createFile();
-        assertTrue(file.exists());
-        assertSame(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-        assertEquals(0, file.getContent().getSize());
-        assertFalse(file.isExecutable());
-        assertFalse(file.isHidden());
-        assertTrue(file.isReadable());
-        assertTrue(file.isWriteable());
-        Map<?, ?> map = file.getContent().getAttributes();
-        final String name = ((URLFileName)file.getName()).getUserName();
-        assertTrue(map.containsKey(DeltaVConstants.CREATOR_DISPLAYNAME.toString()));
-        assertEquals(map.get(DeltaVConstants.CREATOR_DISPLAYNAME.toString()),"testUser");
-        if (name != null)
-        {
-            assertTrue(map.containsKey(DeltaVConstants.COMMENT.toString()));
-            assertEquals("Modified by user " + name, map.get(DeltaVConstants.COMMENT.toString()));
-        }
-        assertTrue(map.containsKey(VersionControlledResource.CHECKED_IN.toString()));
-
-        // Create the source file
-        final String content = "Here is some sample content for the file.  Blah Blah Blah.";
-
-        final OutputStream os = file.getContent().getOutputStream();
-        try
-        {
-            os.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os.close();
-        }
-        assertSameContent(content, file);
-        map = file.getContent().getAttributes();
-        assertTrue(map.containsKey(DeltaVConstants.CREATOR_DISPLAYNAME.toString()));
-        assertEquals(map.get(DeltaVConstants.CREATOR_DISPLAYNAME.toString()),"testUser");
-        if (name != null)
-        {
-            assertTrue(map.containsKey(DeltaVConstants.COMMENT.toString()));
-            assertEquals("Modified by user " + name, map.get(DeltaVConstants.COMMENT.toString()));
-        }
-        assertTrue(map.containsKey(VersionControlledResource.CHECKED_IN.toString()));
-        builder.setVersioning(opts, false);
-        builder.setCreatorName(opts, null);
-    }
-        /**
-     * Sets up a scratch folder for the test to use.
-     */
-    protected FileObject createScratchFolder() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-
-        // Make sure the test folder is empty
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-        scratchFolder.createFolder();
-
-        return scratchFolder;
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/zip/test/NestedZipTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/zip/test/NestedZipTestCase.java
deleted file mode 100644
index 37c3348..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/zip/test/NestedZipTestCase.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.commons.vfs2.provider.zip.test;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.zip.ZipFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Zip file system, using a zip file nested inside another zip file.
- */
-public class NestedZipTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for nested zip files.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new NestedZipTestCase(), true);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        manager.addProvider("zip", new ZipFileProvider());
-        manager.addExtensionMap("zip", "zip");
-        manager.addMimeTypeMap("application/zip", "zip");
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        // Locate the base Zip file
-        final String zipFilePath = AbstractVfsTestCase.getTestResource("nested.zip").getAbsolutePath();
-        final String uri = "zip:file:" + zipFilePath + "!/test.zip";
-        final FileObject zipFile = manager.resolveFile(uri);
-
-        // Now build the nested file system
-        final FileObject nestedFS = manager.createFileSystem(zipFile);
-        return nestedFS.resolveFile("/");
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/zip/test/ZipProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/provider/zip/test/ZipProviderTestCase.java
deleted file mode 100644
index 18d4335..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/provider/zip/test/ZipProviderTestCase.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.commons.vfs2.provider.zip.test;
-
-import java.io.File;
-
-import junit.framework.Test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.zip.ZipFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the Zip file system.
- */
-public class ZipProviderTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    /**
-     * Creates the test suite for the zip file system.
-     */
-    public static Test suite() throws Exception
-    {
-        return new ProviderTestSuite(new ZipProviderTestCase(), true);
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager) throws Exception
-    {
-        manager.addProvider("zip", new ZipFileProvider());
-        manager.addExtensionMap("zip", "zip");
-        manager.addMimeTypeMap("application/zip", "zip");
-    }
-
-    /**
-     * Returns the base folder for read tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final File zipFile = AbstractVfsTestCase.getTestResource("test.zip");
-        final String uri = "zip:file:" + zipFile.getAbsolutePath() + "!/";
-        return manager.resolveFile(uri);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/AbstractProviderTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/AbstractProviderTestCase.java
deleted file mode 100644
index 8f27d07..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/AbstractProviderTestCase.java
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URLConnection;
-import java.util.Arrays;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider;
-
-/**
- * File system test cases, which verifies the structure and naming
- * functionality.
- * <p>
- * Works from a base folder, and assumes a particular structure under
- * that base folder.
- */
-public abstract class AbstractProviderTestCase
-    extends AbstractVfsTestCase
-{
-    private FileObject baseFolder;
-    private FileObject readFolder;
-    private FileObject writeFolder;
-    private DefaultFileSystemManager manager;
-    private ProviderTestConfig providerConfig;
-    private Method method;
-    private boolean addEmptyDir;
-
-    // Expected contents of "file1.txt"
-    public static final String FILE1_CONTENT = "This is a test file.";
-
-    // Expected contents of test files
-    public static final String TEST_FILE_CONTENT = "A test file.";
-
-    /**
-     * Sets the test method.
-     */
-    public void setMethod(final Method method)
-    {
-        this.method = method;
-    }
-
-    /**
-     * Configures this test.
-     */
-    public void setConfig(final DefaultFileSystemManager manager,
-                          final ProviderTestConfig providerConfig,
-                          final FileObject baseFolder,
-                          final FileObject readFolder,
-                          final FileObject writeFolder)
-    {
-        this.manager = manager;
-        this.providerConfig = providerConfig;
-        this.baseFolder = baseFolder;
-        this.readFolder = readFolder;
-        this.writeFolder = writeFolder;
-    }
-
-    /**
-     * Returns the file system manager used by this test.
-     */
-    protected DefaultFileSystemManager getManager()
-    {
-        return manager;
-    }
-
-    /**
-     * creates a new uninitialized file system manager
-     * @throws Exception
-     */
-    protected DefaultFileSystemManager createManager() throws Exception
-    {
-        final DefaultFileSystemManager fs = getProviderConfig().getDefaultFileSystemManager();
-        fs.setFilesCache(getProviderConfig().getFilesCache());
-        getProviderConfig().prepare(fs);
-        if (!fs.hasProvider("file"))
-        {
-            fs.addProvider("file", new DefaultLocalFileProvider());
-        }
-        return fs;
-    }
-
-    /**
-     * some provider config do some post-initialization in getBaseTestFolder.
-     * This is a hack to allow access to this code for {@code createManager}
-     */
-    public FileObject getBaseTestFolder(final FileSystemManager fs) throws Exception
-    {
-        return providerConfig.getBaseTestFolder(fs);
-    }
-
-    protected FileSystem getFileSystem()
-    {
-        return getReadFolder().getFileSystem();
-    }
-
-    /**
-     * Returns the base test folder.  This is the parent of both the read
-     * test and write test folders.
-     */
-    public FileObject getBaseFolder()
-    {
-        return baseFolder;
-    }
-
-    /**
-     * get the provider configuration
-     */
-    public ProviderTestConfig getProviderConfig()
-    {
-        return providerConfig;
-    }
-
-    /**
-     * Returns the read test folder.
-     */
-    protected FileObject getReadFolder()
-    {
-        return readFolder;
-    }
-
-    /**
-     * Returns the write test folder.
-     */
-    protected FileObject getWriteFolder()
-    {
-        return writeFolder;
-    }
-
-    /**
-     * Sets the write test folder.
-     * @param folder
-     */
-    protected void setWriteFolder(final FileObject folder)
-    {
-        writeFolder = folder;
-    }
-
-    /**
-     * Returns the capabilities required by the tests of this test case.  The
-     * tests are not run if the provider being tested does not support all
-     * the required capabilities.  Return null or an empty array to always
-     * run the tests.
-     * <p>
-     * This implementation returns null.
-     */
-    protected Capability[] getRequiredCaps()
-    {
-        return null;
-    }
-
-    /**
-     * Runs the test.  This implementation short-circuits the test if the
-     * provider being tested does not have the capabilities required by this
-     * test.
-     * <p>
-     * TODO - Handle negative caps as well - ie, only run a test if the provider does not have certain caps.<br>
-     * TODO - Figure out how to remove the test from the TestResult if the test is skipped.
-     */
-    @Override
-    protected void runTest() throws Throwable
-    {
-        // Check the capabilities
-        final Capability[] caps = getRequiredCaps();
-        if (caps != null)
-        {
-            for (final Capability cap2 : caps)
-            {
-                final Capability cap = cap2;
-                final FileSystem fs = readFolder.getFileSystem();
-                if (!fs.hasCapability(cap))
-                {
-//                    String name = fs.getClass().getName();
-//                    int index = name.lastIndexOf('.');
-//                    String fsName = (index > 0) ? name.substring(index + 1) : name;
-//                    System.out.println("skipping " + getName() + " because " +
-//                        fsName + " does not have capability " + cap);
-                    return;
-                }
-            }
-        }
-
-        // Provider has all the capabilities - execute the test
-        if (method != null)
-        {
-            try
-            {
-                method.invoke(this, (Object[]) null);
-            }
-            catch (final InvocationTargetException e)
-            {
-                throw e.getTargetException();
-            }
-        }
-        else
-        {
-            super.runTest();
-        }
-
-        if (((AbstractFileSystem) readFolder.getFileSystem()).isOpen())
-        {
-            String name = "unknown";
-            if (method != null)
-            {
-                name = method.getName();
-            }
-
-            throw new IllegalStateException(getClass().getName() + ": filesystem has open streams after: " + name);
-        }
-    }
-
-    /**
-     * Asserts that the content of a file is the same as expected. Checks the
-     * length reported by getContentLength() is correct, then reads the content
-     * as a byte stream and compares the result with the expected content.
-     * Assumes files are encoded using UTF-8.
-     */
-    protected void assertSameURLContent(final String expected,
-                                        final URLConnection connection)
-        throws Exception
-    {
-        // Get file content as a binary stream
-        final byte[] expectedBin = expected.getBytes("utf-8");
-
-        // Check lengths
-        assertEquals("same content length", expectedBin.length, connection.getContentLength());
-
-        // Read content into byte array
-        final InputStream instr = connection.getInputStream();
-        final ByteArrayOutputStream outstr;
-        try
-        {
-            outstr = new ByteArrayOutputStream();
-            final byte[] buffer = new byte[256];
-            int nread = 0;
-            while (nread >= 0)
-            {
-                outstr.write(buffer, 0, nread);
-                nread = instr.read(buffer);
-            }
-        }
-        finally
-        {
-            instr.close();
-        }
-
-        // Compare
-        assertTrue("same binary content", Arrays.equals(expectedBin, outstr.toByteArray()));
-    }
-
-    /**
-     * Asserts that the content of a file is the same as expected. Checks the
-     * length reported by getSize() is correct, then reads the content as
-     * a byte stream and compares the result with the expected content.
-     * Assumes files are encoded using UTF-8.
-     */
-    protected void assertSameContent(final String expected,
-                                     final FileObject file)
-        throws Exception
-    {
-        // Check the file exists, and is a file
-        assertTrue(file.exists());
-        assertSame(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-
-        // Get file content as a binary stream
-        final byte[] expectedBin = expected.getBytes("utf-8");
-
-        // Check lengths
-        final FileContent content = file.getContent();
-        assertEquals("same content length", expectedBin.length, content.getSize());
-
-        // Read content into byte array
-        final InputStream instr = content.getInputStream();
-        final ByteArrayOutputStream outstr;
-        try
-        {
-            outstr = new ByteArrayOutputStream(expectedBin.length);
-            final byte[] buffer = new byte[256];
-            int nread = 0;
-            while (nread >= 0)
-            {
-                outstr.write(buffer, 0, nread);
-                nread = instr.read(buffer);
-            }
-        }
-        finally
-        {
-            instr.close();
-        }
-
-        // Compare
-        assertTrue("same binary content", Arrays.equals(expectedBin, outstr.toByteArray()));
-    }
-
-    /**
-     * Builds the expected structure of the read tests folder.
-     * @throws FileSystemException (possibly)
-     */
-    protected FileInfo buildExpectedStructure() throws FileSystemException
-    {
-        // Build the expected structure
-        final FileInfo base = new FileInfo(getReadFolder().getName().getBaseName(), FileType.FOLDER);
-        base.addFile("file1.txt", FILE1_CONTENT);
-        // file%.txt - test out encoding
-        base.addFile("file%25.txt", FILE1_CONTENT);
-
-        // file?test.txt - test out encoding (test.txt is not the queryString)
-        // as we do not know if the current file provider we need to
-        // ask it to normalize the name
-        // todo: move this into the FileInfo class to do it generally?
-        /* webdav-bug?: didnt manage to get the "?" correctly through webdavlib
-        FileSystemManager fsm = getReadFolder().getFileSystem().getFileSystemManager();
-        FileName fn = fsm.resolveName(getReadFolder().getName(), "file%3ftest.txt");
-        String baseName = fn.getBaseName();
-        base.addFile(baseName, FILE1_CONTENT);
-        */
-        base.addFile("file space.txt", FILE1_CONTENT);
-
-        base.addFile("empty.txt", "");
-        if (addEmptyDir)
-        {
-            base.addFolder("emptydir");
-        }
-
-        final FileInfo dir = base.addFolder("dir1");
-        dir.addFile("file1.txt", TEST_FILE_CONTENT);
-        dir.addFile("file2.txt", TEST_FILE_CONTENT);
-        dir.addFile("file3.txt", TEST_FILE_CONTENT);
-
-        final FileInfo subdir1 = dir.addFolder("subdir1");
-        subdir1.addFile("file1.txt", TEST_FILE_CONTENT);
-        subdir1.addFile("file2.txt", TEST_FILE_CONTENT);
-        subdir1.addFile("file3.txt", TEST_FILE_CONTENT);
-
-        final FileInfo subdir2 = dir.addFolder("subdir2");
-        subdir2.addFile("file1.txt", TEST_FILE_CONTENT);
-        subdir2.addFile("file2.txt", TEST_FILE_CONTENT);
-        subdir2.addFile("file3.txt", TEST_FILE_CONTENT);
-
-        final FileInfo subdir3 = dir.addFolder("subdir3");
-        subdir3.addFile("file1.txt", TEST_FILE_CONTENT);
-        subdir3.addFile("file2.txt", TEST_FILE_CONTENT);
-        subdir3.addFile("file3.txt", TEST_FILE_CONTENT);
-
-        final FileInfo subdir4 = dir.addFolder("subdir4.jar");
-        subdir4.addFile("file1.txt", TEST_FILE_CONTENT);
-        subdir4.addFile("file2.txt", TEST_FILE_CONTENT);
-        subdir4.addFile("file3.txt", TEST_FILE_CONTENT);
-
-        return base;
-    }
-
-    protected void addEmptyDir(final boolean addEmptyDir)
-    {
-        this.addEmptyDir = addEmptyDir;
-    }
-
-    protected static Test notConfigured(final Class<?> testClass)
-    {
-        return warning(testClass + " is not configured for tests, skipping");
-    }
-
-    private static Test warning(final String message)
-    {
-        return new TestCase("warning")
-        {
-            @Override
-            protected void runTest()
-            {
-                  System.out.println(message);
-               }
-           };
-       }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/AbstractProviderTestConfig.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/AbstractProviderTestConfig.java
deleted file mode 100644
index a7b7221..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/AbstractProviderTestConfig.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.commons.vfs2.test;
-
-import org.apache.commons.vfs2.FilesCache;
-import org.apache.commons.vfs2.cache.SoftRefFilesCache;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-
-/**
- * A partial {@link org.apache.commons.vfs2.test.ProviderTestConfig} implementation.
- */
-public abstract class AbstractProviderTestConfig extends AbstractProviderTestCase
-    implements ProviderTestConfig
-{
-    private FilesCache cache = null;
-
-    /**
-     * Returns a DefaultFileSystemManager instance (or subclass instance).
-     */
-    @Override
-    public DefaultFileSystemManager getDefaultFileSystemManager() {
-        return new DefaultFileSystemManager();
-    }
-
-    /**
-     * Prepares the file system manager.  This implementation does nothing.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-    }
-
-    @Override
-    public FilesCache getFilesCache()
-    {
-        if (cache == null)
-        {
-            // cache = new DefaultFilesCache();
-            cache = new SoftRefFilesCache();
-        }
-
-        return cache;
-    }
-
-    @Override
-    public boolean isFileSystemRootAccessible()
-    {
-        return true;
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/AbstractTestSuite.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/AbstractTestSuite.java
deleted file mode 100644
index 9278a6d..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/AbstractTestSuite.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.commons.vfs2.test;
-
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-
-import junit.extensions.TestSetup;
-import junit.framework.Protectable;
-import junit.framework.Test;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-import org.apache.commons.io.FileUtils;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.impl.DefaultFileReplicator;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.impl.PrivilegedFileReplicator;
-import org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider;
-
-/**
- * The suite of tests for a file system.
- */
-public abstract class AbstractTestSuite
-    extends TestSetup
-{
-    private final ProviderTestConfig providerConfig;
-    private final String prefix;
-    private TestSuite testSuite;
-
-    private FileObject baseFolder;
-    private FileObject readFolder;
-    private FileObject writeFolder;
-    private DefaultFileSystemManager manager;
-    private File tempDir;
-
-    private Thread[] startThreadSnapshot;
-    private Thread[] endThreadSnapshot;
-    private final boolean addEmptyDir;
-
-    /**
-     * Adds the tests for a file system to this suite.
-     */
-    public AbstractTestSuite(final ProviderTestConfig providerConfig) throws Exception
-    {
-        this(providerConfig, "", false, false);
-    }
-
-    protected AbstractTestSuite(final ProviderTestConfig providerConfig,
-                                final String prefix,
-                                final boolean nested) throws Exception
-    {
-        this(providerConfig, prefix, nested, false);
-    }
-
-
-    protected AbstractTestSuite(final ProviderTestConfig providerConfig,
-                                final String prefix,
-                                final boolean nested,
-                                final boolean addEmptyDir)
-        throws Exception
-    {
-        super(new TestSuite());
-        testSuite = (TestSuite) fTest;
-        this.providerConfig = providerConfig;
-        this.prefix = prefix;
-        this.addEmptyDir = addEmptyDir;
-        addBaseTests();
-        if (!nested)
-        {
-            // Add nested tests
-            // TODO - move nested jar and zip tests here
-            // TODO - enable this again
-            //testSuite.addTest( new ProviderTestSuite( new JunctionProviderConfig( providerConfig ), "junction.", true ));
-        }
-    }
-
-    /**
-     * Adds base tests - excludes the nested test cases.
-     */
-    protected void addBaseTests() throws Exception
-    {
-    }
-
-    /**
-     * Adds the tests from a class to this suite.  The supplied class must be
-     * a subclass of {@link AbstractProviderTestCase} and have a public a
-     * no-args constructor.  This method creates an instance of the supplied
-     * class for each public 'testNnnn' method provided by the class.
-     */
-    public void addTests(final Class<?> testClass) throws Exception
-    {
-        // Verify the class
-        if (!AbstractProviderTestCase.class.isAssignableFrom(testClass))
-        {
-            throw new Exception("Test class " + testClass.getName() + " is not assignable to " + AbstractProviderTestCase.class.getName());
-        }
-
-        // Locate the test methods
-        final Method[] methods = testClass.getMethods();
-        for (final Method method2 : methods)
-        {
-            final Method method = method2;
-            if (!method.getName().startsWith("test")
-                || Modifier.isStatic(method.getModifiers())
-                || method.getReturnType() != Void.TYPE
-                || method.getParameterTypes().length != 0)
-            {
-                continue;
-            }
-
-            // Create instance
-            final AbstractProviderTestCase testCase = (AbstractProviderTestCase) testClass.newInstance();
-            testCase.setMethod(method);
-            testCase.setName(prefix + method.getName());
-            testCase.addEmptyDir(this.addEmptyDir);
-            testSuite.addTest(testCase);
-        }
-    }
-
-    @Override
-    public void run(final TestResult result) {
-        final Protectable p = new Protectable() {
-            @Override
-            public void protect() throws Exception {
-                setUp();
-                basicRun(result);
-                tearDown();
-                validateThreadSnapshot();
-            }
-        };
-        result.runProtected(this, p);
-    }
-
-    @Override
-    protected void setUp() throws Exception
-    {
-        startThreadSnapshot = createThreadSnapshot();
-
-        // Locate the temp directory, and clean it up
-        tempDir = AbstractVfsTestCase.getTestDirectory("temp");
-        FileUtils.cleanDirectory(tempDir);
-        checkTempDir("Temp dir not empty before test");
-
-        // Create the file system manager
-        manager = providerConfig.getDefaultFileSystemManager();
-        manager.setFilesCache(providerConfig.getFilesCache());
-
-        final DefaultFileReplicator replicator = new DefaultFileReplicator(tempDir);
-        manager.setReplicator(new PrivilegedFileReplicator(replicator));
-        manager.setTemporaryFileStore(replicator);
-
-        providerConfig.prepare(manager);
-
-        if (!manager.hasProvider("file"))
-        {
-            manager.addProvider("file", new DefaultLocalFileProvider());
-        }
-
-        manager.init();
-
-        // Locate the base folders
-        baseFolder = providerConfig.getBaseTestFolder(manager);
-        readFolder = baseFolder.resolveFile("read-tests");
-        writeFolder = baseFolder.resolveFile("write-tests");
-
-        // Make some assumptions about the read folder
-        assertTrue("Folder does not exist: " + readFolder, readFolder.exists());
-        assertFalse(readFolder.getName().getPath().equals(FileName.ROOT_PATH));
-
-        // Configure the tests
-        final Enumeration<Test> tests = testSuite.tests();
-        while (tests.hasMoreElements())
-        {
-            final Test test = tests.nextElement();
-            if (test instanceof AbstractProviderTestCase)
-            {
-                final AbstractProviderTestCase providerTestCase = (AbstractProviderTestCase) test;
-                providerTestCase.setConfig(manager, providerConfig, baseFolder, readFolder, writeFolder);
-            }
-        }
-    }
-
-    @Override
-    protected void tearDown() throws Exception
-    {
-        readFolder.close();
-        writeFolder.close();
-        baseFolder.close();
-
-        readFolder = null;
-        writeFolder = null;
-        baseFolder = null;
-        testSuite = null;
-
-        // force the SoftRefFilesChache to free all files
-        System.gc();
-        Thread.sleep(1000);
-        System.gc();
-        Thread.sleep(1000);
-        System.gc();
-        Thread.sleep(1000);
-        System.gc();
-        Thread.sleep(1000);
-
-        manager.freeUnusedResources();
-        manager.close();
-
-        // Make sure temp directory is empty or gone
-        checkTempDir("Temp dir not empty after test");
-    }
-
-    private void validateThreadSnapshot()
-    {
-        endThreadSnapshot = createThreadSnapshot();
-
-        final Thread[] diffThreadSnapshot = diffThreadSnapshot(startThreadSnapshot, endThreadSnapshot);
-        if (diffThreadSnapshot.length > 0)
-        {
-            final String message = dumpThreadSnapshot(diffThreadSnapshot);
-            /*
-            if (providerConfig.checkCleanThreadState())
-            {
-                // close the manager to do a "not thread safe" release of all resources
-                // and allow the vm to shutdown
-                manager.close();
-                fail(message);
-            }
-            else
-            {
-            */
-            System.out.println(message);
-            // }
-        }
-        // System.in.read();
-    }
-
-    /**
-     * Asserts that the temp dir is empty or gone.
-     */
-    private void checkTempDir(final String assertMsg)
-    {
-        if (tempDir.exists())
-        {
-            assertTrue(assertMsg + " (" + tempDir.getAbsolutePath() + ")", tempDir.isDirectory() && tempDir.list().length == 0);
-        }
-    }
-
-    private String dumpThreadSnapshot(final Thread[] threadSnapshot)
-    {
-        final StringBuffer sb = new StringBuffer(256);
-        sb.append("created threads still running:\n");
-
-        Field threadTargetField = null;
-        try
-        {
-            threadTargetField = Thread.class.getDeclaredField("target");
-            threadTargetField.setAccessible(true);
-        }
-        catch (final NoSuchFieldException e)
-        {
-            // ignored
-        }
-
-        for (int iter = 0; iter < threadSnapshot.length; iter++)
-        {
-            final Thread thread = threadSnapshot[iter];
-            if (thread == null || !thread.isAlive())
-            {
-                continue;
-            }
-
-            sb.append("#");
-            sb.append(iter + 1);
-            sb.append(": ");
-            sb.append(thread.getThreadGroup() != null ?
-                thread.getThreadGroup().getName() : "(null)");
-            sb.append("\t");
-            sb.append(thread.getName());
-            sb.append("\t");
-            sb.append(thread.getState());
-            sb.append("\t");
-            if (thread.isDaemon())
-            {
-                sb.append("daemon");
-            }
-            else
-            {
-                sb.append("not_a_daemon");
-            }
-
-            if (threadTargetField != null)
-            {
-                sb.append("\t");
-                try
-                {
-                    final Object threadTarget = threadTargetField.get(thread);
-                    if (threadTarget != null)
-                    {
-                        sb.append(threadTarget.getClass());
-                    }
-                    else
-                    {
-                        sb.append("null");
-                    }
-                }
-                catch (final IllegalAccessException e)
-                {
-                    sb.append("unknown class");
-                }
-            }
-
-            sb.append("\n");
-        }
-
-        return sb.toString();
-    }
-
-    private Thread[] diffThreadSnapshot(final Thread[] startThreadSnapshot, final Thread[] endThreadSnapshot)
-    {
-        final List<Thread> diff = new ArrayList<Thread>(10);
-
-        nextEnd: for (int iterEnd = 0; iterEnd < endThreadSnapshot.length; iterEnd++)
-        {
-            for (int iterStart = 0; iterStart < startThreadSnapshot.length; iterStart++)
-            {
-                if (startThreadSnapshot[iterStart] == endThreadSnapshot[iterEnd])
-                {
-                    continue nextEnd;
-                }
-            }
-
-            diff.add(endThreadSnapshot[iterEnd]);
-        }
-
-        final Thread ret[] = new Thread[diff.size()];
-        diff.toArray(ret);
-        return ret;
-    }
-
-    private Thread[] createThreadSnapshot()
-    {
-        ThreadGroup tg = Thread.currentThread().getThreadGroup();
-        while (tg.getParent() != null)
-        {
-            tg = tg.getParent();
-        }
-
-        final Thread snapshot[] = new Thread[200];
-        tg.enumerate(snapshot, true);
-
-        return snapshot;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/CacheTestSuite.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/CacheTestSuite.java
deleted file mode 100644
index d9c6c06..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/CacheTestSuite.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.commons.vfs2.test;
-
-
-/**
- * The suite of tests for a file cache.
- */
-public class CacheTestSuite
-    extends AbstractTestSuite
-{
-    public CacheTestSuite(final ProviderTestConfig providerConfig) throws Exception
-    {
-        this(providerConfig, "", false);
-    }
-
-    protected CacheTestSuite(final ProviderTestConfig providerConfig,
-                             final String prefix,
-                             final boolean nested)
-        throws Exception
-    {
-        super(providerConfig, prefix, nested);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ContentTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ContentTests.java
deleted file mode 100644
index e757a57..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ContentTests.java
+++ /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.
- */
-package org.apache.commons.vfs2.test;
-
-import java.io.InputStream;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.NameScope;
-
-/**
- * Test cases for reading file content.
- */
-public class ContentTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Asserts that every expected file exists, and has the expected content.
-     */
-    public void testAllContent() throws Exception
-    {
-        final FileInfo expectedFileInfo = buildExpectedStructure();
-        final FileObject actualFolder = getReadFolder();
-
-        assertSameContent(expectedFileInfo, actualFolder);
-    }
-
-    /**
-     * Asserts every file in a folder exists and has the expected content.
-     */
-    private void assertSameContent(final FileInfo expected,
-                                   final FileObject folder) throws Exception
-    {
-        for (final FileInfo fileInfo : expected.children.values())
-        {
-            final FileObject child = folder.resolveFile(fileInfo.baseName, NameScope.CHILD);
-
-            assertTrue(child.getName().toString(), child.exists());
-            if (fileInfo.type == FileType.FILE)
-            {
-                assertSameContent(fileInfo.content, child);
-            }
-            else
-            {
-                assertSameContent(fileInfo, child);
-            }
-        }
-    }
-
-    /**
-     * Tests existence determination.
-     */
-    public void testExists() throws Exception
-    {
-        // Test a file
-        FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertTrue("file exists", file.exists());
-        assertTrue("file exists", file.getType() != FileType.IMAGINARY);
-
-        // Test a folder
-        file = getReadFolder().resolveFile("dir1");
-        assertTrue("folder exists", file.exists());
-        assertTrue("folder exists", file.getType() != FileType.IMAGINARY);
-
-        // Test an unknown file
-        file = getReadFolder().resolveFile("unknown-child");
-        assertTrue("unknown file does not exist", !file.exists());
-        assertTrue("unknown file does not exist",
-            file.getType() == FileType.IMAGINARY);
-
-        // Test an unknown file in an unknown folder
-        file = getReadFolder().resolveFile("unknown-folder/unknown-child");
-        assertTrue("unknown file does not exist", !file.exists());
-        assertTrue("unknown file does not exist",
-            file.getType() == FileType.IMAGINARY);
-    }
-
-    /**
-     * Tests attributes
-     */
-    public void testAttributes() throws FileSystemException {
-        this.getReadFolder().getContent().getAttributes();
-    }
-
-    /**
-     * Tests root of file system exists.
-     */
-    public void testRootURI() throws FileSystemException
-    {
-        if (!this.getProviderConfig().isFileSystemRootAccessible())
-        {
-            return;
-        }
-        final FileSystem fileSystem = getFileSystem();
-        final String uri = fileSystem.getRootURI();
-        testRoot(getManager().resolveFile(uri, fileSystem.getFileSystemOptions()));
-    }
-
-    /**
-     * Tests root of file system exists.
-     */
-    public void testRootAPI() throws FileSystemException
-    {
-        if (!this.getProviderConfig().isFileSystemRootAccessible())
-        {
-            return;
-        }
-        testRoot(getFileSystem().getRoot());
-    }
-
-    private void testRoot(final FileObject root) throws FileSystemException
-    {
-        assertTrue(root.exists());
-        assertTrue(root.getType() != FileType.IMAGINARY);
-    }
-
-    /**
-     * Tests parent identity
-     */
-    public void testParent() throws FileSystemException
-    {
-        // Test when both exist
-        FileObject folder = getReadFolder().resolveFile("dir1");
-        FileObject child = folder.resolveFile("file3.txt");
-        assertTrue("folder exists", folder.exists());
-        assertTrue("child exists", child.exists());
-        assertSame(folder, child.getParent());
-
-        // Test when file does not exist
-        child = folder.resolveFile("unknown-file");
-        assertTrue("folder exists", folder.exists());
-        assertTrue("child does not exist", !child.exists());
-        assertSame(folder, child.getParent());
-
-        // Test when neither exists
-        folder = getReadFolder().resolveFile("unknown-folder");
-        child = folder.resolveFile("unknown-file");
-        assertTrue("folder does not exist", !folder.exists());
-        assertTrue("child does not exist", !child.exists());
-        assertSame(folder, child.getParent());
-
-        // Test the parent of the root of the file system
-        // TODO - refactor out test cases for layered vs originating fs
-        final FileSystem fileSystem = getFileSystem();
-        final FileObject root = fileSystem.getRoot();
-        if (fileSystem.getParentLayer() == null)
-        {
-            // No parent layer, so parent should be null
-            assertNull("root has null parent", root.getParent());
-        }
-        else
-        {
-            // Parent should be parent of parent layer.
-            assertSame(fileSystem.getParentLayer().getParent(), root.getParent());
-        }
-    }
-
-    /**
-     * Tests that children cannot be listed for non-folders.
-     */
-    public void testChildren() throws FileSystemException
-    {
-        // Check for file
-        FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertSame(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-        try
-        {
-            file.getChildren();
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            assertSameMessage("vfs.provider/list-children-not-folder.error", file, e);
-        }
-
-        // Should be able to get child by name
-        file = file.resolveFile("some-child");
-        assertNotNull(file);
-
-        // Check for unknown file
-        file = getReadFolder().resolveFile("unknown-file");
-        assertTrue(!file.exists());
-        try
-        {
-            file.getChildren();
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            assertSameMessage("vfs.provider/list-children-not-folder.error", file, e);
-        }
-
-        // Should be able to get child by name
-        final FileObject child = file.resolveFile("some-child");
-        assertNotNull(child);
-    }
-
-    /**
-     * Tests content.
-     */
-    public void testContent() throws Exception
-    {
-        // Test non-empty file
-        FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertSameContent(FILE1_CONTENT, file);
-
-        // Test empty file
-        file = getReadFolder().resolveFile("empty.txt");
-        assertSameContent("", file);
-    }
-
-    /**
-     * Tests that unknown files have no content.
-     */
-    public void testUnknownContent() throws Exception
-    {
-
-        // Try getting the content of an unknown file
-        final FileObject unknownFile = getReadFolder().resolveFile("unknown-file");
-        final FileContent content = unknownFile.getContent();
-        try
-        {
-            content.getInputStream();
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            assertSameMessage("vfs.provider/read-not-file.error", unknownFile, e);
-        }
-        try
-        {
-            content.getSize();
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            assertSameMessage("vfs.provider/get-size-not-file.error", unknownFile, e);
-        }
-    }
-
-    /**
-     * Tests concurrent reads on a file.
-     */
-    public void testReadSingleSequencial() throws Exception
-    {
-        final FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertTrue(file.exists());
-
-        file.getContent().getInputStream().close();
-        file.getContent().getInputStream().close();
-    }
-
-    /**
-     * Tests concurrent reads on a file.
-     */
-    public void testReadSingleConcurrent() throws Exception
-    {
-        final FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertTrue(file.exists());
-
-        // Start reading from the file
-        final InputStream instr = file.getContent().getInputStream();
-        try
-        {
-            // Start reading again
-            file.getContent().getInputStream().close();
-        }
-        finally
-        {
-            instr.close();
-        }
-    }
-
-    /**
-     * Tests concurrent reads on different files works.
-     */
-    public void testReadMultipleConcurrent() throws Exception
-    {
-        final FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertTrue(file.exists());
-        final FileObject emptyFile = getReadFolder().resolveFile("empty.txt");
-        assertTrue(emptyFile.exists());
-
-        // Start reading from the file
-        final InputStream instr = file.getContent().getInputStream();
-        try
-        {
-            // Try to read from other file
-            assertSameContent("", emptyFile);
-        }
-        finally
-        {
-            instr.close();
-        }
-    }
-
-    /**
-     * Tests that content and file objects are usable after being closed.
-     */
-    public void testReuse() throws Exception
-    {
-        // Get the test file
-        final FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertEquals(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-
-        // Get the file content
-        assertSameContent(FILE1_CONTENT, file);
-
-        // Read the content again
-        assertSameContent(FILE1_CONTENT, file);
-
-        // Close the content + file
-        file.getContent().close();
-        file.close();
-
-        // Read the content again
-        assertSameContent(FILE1_CONTENT, file);
-    }
-
-    /**
-     * Tests that input streams are cleaned up on file close.
-     */
-    public void testInputStreamMultipleCleanup() throws Exception
-    {
-        // Get the test file
-        final FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertEquals(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-
-        // Open some input streams
-        final InputStream instr1 = file.getContent().getInputStream();
-        assertTrue(instr1.read() == FILE1_CONTENT.charAt(0));
-        final InputStream instr2 = file.getContent().getInputStream();
-        assertTrue(instr2.read() == FILE1_CONTENT.charAt(0));
-
-        // Close the file
-        file.close();
-
-        // Check
-        assertTrue(instr1.read() == -1);
-        assertTrue(instr2.read() == -1);
-    }
-
-    /**
-     * Tests that input streams are cleaned up on file close.
-     */
-    public void testInputStreamSingleCleanup() throws Exception
-    {
-        // Get the test file
-        final FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertEquals(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-
-        // Open some input streams
-        final InputStream instr1 = file.getContent().getInputStream();
-        assertTrue(instr1.read() == FILE1_CONTENT.charAt(0));
-
-        // Close the file
-        file.close();
-
-        // Check
-        assertTrue(instr1.read() == -1);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/FileInfo.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/FileInfo.java
deleted file mode 100644
index ad35a2d..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/FileInfo.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.commons.vfs2.test;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.vfs2.FileType;
-
-/**
- * Info about a file.
- */
-class FileInfo
-{
-    String baseName;
-    FileType type;
-    String content;
-    Map<String, FileInfo> children = new HashMap<String, FileInfo>();
-    FileInfo parent;
-
-    public FileInfo(final String name, final FileType type)
-    {
-        baseName = name;
-        this.type = type;
-        this.content = null;
-    }
-
-    public FileInfo(final String name, final FileType type, final String content)
-    {
-        baseName = name;
-        this.type = type;
-        this.content = content;
-    }
-
-    public FileInfo getParent()
-    {
-        return parent;
-    }
-
-    /**
-     * Adds a child.
-     */
-    public void addChild(final FileInfo child)
-    {
-        children.put(child.baseName, child);
-        child.parent = this;
-    }
-
-    /**
-     * Adds a child file.
-     */
-    public FileInfo addFile(final String baseName, final String content)
-    {
-        final FileInfo child = new FileInfo(baseName, FileType.FILE, content);
-        addChild(child);
-        return child;
-    }
-
-    /**
-     * Adds a child folder.
-     */
-    public FileInfo addFolder(final String baseName)
-    {
-        final FileInfo child = new FileInfo(baseName, FileType.FOLDER, null);
-        addChild(child);
-        return child;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/FileSystemManagerFactoryTestCase.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/FileSystemManagerFactoryTestCase.java
deleted file mode 100644
index 2429663..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/FileSystemManagerFactoryTestCase.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.commons.vfs2.test;
-
-import java.io.File;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.VFS;
-
-/**
- * Test cases for the VFS factory.
- */
-public class FileSystemManagerFactoryTestCase
-    extends AbstractVfsTestCase
-{
-    /**
-     * Sanity test.
-     */
-    public void testDefaultInstance() throws Exception
-    {
-        // Locate the default manager
-        final FileSystemManager manager = VFS.getManager();
-
-        // Lookup a test jar file
-        final File jarFile = getTestResource("test.jar");
-        // File
-        final FileObject file = manager.toFileObject(jarFile);
-        check(manager, file);
-        // URI
-        final FileObject file2 = manager.resolveFile(jarFile.toURI());
-        check(manager, file2);
-        // URL
-        final FileObject file3 = manager.resolveFile(jarFile.toURI().toURL());
-        check(manager, file3);
-    }
-
-    private void check(final FileSystemManager manager, FileObject file) throws FileSystemException
-    {
-        assertNotNull(file);
-        assertTrue(file.exists());
-        assertSame(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-
-        // Expand it
-        file = manager.createFileSystem(file);
-        assertNotNull(file);
-        assertTrue(file.exists());
-        assertSame(FileType.FOLDER, file.getType());
-        assertTrue(file.isFolder());
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/LastModifiedTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/LastModifiedTests.java
deleted file mode 100644
index 5b42101..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/LastModifiedTests.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.commons.vfs2.test;
-
-import static org.junit.Assert.assertNotEquals;
-
-import java.util.Date;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.junit.Assert;
-
-/**
- * Test cases for getting and setting file last modified time.
- */
-public class LastModifiedTests extends AbstractProviderTestCase
-{
-    private void assertDelta(final String message, final long expected, final long actual, final long delta)
-    {
-        if (expected == actual)
-        {
-            return;
-        }
-        if (Math.abs(expected - actual) > Math.max(delta, 1000)) // getLastModTimeAccuracy() is not accurate
-        {
-            Assert.fail(String.format("%s expected=%d (%s), actual=%d (%s), delta=%d", message, Long.valueOf(expected), new Date(expected).toString(), Long.valueOf(actual), new Date(actual).toString(), Long.valueOf(delta)));
-        }
-    }
-
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        { Capability.GET_LAST_MODIFIED };
-    }
-
-    /**
-     * Tests FileSystem#getLastModTimeAccuracy for sane values.
-     * @throws FileSystemException if error occurred
-     */
-    public void testGetAccurary() throws FileSystemException
-    {
-        final FileObject file = getReadFolder().resolveFile("file1.txt");
-        final long lastModTimeAccuracy = (long)file.getFileSystem().getLastModTimeAccuracy();
-        // System.out.println("Accuracy on " + file.getFileSystem().getRootURI() + " is " + lastModTimeAccuracy + " as told by " + file.getFileSystem().getClass().getCanonicalName());
-        assertTrue("Accuracy must be positive",  lastModTimeAccuracy >= 0);
-        assertTrue("Accuracy must be < 2m",  lastModTimeAccuracy < 2 * 60 * 1000); // just any sane limit
-    }
-
-    /**
-     * Tests getting the last modified time of a folder.
-     * @throws FileSystemException if error occurred
-     */
-    public void testGetLastModifiedFolder() throws FileSystemException
-    {
-        final FileObject file = getReadFolder().resolveFile("dir1");
-        assertNotEquals(0L,  file.getContent().getLastModifiedTime());
-    }
-
-    /**
-     * Tests getting the last modified time of a file.
-     * @throws FileSystemException if error occurred
-     */
-    public void testGetLastModifiedFile() throws FileSystemException
-    {
-        final FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertNotEquals(0L,  file.getContent().getLastModifiedTime());
-    }
-
-    /**
-     * Tests setting the last modified time of a folder.
-     * @throws FileSystemException if error occurred
-     */
-    public void testSetLastModifiedFolder() throws FileSystemException
-    {
-        final long yesterday = System.currentTimeMillis() - 24*60*60*1000;
-
-        if (getReadFolder().getFileSystem().hasCapability(Capability.SET_LAST_MODIFIED_FOLDER))
-        {
-            // Try a folder
-            final FileObject folder = getReadFolder().resolveFile("dir1");
-            folder.getContent().setLastModifiedTime(yesterday);
-            final long lastModTimeAccuracy = (long)folder.getFileSystem().getLastModTimeAccuracy();
-            // folder.refresh(); TODO: does not work with SSH VFS-563
-            final long lastModifiedTime = folder.getContent().getLastModifiedTime();
-            assertDelta("set/getLastModified on Folder", yesterday, lastModifiedTime, lastModTimeAccuracy);
-        }
-    }
-
-    /**
-     * Tests setting the last modified time of file.
-     * @throws FileSystemException if error occurred
-     */
-    public void testSetLastModifiedFile() throws FileSystemException
-    {
-        final long yesterday = System.currentTimeMillis() - 24*60*60*1000;
-
-        if (getReadFolder().getFileSystem().hasCapability(Capability.SET_LAST_MODIFIED_FILE))
-        {
-            // Try a file
-            final FileObject file = getReadFolder().resolveFile("file1.txt");
-            file.getContent().setLastModifiedTime(yesterday);
-            final long lastModTimeAccuracy = (long)file.getFileSystem().getLastModTimeAccuracy();
-            // folder.refresh(); TODO: does not work with SSH VFS-563
-            final long lastModifiedTime = file.getContent().getLastModifiedTime();
-            assertDelta("set/getLastModified on File", yesterday, lastModifiedTime, lastModTimeAccuracy);
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/NamingTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/NamingTests.java
deleted file mode 100644
index 9d90d45..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/NamingTests.java
+++ /dev/null
@@ -1,459 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.test;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.NameScope;
-
-/**
- * Test cases for file naming.
- * <p>
- * TODO - Add tests for all FileName methods.
- */
-public class NamingTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Tests resolution of relative file names via the FS manager
-     */
-    public void testRelativeURI() throws Exception
-    {
-        // Build base dir
-        getManager().setBaseFile(getReadFolder());
-
-        // Locate the base dir
-        FileObject file = getManager().resolveFile(".");
-        assertSame("file object", getReadFolder(), file);
-
-        // Locate a child
-        file = getManager().resolveFile("some-child");
-        assertSame("file object", getReadFolder(), file.getParent());
-
-        // Locate a descendent
-        file = getManager().resolveFile("some-folder/some-file");
-        assertSame("file object", getReadFolder(), file.getParent().getParent());
-
-        // Locate parent
-        file = getManager().resolveFile("..");
-        assertSame("file object", getReadFolder().getParent(), file);
-
-        // free basefile
-        getManager().setBaseFile((FileObject) null);
-    }
-
-    /**
-     * Tests encoding of relative URI.
-     */
-    public void testRelativeUriEncoding() throws Exception
-    {
-        // Build base dir
-        getManager().setBaseFile(getReadFolder());
-        final String path = getReadFolder().getName().getPath();
-
-        // §1 Encode "some file"
-        FileObject file = getManager().resolveFile("%73%6f%6d%65%20%66%69%6c%65");
-        assertEquals(path + "/some file", file.getName().getPathDecoded());
-
-        // §2 Encode "."
-        file = getManager().resolveFile("%2e");
-        // 18-6-2005 imario@apache.org: no need to keep the "current directory"
-        // assertEquals(path + "/.", file.getName().getPathDecoded());
-        assertEquals(path, file.getName().getPathDecoded());
-
-        // §3 Encode '%'
-        file = getManager().resolveFile("a%25");
-        assertEquals(path + "/a%", file.getName().getPathDecoded());
-
-        // §4 Encode /
-        file = getManager().resolveFile("dir%2fchild");
-        assertEquals(path + "/dir/child", file.getName().getPathDecoded());
-
-        // §5 Encode \
-        file = getManager().resolveFile("dir%5cchild");
-        // 18-6-2005 imario@apache.org: all file separators normalized to "/"
-        // decided to do this to get the same behaviour as in §4 on windows
-        // platforms
-        // assertEquals(path + "/dir\\child", file.getName().getPathDecoded());
-        assertEquals(path + "/dir/child", file.getName().getPathDecoded());
-
-        // §6 Use "%" literal
-        try
-        {
-            getManager().resolveFile("%");
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-        }
-
-        // §7 Not enough digits in encoded char
-        try
-        {
-            getManager().resolveFile("%5");
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-        }
-
-        // §8 Invalid digit in encoded char
-        try
-        {
-            getManager().resolveFile("%q");
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-        }
-
-        // free basefile
-        getManager().setBaseFile((FileObject) null);
-    }
-
-    /**
-     * Tests the root file name.
-     */
-    public void testRootFileName() throws Exception
-    {
-        // Locate the root file
-        final FileName rootName = getReadFolder().getFileSystem().getRoot().getName();
-
-        // Test that the root path is "/"
-        assertEquals("root path", "/", rootName.getPath());
-
-        // Test that the root basname is ""
-        assertEquals("root base name", "", rootName.getBaseName());
-
-        // Test that the root name has no parent
-        assertNull("root parent", rootName.getParent());
-    }
-
-    /**
-     * Tests child file names.
-     */
-    public void testChildName() throws Exception
-    {
-        final FileName baseName = getReadFolder().getName();
-        final String basePath = baseName.getPath();
-        final FileName name = getManager().resolveName(baseName, "some-child", NameScope.CHILD);
-
-        // Test path is absolute
-        assertTrue("is absolute", basePath.startsWith("/"));
-
-        // Test base name
-        assertEquals("base name", "some-child", name.getBaseName());
-
-        // Test absolute path
-        assertEquals("absolute path", basePath + "/some-child", name.getPath());
-
-        // Test parent path
-        assertEquals("parent absolute path", basePath, name.getParent().getPath());
-
-        // Try using a compound name to find a child
-        assertBadName(name, "a/b", NameScope.CHILD);
-
-        // Check other invalid names
-        checkDescendentNames(name, NameScope.CHILD);
-    }
-
-    /**
-     * Name resolution tests that are common for CHILD or DESCENDENT scope.
-     */
-    private void checkDescendentNames(final FileName name,
-                                      final NameScope scope)
-        throws Exception
-    {
-        // Make some assumptions about the name
-        assertTrue(!name.getPath().equals("/"));
-        assertTrue(!name.getPath().endsWith("/a"));
-        assertTrue(!name.getPath().endsWith("/a/b"));
-
-        // Test names with the same prefix
-        final String path = name.getPath() + "/a";
-        assertSameName(path, name, path, scope);
-        assertSameName(path, name, "../" + name.getBaseName() + "/a", scope);
-
-        // Test an empty name
-        assertBadName(name, "", scope);
-
-        // Test . name
-        assertBadName(name, ".", scope);
-        assertBadName(name, "./", scope);
-
-        // Test ancestor names
-        assertBadName(name, "..", scope);
-        assertBadName(name, "../a", scope);
-        assertBadName(name, "../" + name.getBaseName() + "a", scope);
-        assertBadName(name, "a/..", scope);
-
-        // Test absolute names
-        assertBadName(name, "/", scope);
-        assertBadName(name, "/a", scope);
-        assertBadName(name, "/a/b", scope);
-        assertBadName(name, name.getPath(), scope);
-        assertBadName(name, name.getPath() + "a", scope);
-    }
-
-    /**
-     * Checks that a relative name resolves to the expected absolute path.
-     * Tests both forward and back slashes.
-     */
-    private void assertSameName(final String expectedPath,
-                                final FileName baseName,
-                                final String relName,
-                                final NameScope scope)
-        throws Exception
-    {
-        // Try the supplied name
-        FileName name = getManager().resolveName(baseName, relName, scope);
-        assertEquals(expectedPath, name.getPath());
-
-        String temp;
-
-        // Replace the separators
-        temp = relName.replace('\\', '/');
-        name = getManager().resolveName(baseName, temp, scope);
-        assertEquals(expectedPath, name.getPath());
-
-        // And again
-        temp = relName.replace('/', '\\');
-        name = getManager().resolveName(baseName, temp, scope);
-        assertEquals(expectedPath, name.getPath());
-    }
-
-    /**
-     * Checks that a relative name resolves to the expected absolute path.
-     * Tests both forward and back slashes.
-     */
-    private void assertSameName(final String expectedPath,
-                                final FileName baseName,
-                                final String relName) throws Exception
-    {
-        assertSameName(expectedPath, baseName, relName, NameScope.FILE_SYSTEM);
-    }
-
-    /**
-     * Tests relative name resolution, relative to the base folder.
-     */
-    public void testNameResolution() throws Exception
-    {
-        final FileName baseName = getReadFolder().getName();
-        final String parentPath = baseName.getParent().getPath();
-        final String path = baseName.getPath();
-        final String childPath = path + "/some-child";
-
-        // Test empty relative path
-        assertSameName(path, baseName, "");
-
-        // Test . relative path
-        assertSameName(path, baseName, ".");
-
-        // Test ./ relative path
-        assertSameName(path, baseName, "./");
-
-        // Test .// relative path
-        assertSameName(path, baseName, ".//");
-
-        // Test .///.///. relative path
-        assertSameName(path, baseName, ".///.///.");
-        assertSameName(path, baseName, "./\\/.\\//.");
-
-        // Test <elem>/.. relative path
-        assertSameName(path, baseName, "a/..");
-
-        // Test .. relative path
-        assertSameName(parentPath, baseName, "..");
-
-        // Test ../ relative path
-        assertSameName(parentPath, baseName, "../");
-
-        // Test ..//./ relative path
-        assertSameName(parentPath, baseName, "..//./");
-        assertSameName(parentPath, baseName, "..//.\\");
-
-        // Test <elem>/../.. relative path
-        assertSameName(parentPath, baseName, "a/../..");
-
-        // Test <elem> relative path
-        assertSameName(childPath, baseName, "some-child");
-
-        // Test ./<elem> relative path
-        assertSameName(childPath, baseName, "./some-child");
-
-        // Test ./<elem>/ relative path
-        assertSameName(childPath, baseName, "./some-child/");
-
-        // Test <elem>/././././ relative path
-        assertSameName(childPath, baseName, "./some-child/././././");
-
-        // Test <elem>/../<elem> relative path
-        assertSameName(childPath, baseName, "a/../some-child");
-
-        // Test <elem>/<elem>/../../<elem> relative path
-        assertSameName(childPath, baseName, "a/b/../../some-child");
-    }
-
-    /**
-     * Tests descendent name resolution.
-     */
-    public void testDescendentName()
-        throws Exception
-    {
-        final FileName baseName = getReadFolder().getName();
-
-        // Test direct child
-        String path = baseName.getPath() + "/some-child";
-        assertSameName(path, baseName, "some-child", NameScope.DESCENDENT);
-
-        // Test compound name
-        path = path + "/grand-child";
-        assertSameName(path, baseName, "some-child/grand-child", NameScope.DESCENDENT);
-
-        // Test relative names
-        assertSameName(path, baseName, "./some-child/grand-child", NameScope.DESCENDENT);
-        assertSameName(path, baseName, "./nada/../some-child/grand-child", NameScope.DESCENDENT);
-        assertSameName(path, baseName, "some-child/./grand-child", NameScope.DESCENDENT);
-
-        // Test badly formed descendent names
-        checkDescendentNames(baseName, NameScope.DESCENDENT);
-    }
-
-    /**
-     * Tests resolution of absolute names.
-     */
-    public void testAbsoluteNames() throws Exception
-    {
-        // Test against the base folder
-        FileName name = getReadFolder().getName();
-        checkAbsoluteNames(name);
-
-        // Test against the root
-        name = getReadFolder().getFileSystem().getRoot().getName();
-        checkAbsoluteNames(name);
-
-        // Test against some unknown file
-        name = getManager().resolveName(name, "a/b/unknown");
-        checkAbsoluteNames(name);
-    }
-
-    /**
-     * Tests resolution of absolute names.
-     */
-    private void checkAbsoluteNames(final FileName name) throws Exception
-    {
-        // Root
-        assertSameName("/", name, "/");
-        assertSameName("/", name, "//");
-        assertSameName("/", name, "/.");
-        assertSameName("/", name, "/some file/..");
-
-        // Some absolute names
-        assertSameName("/a", name, "/a");
-        assertSameName("/a", name, "/./a");
-        assertSameName("/a", name, "/a/.");
-        assertSameName("/a/b", name, "/a/b");
-
-        // Some bad names
-        assertBadName(name, "/..", NameScope.FILE_SYSTEM);
-        assertBadName(name, "/a/../..", NameScope.FILE_SYSTEM);
-    }
-
-    /**
-     * Asserts that a particular relative name is invalid for a particular
-     * scope.
-     */
-    private void assertBadName(final FileName name,
-                               final String relName,
-                               final NameScope scope)
-    {
-        try
-        {
-            getManager().resolveName(name, relName, scope);
-            fail("expected failure");
-        }
-        catch (final FileSystemException e)
-        {
-            // TODO - should check error message
-        }
-    }
-
-    /**
-     * Tests conversion from absolute to relative names.
-     */
-    public void testAbsoluteNameConvert() throws Exception
-    {
-        final FileName baseName = getReadFolder().getName();
-
-        String path = "/test1/test2";
-        FileName name = getManager().resolveName(baseName, path);
-        assertEquals(path, name.getPath());
-
-        // Try child and descendent names
-        testRelName(name, "child");
-        testRelName(name, "child1/child2");
-
-        // Try own name
-        testRelName(name, ".");
-
-        // Try parent, and root
-        testRelName(name, "..");
-        testRelName(name, "../..");
-
-        // Try sibling and descendent of sibling
-        testRelName(name, "../sibling");
-        testRelName(name, "../sibling/child");
-
-        // Try siblings with similar names
-        testRelName(name, "../test2_not");
-        testRelName(name, "../test2_not/child");
-        testRelName(name, "../test");
-        testRelName(name, "../test/child");
-
-        // Try unrelated
-        testRelName(name, "../../unrelated");
-        testRelName(name, "../../test");
-        testRelName(name, "../../test/child");
-
-        // Test against root
-        path = "/";
-        name = getManager().resolveName(baseName, path);
-        assertEquals(path, name.getPath());
-
-        // Try child and descendent names (against root)
-        testRelName(name, "child");
-        testRelName(name, "child1/child2");
-
-        // Try own name (against root)
-        testRelName(name, ".");
-    }
-
-    /**
-     * Checks that a file name converts to an expected relative path
-     */
-    private void testRelName(final FileName baseName,
-                             final String relPath)
-        throws Exception
-    {
-        final FileName expectedName = getManager().resolveName(baseName, relPath);
-
-        // Convert to relative path, and check
-        final String actualRelPath = baseName.getRelativeName(expectedName);
-        assertEquals(relPath, actualRelPath);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/PermissionsTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/PermissionsTests.java
deleted file mode 100644
index 7b6be31..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/PermissionsTests.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.commons.vfs2.test;
-
-import java.io.OutputStream;
-
-import org.junit.Assert;
-import org.apache.commons.lang3.SystemUtils;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.provider.local.LocalFileSystem;
-
-/**
- * Additional file permission tests.
- *
- * Used by Local and SFTP File System.
- *
- * @since 2.1
- */
-public class PermissionsTests extends AbstractProviderTestCase
-{
-    public static final String FILENAME = "permission.txt";
-
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-                {
-                        Capability.CREATE,
-                        Capability.DELETE,
-                        Capability.READ_CONTENT,
-                        Capability.WRITE_CONTENT,
-                };
-    }
-
-    /**
-     * Tests for the execution permission.
-     */
-    public void testExecutable() throws Exception
-    {
-        final FileObject file = createTestFile();
-
-        // On Windows, all files are executable
-        if (isWindows())
-        {
-            Assert.assertTrue(file.isExecutable());
-
-        } else
-        {
-            // Set the executable flag for owner
-            file.setExecutable(true, true);
-            Assert.assertTrue(file.isExecutable());
-
-            // Set the executable flag for all
-            file.setExecutable(true, false);
-            Assert.assertTrue(file.isExecutable());
-
-            // Clear the executable flag
-            file.setExecutable(false, true);
-            Assert.assertFalse(file.isExecutable());
-        }
-    }
-
-
-    /**
-     * Tests for the writeable permission
-     */
-    public void testWriteable() throws Exception
-    {
-        final FileObject file = createTestFile();
-
-        // Set the write permission for owner
-        file.setWritable(true, true);
-        Assert.assertTrue(file.isWriteable());
-
-        // Set the write permission for all
-        file.setWritable(true, false);
-        Assert.assertTrue(file.isWriteable());
-
-        // Clear the write permission
-        file.setWritable(false, true);
-        Assert.assertFalse(file.isWriteable());
-    }
-
-
-    /**
-     * Tests for the readable permission
-     */
-    public void testReadable() throws Exception
-    {
-        final FileObject file = createTestFile();
-
-        if (isWindows())
-        {
-            // On Windows, all owned files are readable
-            Assert.assertTrue(file.isReadable());
-        }
-        else
-        {
-            // Set the readable permission for owner
-            file.setReadable(true, true);
-            Assert.assertTrue(file.isReadable());
-
-            // Set the readable permission for all
-            file.setReadable(true, false);
-            Assert.assertTrue(file.isReadable());
-
-            // Clear the readable permission
-            file.setReadable(false, true);
-            Assert.assertFalse(file.isReadable());
-        }
-    }
-
-
-    /**
-     * Clean up the permission-modified file to not affect other tests.
-     */
-    @Override
-    protected void tearDown()
-        throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-        final FileObject file = scratchFolder.resolveFile(FILENAME);
-        file.setWritable(true, true);
-        file.delete();
-
-        super.tearDown();
-    }
-
-
-    private FileObject createTestFile() throws Exception
-    {
-        // Get the scratch folder
-        final FileObject scratchFolder = getWriteFolder();
-        assertNotNull(scratchFolder);
-
-        // Make sure the test folder is empty
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-        scratchFolder.createFolder();
-
-        // Create direct child of the test folder
-        final FileObject file = scratchFolder.resolveFile(FILENAME);
-        assertTrue(!file.exists());
-
-        // Create the source file
-        final String content = "Here is some sample content for the file.  Blah Blah Blah.";
-
-        final OutputStream os = file.getContent().getOutputStream();
-        try
-        {
-            os.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os.close();
-        }
-        return file;
-    }
-
-
-    /**
-     * Returns true if the filesystem is a LocalFileSystem on Windows
-     */
-    private boolean isWindows()
-    {
-        return SystemUtils.IS_OS_WINDOWS && this.getFileSystem() instanceof LocalFileSystem;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderCacheStrategyTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderCacheStrategyTests.java
deleted file mode 100644
index a2736fd..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderCacheStrategyTests.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.commons.vfs2.test;
-
-import org.apache.commons.vfs2.CacheStrategy;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.impl.VirtualFileSystem;
-import org.apache.commons.vfs2.provider.ram.RamFileObject;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-
-/**
- * Test the cache stragey
- */
-public class ProviderCacheStrategyTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-            Capability.CREATE,
-            Capability.GET_TYPE,
-            Capability.LIST_CHILDREN,
-        };
-    }
-
-    /**
-     * Test the manual cache strategy
-     */
-    public void testManualCache() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-        if (FileObjectUtils.isInstanceOf(getBaseFolder(), RamFileObject.class) ||
-            scratchFolder.getFileSystem() instanceof VirtualFileSystem)
-        {
-            // cant check ram filesystem as every manager holds its own ram filesystem data
-            return;
-        }
-
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-
-        final DefaultFileSystemManager fs = createManager();
-        fs.setCacheStrategy(CacheStrategy.MANUAL);
-        fs.init();
-        final FileObject foBase2 = getBaseTestFolder(fs);
-
-        final FileObject cachedFolder = foBase2.resolveFile(scratchFolder.getName().getPath());
-
-        FileObject[] fos = cachedFolder.getChildren();
-        assertContainsNot(fos, "file1.txt");
-
-        scratchFolder.resolveFile("file1.txt").createFile();
-
-        fos = cachedFolder.getChildren();
-        assertContainsNot(fos, "file1.txt");
-
-        cachedFolder.refresh();
-        fos = cachedFolder.getChildren();
-        assertContains(fos, "file1.txt");
-    }
-
-    /**
-     * Test the on_resolve strategy
-     */
-    public void testOnResolveCache() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-        if (FileObjectUtils.isInstanceOf(getBaseFolder(), RamFileObject.class) ||
-            scratchFolder.getFileSystem() instanceof VirtualFileSystem)
-        {
-            // cant check ram filesystem as every manager holds its own ram filesystem data
-            return;
-        }
-
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-
-        final DefaultFileSystemManager fs = createManager();
-        fs.setCacheStrategy(CacheStrategy.ON_RESOLVE);
-        fs.init();
-        final FileObject foBase2 = getBaseTestFolder(fs);
-
-        FileObject cachedFolder = foBase2.resolveFile(scratchFolder.getName().getPath());
-
-        FileObject[] fos = cachedFolder.getChildren();
-        assertContainsNot(fos, "file1.txt");
-
-        scratchFolder.resolveFile("file1.txt").createFile();
-
-        fos = cachedFolder.getChildren();
-        assertContainsNot(fos, "file1.txt");
-
-        cachedFolder = foBase2.resolveFile(scratchFolder.getName().getPath());
-        fos = cachedFolder.getChildren();
-        assertContains(fos, "file1.txt");
-    }
-
-    /**
-     * Test the on_call strategy
-     */
-    public void testOnCallCache() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-        if (FileObjectUtils.isInstanceOf(getBaseFolder(), RamFileObject.class) ||
-            scratchFolder.getFileSystem() instanceof VirtualFileSystem)
-        {
-            // cant check ram filesystem as every manager holds its own ram filesystem data
-            return;
-        }
-
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-
-        final DefaultFileSystemManager fs = createManager();
-        fs.setCacheStrategy(CacheStrategy.ON_CALL);
-        fs.init();
-        final FileObject foBase2 = getBaseTestFolder(fs);
-
-        final FileObject cachedFolder = foBase2.resolveFile(scratchFolder.getName().getPath());
-
-        FileObject[] fos = cachedFolder.getChildren();
-        assertContainsNot(fos, "file1.txt");
-
-        scratchFolder.resolveFile("file1.txt").createFile();
-
-        fos = cachedFolder.getChildren();
-        assertContains(fos, "file1.txt");
-    }
-
-    public void assertContainsNot(final FileObject[] fos, final String string)
-    {
-        for (final FileObject fo : fos)
-        {
-            if (string.equals(fo.getName().getBaseName()))
-            {
-                fail(string + " should not be seen");
-            }
-        }
-    }
-
-    public void assertContains(final FileObject[] fos, final String string)
-    {
-        for (final FileObject fo : fos)
-        {
-            if (string.equals(fo.getName().getBaseName()))
-            {
-                return;
-            }
-        }
-
-        fail(string + " should be seen");
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderDeleteTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderDeleteTests.java
deleted file mode 100644
index ef12b4e..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderDeleteTests.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.commons.vfs2.test;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelectInfo;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.FileTypeSelector;
-import org.apache.commons.vfs2.Selectors;
-
-/**
- * File system test that do some delete operations.
- */
-public class ProviderDeleteTests
-    extends AbstractProviderTestCase
-{
-    private class FileNameSelector implements FileSelector
-    {
-        final String basename;
-
-        private FileNameSelector(final String basename)
-        {
-            this.basename = basename;
-        }
-
-        @Override
-        public boolean includeFile(final FileSelectInfo fileInfo) throws Exception
-        {
-            return this.basename.equals(fileInfo.getFile().getName().getBaseName());
-        }
-
-        @Override
-        public boolean traverseDescendents(final FileSelectInfo fileInfo) throws Exception
-        {
-            return true;
-        }
-    }
-
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-            Capability.CREATE,
-            Capability.DELETE,
-            Capability.GET_TYPE,
-            Capability.LIST_CHILDREN,
-        };
-    }
-
-    /**
-     * Sets up a scratch folder for the test to use.
-     */
-    protected FileObject createScratchFolder() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-
-        // Make sure the test folder is empty
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-        scratchFolder.createFolder();
-
-        final FileObject dir1 = scratchFolder.resolveFile("dir1");
-        dir1.createFolder();
-        final FileObject dir1file1 = dir1.resolveFile("a.txt");
-        dir1file1.createFile();
-        final FileObject dir2 = scratchFolder.resolveFile("dir2");
-        dir2.createFolder();
-        final FileObject dir2file1 = dir2.resolveFile("b.txt");
-        dir2file1.createFile();
-
-        return scratchFolder;
-    }
-
-    /**
-     * deletes the complete structure
-     */
-    public void testDeleteFiles() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        assertEquals(scratchFolder.delete(Selectors.EXCLUDE_SELF), 4);
-    }
-
-    /**
-     * deletes a single file
-     */
-    public void testDeleteFile() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        final FileObject file = scratchFolder.resolveFile("dir1/a.txt");
-
-        assertTrue(file.delete());
-    }
-
-    /**
-     * Deletes a non existent file
-     */
-    public void testDeleteNonExistantFile() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        final FileObject file = scratchFolder.resolveFile("dir1/aa.txt");
-
-        assertFalse(file.delete());
-    }
-
-    /**
-     * deletes files
-     */
-    public void testDeleteAllFiles() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        assertEquals(scratchFolder.delete(new FileTypeSelector(FileType.FILE)), 2);
-    }
-
-    /**
-     * deletes a.txt
-     */
-    public void testDeleteOneFiles() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        assertEquals(scratchFolder.delete(new FileNameSelector("a.txt")), 1);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRandomReadTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRandomReadTests.java
deleted file mode 100644
index df38414..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRandomReadTests.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.commons.vfs2.test;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * Random read-only test case for file providers.
- *
- * @version $Id$
- */
-public class ProviderRandomReadTests
-    extends AbstractProviderTestCase
-{
-    private static final String TEST_DATA = "This is a test file.";
-
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-            Capability.GET_TYPE,
-            Capability.RANDOM_ACCESS_READ
-        };
-    }
-
-    /**
-     * Read a file
-     */
-    public void testRandomRead() throws Exception
-    {
-        FileObject file = null;
-        try
-        {
-            file = getReadFolder().resolveFile("file1.txt");
-            final RandomAccessContent ra = file.getContent().getRandomAccessContent(RandomAccessMode.READ);
-
-            // read first byte
-            byte c = ra.readByte();
-            assertEquals(c, TEST_DATA.charAt(0));
-            assertEquals("fp", ra.getFilePointer(), 1);
-
-            // start at pos 4
-            ra.seek(3);
-            c = ra.readByte();
-            assertEquals(c, TEST_DATA.charAt(3));
-            assertEquals("fp", ra.getFilePointer(), 4);
-
-            c = ra.readByte();
-            assertEquals(c, TEST_DATA.charAt(4));
-            assertEquals("fp", ra.getFilePointer(), 5);
-
-            // restart at pos 4
-            ra.seek(3);
-            c = ra.readByte();
-            assertEquals(c, TEST_DATA.charAt(3));
-            assertEquals("fp", ra.getFilePointer(), 4);
-
-            c = ra.readByte();
-            assertEquals(c, TEST_DATA.charAt(4));
-            assertEquals("fp", ra.getFilePointer(), 5);
-
-            // advance to pos 11
-            ra.seek(10);
-            c = ra.readByte();
-            assertEquals(c, TEST_DATA.charAt(10));
-            assertEquals("fp", ra.getFilePointer(), 11);
-
-            c = ra.readByte();
-            assertEquals(c, TEST_DATA.charAt(11));
-            assertEquals("fp", ra.getFilePointer(), 12);
-        }
-        finally
-        {
-            if (file != null)
-            {
-                file.close();
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRandomReadWriteTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRandomReadWriteTests.java
deleted file mode 100644
index 5c223b6..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRandomReadWriteTests.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.commons.vfs2.test;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * Random read and write test case for file providers.
- *
- * @version $Id$
- */
-public class ProviderRandomReadWriteTests
-    extends AbstractProviderTestCase
-{
-    private static final String TEST_DATA = "This is a test file.";
-
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-            Capability.GET_TYPE,
-            Capability.CREATE,
-            Capability.RANDOM_ACCESS_READ,
-            Capability.RANDOM_ACCESS_WRITE
-        };
-    }
-
-    /**
-     * Sets up a scratch folder for the test to use.
-     */
-    protected FileObject createScratchFolder() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-
-        // Make sure the test folder is empty
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-        scratchFolder.createFolder();
-
-        return scratchFolder;
-    }
-
-    /**
-     * Writes a file
-     */
-    public void testRandomWrite() throws Exception
-    {
-        FileObject file = null;
-        try
-        {
-            file = createScratchFolder().resolveFile("random_write.txt");
-            file.createFile();
-            final RandomAccessContent ra = file.getContent().getRandomAccessContent(RandomAccessMode.READWRITE);
-
-            // write first byte
-            ra.writeByte(TEST_DATA.charAt(0));
-
-            // start at pos 4
-            ra.seek(3);
-            ra.writeByte(TEST_DATA.charAt(3));
-            ra.writeByte(TEST_DATA.charAt(4));
-
-            // restart at pos 4 (but overwrite with different content)
-            ra.seek(3);
-            ra.writeByte(TEST_DATA.charAt(7));
-            ra.writeByte(TEST_DATA.charAt(8));
-
-            // advance to pos 11
-            ra.seek(10);
-            ra.writeByte(TEST_DATA.charAt(10));
-            ra.writeByte(TEST_DATA.charAt(11));
-
-            // now read
-            ra.seek(0);
-            assertEquals(ra.readByte(), TEST_DATA.charAt(0));
-
-            ra.seek(3);
-            assertEquals(ra.readByte(), TEST_DATA.charAt(7));
-            assertEquals(ra.readByte(), TEST_DATA.charAt(8));
-
-            ra.seek(10);
-            assertEquals(ra.readByte(), TEST_DATA.charAt(10));
-            assertEquals(ra.readByte(), TEST_DATA.charAt(11));
-        }
-        finally
-        {
-            if (file != null)
-            {
-                file.close();
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRandomSetLengthTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRandomSetLengthTests.java
deleted file mode 100644
index c7200d0..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRandomSetLengthTests.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.commons.vfs2.test;
-
-import java.io.IOException;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-import org.junit.Assert;
-
-/**
- * Random set length test cases for file providers.
- *
- * @version $Id$
- */
-public class ProviderRandomSetLengthTests extends AbstractProviderTestCase
-{
-    private static final String TEST_DATA = "This is a test file.";
-
-    /**
-     * Sets up a scratch folder for the test to use.
-     */
-    protected FileObject createScratchFolder() throws Exception
-    {
-        final FileObject scratchFolder = this.getWriteFolder();
-
-        // Make sure the test folder is empty
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-        scratchFolder.createFolder();
-
-        return scratchFolder;
-    }
-
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-                Capability.GET_TYPE,
-                Capability.RANDOM_ACCESS_READ,
-                Capability.RANDOM_ACCESS_WRITE,
-                Capability.RANDOM_ACCESS_SET_LENGTH };
-    }
-
-    /**
-     * Writes a file
-     */
-    public void testRandomSetLength() throws Exception
-    {
-        FileObject file = null;
-        try
-        {
-            file = this.createScratchFolder().resolveFile("random_write.txt");
-            file.createFile();
-            final RandomAccessContent ra = file.getContent().getRandomAccessContent(RandomAccessMode.READWRITE);
-
-            // Write long string
-            ra.writeBytes(TEST_DATA);
-            Assert.assertEquals(TEST_DATA.length(), ra.length());
-
-            // Shrink to length 1
-            ra.setLength(1);
-            Assert.assertEquals(1, ra.length());
-            // now read 1
-            ra.seek(0);
-            Assert.assertEquals(ra.readByte(), TEST_DATA.charAt(0));
-
-            try
-            {
-                ra.readByte();
-                Assert.fail("Expected " + Exception.class.getName());
-            } catch (final IOException e)
-            {
-                // Expected
-            }
-
-            // Grow to length 2
-            ra.setLength(2);
-            Assert.assertEquals(2, ra.length());
-            // We have an undefined extra byte
-            ra.seek(1);
-            ra.readByte();
-
-        } finally
-        {
-            if (file != null)
-            {
-                file.close();
-            }
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderReadTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderReadTests.java
deleted file mode 100644
index 5841cf4..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderReadTests.java
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.test;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileContentInfo;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.junit.Assert;
-
-/**
- * Read-only test cases for file providers.
- * <p>
- * TODO - Test getLastModified(), getAttribute().
- */
-public class ProviderReadTests extends AbstractProviderTestCase
-{
-
-    /**
-     * Returns the read folder named "dir1".
-     *
-     * @return the read folder named "dir1".
-     * @throws FileSystemException
-     */
-    protected FileObject getReadFolderDir1() throws FileSystemException
-    {
-        return getReadFolder().resolveFile("dir1");
-    }
-
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        { Capability.GET_TYPE, Capability.LIST_CHILDREN, Capability.READ_CONTENT };
-    }
-
-    /**
-     * Walks the base folder structure, asserting it contains exactly the expected files and folders.
-     */
-    public void testStructure() throws Exception
-    {
-        final FileInfo baseInfo = buildExpectedStructure();
-        assertSameStructure(getReadFolder(), baseInfo);
-    }
-
-    /**
-     * Walks a folder structure, asserting it contains exactly the expected files and folders.
-     */
-    protected void assertSameStructure(final FileObject folder, final FileInfo expected) throws Exception
-    {
-        // Setup the structure
-        final List<FileInfo> queueExpected = new ArrayList<FileInfo>();
-        queueExpected.add(expected);
-
-        final List<FileObject> queueActual = new ArrayList<FileObject>();
-        queueActual.add(folder);
-
-        while (queueActual.size() > 0)
-        {
-            final FileObject file = queueActual.remove(0);
-            final FileInfo info = queueExpected.remove(0);
-
-            // Check the type is correct
-            assertSame(info.type, file.getType());
-
-            if (info.type == FileType.FILE)
-            {
-                continue;
-            }
-
-            // Check children
-            final FileObject[] children = file.getChildren();
-
-            // Make sure all children were found
-            assertNotNull(children);
-            int length = children.length;
-            if (info.children.size() != children.length)
-            {
-                for (final FileObject element : children)
-                {
-                    if (element.getName().getBaseName().startsWith("."))
-                    {
-                        --length;
-                        continue;
-                    }
-                    System.out.println(element.getName());
-                }
-            }
-
-            assertEquals("count children of \"" + file.getName() + "\"", info.children.size(), length);
-
-            // Recursively check each child
-            for (final FileObject child : children)
-            {
-                final String childName = child.getName().getBaseName();
-                if (childName.startsWith("."))
-                {
-                    continue;
-                }
-                final FileInfo childInfo = info.children.get(childName);
-
-                // Make sure the child is expected
-                assertNotNull(childInfo);
-
-                // Add to the queue of files to check
-                queueExpected.add(childInfo);
-                queueActual.add(child);
-            }
-        }
-    }
-
-    /**
-     * Tests type determination.
-     */
-    public void testType() throws Exception
-    {
-        // Test a file
-        FileObject file = resolveFile1Txt();
-        assertSame(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-
-        // Test a folder
-        file = getReadFolderDir1();
-        assertSame(FileType.FOLDER, file.getType());
-        assertTrue(file.isFolder());
-
-        // Test an unknown file
-        file = getReadFolder().resolveFile("unknown-child");
-        assertSame(FileType.IMAGINARY, file.getType());
-    }
-
-    /**
-     * Tests the contents of root of file system can be listed.
-     */
-    public void testRoot() throws FileSystemException
-    {
-        if (!this.getProviderConfig().isFileSystemRootAccessible())
-        {
-            return;
-        }
-        final FileSystem fs = getFileSystem();
-        final String uri = fs.getRootURI();
-        final FileObject file = getManager().resolveFile(uri, fs.getFileSystemOptions());
-        file.getChildren();
-    }
-
-    /**
-     * Tests that FileObjects can be sorted.
-     */
-    public void testSort() throws FileSystemException
-    {
-        final FileInfo fileInfo = buildExpectedStructure();
-        final VerifyingFileSelector selector = new VerifyingFileSelector(fileInfo);
-
-        // Find the files
-        final FileObject[] actualFiles = getReadFolder().findFiles(selector);
-        Arrays.sort(actualFiles);
-        FileObject prevActualFile = actualFiles[0];
-        for (final FileObject actualFile : actualFiles)
-        {
-            assertTrue(prevActualFile.toString().compareTo(actualFile.toString()) <= 0);
-            prevActualFile = actualFile;
-        }
-
-        // Compare actual and expected list of files
-        final List<FileObject> expectedFiles = selector.finish();
-        Collections.sort(expectedFiles);
-        assertEquals(expectedFiles.size(), actualFiles.length);
-        final int count = expectedFiles.size();
-        for (int i = 0; i < count; i++)
-        {
-            final FileObject expected = expectedFiles.get(i);
-            final FileObject actual = actualFiles[i];
-            assertEquals(expected, actual);
-        }
-    }
-
-    /**
-     * Tests that folders have no content.
-     */
-    public void testFolderContent() throws Exception
-    {
-        if (getFileSystem().hasCapability(Capability.DIRECTORY_READ_CONTENT))
-        {
-            // test wont fail
-            return;
-        }
-
-        // Try getting the content of a folder
-        final FileObject folder = getReadFolderDir1();
-        try
-        {
-            folder.getContent().getInputStream();
-            fail();
-        } catch (final FileSystemException e)
-        {
-            assertSameMessage("vfs.provider/read-not-file.error", folder, e);
-        }
-    }
-
-    /**
-     * Tests that test read folder is not hidden.
-     */
-    public void testFolderIsHidden() throws Exception
-    {
-        final FileObject folder = getReadFolderDir1();
-        Assert.assertFalse(folder.isHidden());
-    }
-
-    /**
-     * Tests that test read folder is readable.
-     */
-    public void testFolderIsReadable() throws Exception
-    {
-        final FileObject folder = getReadFolderDir1();
-        Assert.assertTrue(folder.isReadable());
-    }
-
-    public void testGetContent() throws Exception
-    {
-        final FileObject file = resolveFile1Txt();
-        assertTrue(file.exists());
-        final FileContent content = file.getContent();
-        assertNotNull(content);
-    }
-
-    public void testGetContentInfo() throws Exception
-    {
-        final FileObject file = resolveFile1Txt();
-        assertTrue(file.exists());
-        final FileContent content = file.getContent();
-        assertNotNull(content);
-        final FileContentInfo contentInfo = content.getContentInfo();
-        assertNotNull(contentInfo);
-    }
-
-    private FileObject resolveFile1Txt() throws FileSystemException
-    {
-        return getReadFolder().resolveFile("file1.txt");
-    }
-
-    /**
-     * Tests can read multiple time end of stream of empty file
-     */
-    public void testReadEmptyMultipleEOF() throws Exception
-    {
-        final FileObject file = getReadFolder().resolveFile("empty.txt");
-        assertTrue(file.exists());
-
-        // Start reading from the file
-        final InputStream instr = file.getContent().getInputStream();
-        try
-        {
-            assertEquals("read() from empty file should return EOF", -1, instr.read());
-
-            for(int i=0;i<5;i++)
-            {
-                assertEquals("multiple read() at EOF should return EOF", -1, instr.read());
-            }
-        }
-        finally
-        {
-            instr.close();
-        }
-    }
-
-    /**
-     * Tests can read multiple time end of stream
-     */
-    public void testReadFileEOFMultiple() throws Exception
-    {
-        final FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertTrue(file.exists());
-        assertEquals("Expecting 20 bytes test-data file1.txt", 20, file.getContent().getSize());
-
-        // Start reading from the file
-        final InputStream instr = file.getContent().getInputStream();
-        try
-        {
-            byte[] buf = new byte[25];
-            assertEquals(20, instr.read(buf));
-
-            for(int i=0;i<5;i++)
-            {
-                assertEquals("multiple read(byte[]) at EOF should return EOF", -1, instr.read(buf));
-            }
-        }
-        finally
-        {
-            instr.close();
-        }
-    }
-
-    /**
-     * Tests can perform operations on a folder while reading from a different files.
-     */
-    public void testConcurrentReadFolder() throws Exception
-    {
-        final FileObject file = resolveFile1Txt();
-        assertTrue(file.exists());
-        final FileObject folder = getReadFolderDir1();
-        assertTrue(folder.exists());
-
-        // Start reading from the file
-        final InputStream instr = file.getContent().getInputStream();
-        try
-        {
-            // Do some operations
-            folder.exists();
-            folder.getType();
-            folder.getChildren();
-        } finally
-        {
-            instr.close();
-        }
-    }
-
-    /**
-     * Tests that findFiles() works.
-     */
-    public void testFindFiles() throws Exception
-    {
-        final FileInfo fileInfo = buildExpectedStructure();
-        final VerifyingFileSelector selector = new VerifyingFileSelector(fileInfo);
-
-        // Find the files
-        final FileObject[] actualFiles = getReadFolder().findFiles(selector);
-
-        // Compare actual and expected list of files
-        final List<FileObject> expectedFiles = selector.finish();
-        assertEquals(expectedFiles.size(), actualFiles.length);
-        final int count = expectedFiles.size();
-        for (int i = 0; i < count; i++)
-        {
-            final FileObject expected = expectedFiles.get(i);
-            final FileObject actual = actualFiles[i];
-            assertEquals(expected, actual);
-        }
-    }
-
-    /**
-     * Tests that we can traverse a folder that has JAR name.
-     */
-    public void testDotJarFolderName() throws Exception
-    {
-        final FileObject folder = getReadFolderDir1().resolveFile("subdir4.jar");
-        Assert.assertTrue(folder.exists());
-        final FileObject file = folder.resolveFile("file1.txt");
-        Assert.assertTrue(file.exists());
-    }
-
-    /**
-     * Tests that a folder can't be layered.
-     */
-    public void testDotJarFolderNameLayer() throws Exception
-    {
-        final FileObject folder = getReadFolderDir1().resolveFile("subdir4.jar");
-        Assert.assertTrue("subdir4.jar/ must exist as folder, check test setup.", folder.isFolder());
-        Assert.assertFalse("subdir4.jar/ must not be layerable", getManager().canCreateFileSystem(folder));
-        try
-        {
-            FileObject ignored = getManager().createFileSystem(folder);
-            fail("Should not be able to create a layered filesystem on a directory. " + ignored);
-        }
-        catch (final FileSystemException e)
-        {
-            assertSame("Creation of layered filesystem should fail" + e, "vfs.impl/no-provider-for-file.error", e.getCode());
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRenameTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRenameTests.java
deleted file mode 100644
index 14cab90..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderRenameTests.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.
- */
-package org.apache.commons.vfs2.test;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.Selectors;
-
-/**
- * File system test that check that a file system can be renamed.
- */
-public class ProviderRenameTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-            Capability.CREATE,
-            Capability.DELETE,
-            Capability.GET_TYPE,
-            Capability.LIST_CHILDREN,
-            Capability.READ_CONTENT,
-            Capability.WRITE_CONTENT,
-            Capability.RENAME
-        };
-    }
-
-    /**
-     * Sets up a scratch folder for the test to use.
-     */
-    protected FileObject createScratchFolder() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-
-        // Make sure the test folder is empty
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-        scratchFolder.createFolder();
-
-        return scratchFolder;
-    }
-
-    private void moveFile(final FileObject scratchFolder, final FileObject file, final String content)
-            throws FileSystemException, Exception
-    {
-        final FileObject fileMove = scratchFolder.resolveFile("file1move.txt");
-        assertTrue(!fileMove.exists());
-
-        file.moveTo(fileMove);
-
-        assertTrue(!file.exists());
-        assertTrue(fileMove.exists());
-
-        assertSameContent(content, fileMove);
-
-        // Delete the file.
-        assertTrue(fileMove.exists());
-        assertTrue(fileMove.delete());
-    }
-
-    private String createTestFile(final FileObject file) throws FileSystemException, IOException,
-            UnsupportedEncodingException, Exception
-    {
-        // Create the source file
-        final String content = "Here is some sample content for the file.  Blah Blah Blah.";
-
-        final OutputStream os = file.getContent().getOutputStream();
-        try
-        {
-            os.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os.close();
-        }
-        assertSameContent(content, file);
-        return content;
-    }
-
-    /**
-     * Tests create-delete-create-a-file sequence on the same file system.
-     */
-    public void testRenameFile() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        final FileObject file = scratchFolder.resolveFile("file1.txt");
-        assertTrue(!file.exists());
-
-        final String content = createTestFile(file);
-
-        // Make sure we can move the new file to another file on the same file system
-        moveFile(scratchFolder, file, content);
-    }
-
-    /**
-     * Tests moving a file to empty folder.
-     * <P>
-     * This fails with VFS-558, but only with a CacheStrategy.ON_CALL.
-     */
-    public void testRenameFileIntoEmptyFolder() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        final FileObject file = scratchFolder.resolveFile("file1.txt");
-        assertTrue(!file.exists());
-
-        final String content = createTestFile(file);
-
-        final FileObject destFolder = scratchFolder.resolveFile("empty-target-folder");
-        destFolder.createFolder();
-        assertTrue("new destination must be folder", destFolder.getType().hasChildren());
-        assertTrue("new destination must be emty", destFolder.getChildren().length == 0);
-
-        moveFile(destFolder, file, content);
-    }
-
-    /**
-     * Moves a file from a child folder to a parent folder to test what happens when the original folder is now empty.
-     *
-     * See [VFS-298] FTP: Exception is thrown when renaming a file.
-     */
-    public void testRenameFileAndLeaveFolderEmpty() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-        final FileObject folder = scratchFolder.resolveFile("folder");
-        folder.createFolder();
-        assertTrue(folder.exists());
-        final FileObject file = folder.resolveFile("file1.txt");
-        assertTrue(!file.exists());
-
-        final String content = createTestFile(file);
-
-        // Make sure we can move the new file to another file on the same file system
-        moveFile(scratchFolder, file, content);
-        assertTrue(folder.getChildren().length == 0);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderTestConfig.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderTestConfig.java
deleted file mode 100644
index 53278f1..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderTestConfig.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.commons.vfs2.test;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FilesCache;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-
-/**
- * Test configuration for a file system.
- *
- */
-public interface ProviderTestConfig {
-    /**
-     * Returns a DefaultFileSystemManager instance (or subclass instance).
-     */
-    DefaultFileSystemManager getDefaultFileSystemManager();
-
-    /**
-     * Prepares the file system manager.
-     */
-    void prepare(DefaultFileSystemManager manager) throws Exception;
-
-    /**
-     * Returns the base folder for tests. This folder must exist, and contain the following structure:
-     * <ul>
-     * <li>/read-tests
-     * <li>/write-tests
-     * </ul>
-     */
-    FileObject getBaseTestFolder(FileSystemManager manager) throws Exception;
-
-    /**
-     * Returns the filesCache implementation used for tests.
-     */
-    FilesCache getFilesCache();
-
-    /**
-     * Whether or not the root of test file system is accessible.
-     *
-     * For example, with the default Jackrabbit (WebDAV) server, the root is not accessible, but deeper paths are OK.
-     *
-     * @return Whether or not the root of test file system is accessible.
-     */
-    boolean isFileSystemRootAccessible();
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderTestSuite.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderTestSuite.java
deleted file mode 100644
index a7fc478..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderTestSuite.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.commons.vfs2.test;
-
-import org.apache.commons.vfs2.impl.test.VfsClassLoaderTests;
-
-/**
- * The suite of tests for a file system.
- */
-public class ProviderTestSuite
-    extends AbstractTestSuite
-{
-    /**
-     * Adds the tests for a file system to this suite.
-     */
-    public ProviderTestSuite(final ProviderTestConfig providerConfig) throws Exception
-    {
-        this(providerConfig, "", false, false);
-    }
-
-    /**
-     * Adds the tests for a file system to this suite. Provider has an empty directory.
-     */
-    public ProviderTestSuite(final ProviderTestConfig providerConfig,
-                             final boolean addEmptyDir) throws Exception
-    {
-        this(providerConfig, "", false, addEmptyDir);
-    }
-
-
-
-    protected ProviderTestSuite(final ProviderTestConfig providerConfig,
-                                final String prefix,
-                                final boolean nested,
-                                final boolean addEmptyDir)
-        throws Exception
-    {
-        super(providerConfig, prefix, nested, addEmptyDir);
-    }
-
-    /**
-     * Adds base tests - excludes the nested test cases.
-     */
-    @Override
-    protected void addBaseTests() throws Exception
-    {
-        addTests(ProviderCacheStrategyTests.class);
-        addTests(UriTests.class);
-        addTests(NamingTests.class);
-        addTests(ContentTests.class);
-        addTests(ProviderReadTests.class);
-        addTests(ProviderWriteTests.class);
-        addTests(ProviderWriteAppendTests.class);
-        addTests(ProviderRandomReadTests.class);
-        addTests(ProviderRandomReadWriteTests.class);
-        addTests(ProviderRandomSetLengthTests.class);
-        addTests(ProviderRenameTests.class);
-        addTests(ProviderDeleteTests.class);
-        addTests(LastModifiedTests.class);
-        addTests(UrlTests.class);
-        addTests(UrlStructureTests.class);
-        addTests(VfsClassLoaderTests.class);
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderWriteAppendTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderWriteAppendTests.java
deleted file mode 100644
index 50b9431..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderWriteAppendTests.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.commons.vfs2.test;
-
-import java.io.OutputStream;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.Selectors;
-
-/**
- * File system test that check that a file system can be modified.
- */
-public class ProviderWriteAppendTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-            Capability.CREATE,
-            Capability.DELETE,
-            Capability.GET_TYPE,
-            Capability.LIST_CHILDREN,
-            Capability.READ_CONTENT,
-            Capability.WRITE_CONTENT,
-            Capability.APPEND_CONTENT
-        };
-    }
-
-    /**
-     * Sets up a scratch folder for the test to use.
-     */
-    protected FileObject createScratchFolder() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-
-        // Make sure the test folder is empty
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-        scratchFolder.createFolder();
-
-        return scratchFolder;
-    }
-
-    /**
-     * Tests create-delete-create-a-file sequence on the same file system.
-     */
-    public void testAppendContent() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        final FileObject file = scratchFolder.resolveFile("file1.txt");
-        assertTrue(!file.exists());
-
-        // Create the source file
-        final String content = "Here is some sample content for the file.  Blah Blah Blah.";
-        final String contentAppend = content + content;
-
-        final OutputStream os = file.getContent().getOutputStream();
-        try
-        {
-            os.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os.close();
-        }
-        assertSameContent(content, file);
-
-        // Append to the new file
-        final OutputStream os2 = file.getContent().getOutputStream(true);
-        try
-        {
-            os2.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os2.close();
-        }
-        assertSameContent(contentAppend, file);
-
-        // Make sure we can copy the new file to another file on the same filesystem
-        final FileObject fileCopy = scratchFolder.resolveFile("file1copy.txt");
-        assertTrue(!fileCopy.exists());
-        fileCopy.copyFrom(file, Selectors.SELECT_SELF);
-
-        assertSameContent(contentAppend, fileCopy);
-
-        // Delete the file.
-        assertTrue(fileCopy.exists());
-        assertTrue(fileCopy.delete());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderWriteTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderWriteTests.java
deleted file mode 100644
index 10afb52..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/ProviderWriteTests.java
+++ /dev/null
@@ -1,857 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.test;
-
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileChangeEvent;
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileListener;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.Selectors;
-import org.junit.Assert;
-
-/**
- * File system test that check that a file system can be modified.
- */
-public class ProviderWriteTests
-    extends AbstractProviderTestCase
-{
-
-    protected FileObject getReadFolderDir1() throws FileSystemException
-    {
-        return getReadFolder().resolveFile("dir1");
-    }
-
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-            Capability.CREATE,
-            Capability.DELETE,
-            Capability.GET_TYPE,
-            Capability.LIST_CHILDREN,
-            Capability.READ_CONTENT,
-            Capability.WRITE_CONTENT
-        };
-    }
-
-    /**
-     * Sets up a scratch folder for the test to use.
-     */
-    protected FileObject createScratchFolder() throws Exception
-    {
-        final FileObject scratchFolder = getWriteFolder();
-
-        // Make sure the test folder is empty
-        scratchFolder.delete(Selectors.EXCLUDE_SELF);
-        scratchFolder.createFolder();
-
-        return scratchFolder;
-    }
-
-    /**
-     * Tests folder creation.
-     */
-    public void testFolderCreate() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        FileObject folder = scratchFolder.resolveFile("dir1");
-        assertTrue(!folder.exists());
-        folder.createFolder();
-        assertTrue(folder.exists());
-        assertSame(FileType.FOLDER, folder.getType());
-        assertTrue(folder.isFolder());
-        assertEquals(0, folder.getChildren().length);
-
-        // Create a descendant, where the intermediate folders don't exist
-        folder = scratchFolder.resolveFile("dir2/dir1/dir1");
-        assertTrue(!folder.exists());
-        assertTrue(!folder.getParent().exists());
-        assertTrue(!folder.getParent().getParent().exists());
-        folder.createFolder();
-        assertTrue(folder.exists());
-        assertSame(FileType.FOLDER, folder.getType());
-        assertTrue(folder.isFolder());
-        assertEquals(0, folder.getChildren().length);
-        assertTrue(folder.getParent().exists());
-        assertTrue(folder.getParent().getParent().exists());
-
-        // Test creating a folder that already exists
-        assertTrue(folder.exists());
-        folder.createFolder();
-    }
-
-    /**
-     * Tests file creation
-     */
-    public void testFileCreate() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        FileObject file = scratchFolder.resolveFile("file1.txt");
-        assertTrue(!file.exists());
-        file.createFile();
-        assertTrue(file.exists());
-        assertSame(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-        assertEquals(0, file.getContent().getSize());
-        assertFalse(file.isHidden());
-        assertTrue(file.isReadable());
-        assertTrue(file.isWriteable());
-
-        // Create direct child of the test folder - special name
-        file = scratchFolder.resolveFile("file1%25.txt");
-        assertTrue(!file.exists());
-        file.createFile();
-        assertTrue(file.exists());
-        assertSame(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-        assertEquals(0, file.getContent().getSize());
-        assertFalse(file.isHidden());
-        assertTrue(file.isReadable());
-        assertTrue(file.isWriteable());
-
-        // Create a descendant, where the intermediate folders don't exist
-        file = scratchFolder.resolveFile("dir1/dir1/file1.txt");
-        assertTrue(!file.exists());
-        assertTrue(!file.getParent().exists());
-        assertTrue(!file.getParent().getParent().exists());
-        file.createFile();
-        assertTrue(file.exists());
-        assertSame(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-        assertEquals(0, file.getContent().getSize());
-        assertTrue(file.getParent().exists());
-        assertTrue(file.getParent().getParent().exists());
-        assertFalse(file.getParent().isHidden());
-        assertFalse(file.getParent().getParent().isHidden());
-
-        // Test creating a file that already exists
-        assertTrue(file.exists());
-        file.createFile();
-        assertTrue(file.exists());
-        assertTrue(file.isReadable());
-        assertTrue(file.isWriteable());
-    }
-
-    /**
-     * Tests file/folder creation with mismatched types.
-     */
-    public void testFileCreateMismatched() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create a test file and folder
-        final FileObject file = scratchFolder.resolveFile("dir1/file1.txt");
-        file.createFile();
-        assertEquals(FileType.FILE, file.getType());
-        assertTrue(file.isFile());
-
-        final FileObject folder = scratchFolder.resolveFile("dir1/dir2");
-        folder.createFolder();
-        assertEquals(FileType.FOLDER, folder.getType());
-        assertTrue(folder.isFolder());
-
-        // Attempt to create a file that already exists as a folder
-        try
-        {
-            folder.createFile();
-            fail();
-        }
-        catch (final FileSystemException exc)
-        {
-        }
-
-        // Attempt to create a folder that already exists as a file
-        try
-        {
-            file.createFolder();
-            fail();
-        }
-        catch (final FileSystemException exc)
-        {
-        }
-
-        // Attempt to create a folder as a child of a file
-        final FileObject folder2 = file.resolveFile("some-child");
-        try
-        {
-            folder2.createFolder();
-            fail();
-        }
-        catch (final FileSystemException exc)
-        {
-        }
-    }
-
-    /**
-     * Tests deletion
-     */
-    public void testDelete() throws Exception
-    {
-        // Set-up the test structure
-        final FileObject folder = createScratchFolder();
-        folder.resolveFile("file1.txt").createFile();
-        folder.resolveFile("file%25.txt").createFile();
-        folder.resolveFile("emptydir").createFolder();
-        folder.resolveFile("dir1/file1.txt").createFile();
-        folder.resolveFile("dir1/dir2/file2.txt").createFile();
-
-        // Delete a file
-        FileObject file = folder.resolveFile("file1.txt");
-        assertTrue(file.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-
-        // Delete a special name file
-        file = folder.resolveFile("file%25.txt");
-        assertTrue(file.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-
-        // Delete an empty folder
-        file = folder.resolveFile("emptydir");
-        assertTrue(file.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-
-        // Recursive delete
-        file = folder.resolveFile("dir1");
-        final FileObject file2 = file.resolveFile("dir2/file2.txt");
-        assertTrue(file.exists());
-        assertTrue(file2.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-        assertTrue(!file2.exists());
-
-        // Delete a file that does not exist
-        file = folder.resolveFile("some-folder/some-file");
-        assertTrue(!file.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-    }
-
-    /**
-     * Tests deletion
-     */
-    public void testDeleteAllDescendents() throws Exception
-    {
-        // Set-up the test structure
-        final FileObject folder = createScratchFolder();
-        folder.resolveFile("file1.txt").createFile();
-        folder.resolveFile("file%25.txt").createFile();
-        folder.resolveFile("emptydir").createFolder();
-        folder.resolveFile("dir1/file1.txt").createFile();
-        folder.resolveFile("dir1/dir2/file2.txt").createFile();
-
-        // Delete a file
-        FileObject file = folder.resolveFile("file1.txt");
-        assertTrue(file.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-
-        // Delete a special name file
-        file = folder.resolveFile("file%25.txt");
-        assertTrue(file.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-
-        // Delete an empty folder
-        file = folder.resolveFile("emptydir");
-        assertTrue(file.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-
-        // Recursive delete
-        file = folder.resolveFile("dir1");
-        final FileObject file2 = file.resolveFile("dir2/file2.txt");
-        assertTrue(file.exists());
-        assertTrue(file2.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-        assertTrue(!file2.exists());
-
-        // Delete a file that does not exist
-        file = folder.resolveFile("some-folder/some-file");
-        assertTrue(!file.exists());
-        file.deleteAll();
-        assertTrue(!file.exists());
-    }
-
-    /**
-     * Tests concurrent read and write on the same file fails.
-     */
-    /* imario@apache.org leave this to some sort of LockManager
-    public void testConcurrentReadWrite() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        final FileObject file = scratchFolder.resolveFile("file1.txt");
-        file.createFile();
-
-        // Start reading from the file
-        final InputStream instr = file.getContent().getInputStream();
-
-        try
-        {
-            // Try to write to the file
-            file.getContent().getOutputStream();
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            // Check error message
-            assertSameMessage("vfs.provider/write-in-use.error", file, e);
-        }
-        finally
-        {
-            instr.close();
-        }
-    }
-    */
-
-    /**
-     * Tests concurrent writes on the same file fails.
-     */
-    /* imario@apache.org leave this to some sort of LockManager
-    public void testConcurrentWrite() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        final FileObject file = scratchFolder.resolveFile("file1.txt");
-        file.createFile();
-
-        // Start writing to the file
-        final OutputStream outstr = file.getContent().getOutputStream();
-        final String testContent = "some content";
-        try
-        {
-            // Write some content to the first stream
-            outstr.write(testContent.getBytes());
-
-            // Try to open another output stream
-            file.getContent().getOutputStream();
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            // Check error message
-            assertSameMessage("vfs.provider/write-in-use.error", file, e);
-        }
-        finally
-        {
-            outstr.close();
-        }
-
-        // Make sure that the content written to the first stream is actually applied
-        assertSameContent(testContent, file);
-    }
-    */
-
-    /**
-     * Tests file copy to and from the same filesystem type.  This was a problem
-     * w/ FTP.
-     */
-    public void testCopySameFileSystem() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        final FileObject file = scratchFolder.resolveFile("file1.txt");
-        assertTrue(!file.exists());
-
-        // Create the source file
-        final String content = "Here is some sample content for the file.  Blah Blah Blah.";
-        final OutputStream os = file.getContent().getOutputStream();
-        try
-        {
-            os.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os.close();
-        }
-
-        assertSameContent(content, file);
-
-        // Make sure we can copy the new file to another file on the same filesystem
-        final FileObject fileCopy = scratchFolder.resolveFile("file1copy.txt");
-        assertTrue(!fileCopy.exists());
-        fileCopy.copyFrom(file, Selectors.SELECT_SELF);
-
-        assertSameContent(content, fileCopy);
-    }
-
-    /**
-     * Tests overwriting a file on the same file system.
-     */
-    public void testCopyFromOverwriteSameFileSystem() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        final FileObject file = scratchFolder.resolveFile("file1.txt");
-        assertTrue(!file.exists());
-
-        // Create the source file
-        final String content = "Here is some sample content for the file.  Blah Blah Blah.";
-        final OutputStream os = file.getContent().getOutputStream();
-        try
-        {
-            os.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os.close();
-        }
-
-        assertSameContent(content, file);
-
-        // Make sure we can copy the new file to another file on the same filesystem
-        final FileObject fileCopy = scratchFolder.resolveFile("file1copy.txt");
-        assertTrue(!fileCopy.exists());
-        fileCopy.copyFrom(file, Selectors.SELECT_SELF);
-
-        assertSameContent(content, fileCopy);
-
-        // Make sure we can copy the same new file to the same target file on the same filesystem
-        assertTrue(fileCopy.exists());
-        fileCopy.copyFrom(file, Selectors.SELECT_SELF);
-
-        assertSameContent(content, fileCopy);
-    }
-
-    /**
-     * Tests create-delete-create-a-file sequence on the same file system.
-     */
-    public void testCreateDeleteCreateSameFileSystem() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        final FileObject file = scratchFolder.resolveFile("file1.txt");
-        assertTrue(!file.exists());
-
-        // Create the source file
-        final String content = "Here is some sample content for the file.  Blah Blah Blah.";
-        final OutputStream os = file.getContent().getOutputStream();
-        try
-        {
-            os.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os.close();
-        }
-
-        assertSameContent(content, file);
-
-        // Make sure we can copy the new file to another file on the same filesystem
-        final FileObject fileCopy = scratchFolder.resolveFile("file1copy.txt");
-        assertTrue(!fileCopy.exists());
-        fileCopy.copyFrom(file, Selectors.SELECT_SELF);
-
-        assertSameContent(content, fileCopy);
-
-        // Delete the file.
-        assertTrue(fileCopy.exists());
-        assertTrue(fileCopy.delete());
-
-        // Make sure we can copy the same new file to the same target file on the same filesystem
-        assertTrue(!fileCopy.exists());
-        fileCopy.copyFrom(file, Selectors.SELECT_SELF);
-
-        assertSameContent(content, fileCopy);
-    }
-
-    /**
-     * Tests that test read folder is not hidden.
-     */
-    public void testFolderIsHidden() throws Exception
-    {
-        final FileObject folder = getReadFolderDir1();
-        Assert.assertFalse(folder.isHidden());
-    }
-
-    /**
-     * Tests that test read folder is readable.
-     */
-    public void testFolderIsReadable() throws Exception
-    {
-        final FileObject folder = getReadFolderDir1();
-        Assert.assertTrue(folder.isReadable());
-    }
-
-    /**
-     * Tests that test folder iswritable.
-     */
-    public void testFolderIsWritable() throws Exception
-    {
-        final FileObject folder = getWriteFolder().resolveFile("dir1");
-        Assert.assertTrue(folder.isWriteable());
-    }
-
-    /**
-     * Test that children are handled correctly by create and delete.
-     */
-    public void testListChildren() throws Exception
-    {
-        final FileObject folder = createScratchFolder();
-        final HashSet<String> names = new HashSet<String>();
-
-        // Make sure the folder is empty
-        assertEquals(0, folder.getChildren().length);
-
-        // Create a child folder
-        folder.resolveFile("dir1").createFolder();
-        names.add("dir1");
-        assertSameFileSet(names, folder.getChildren());
-
-        // Create a child file
-        folder.resolveFile("file1.html").createFile();
-        names.add("file1.html");
-        assertSameFileSet(names, folder.getChildren());
-
-        // Create a descendent
-        folder.resolveFile("dir2/file1.txt").createFile();
-        names.add("dir2");
-        assertSameFileSet(names, folder.getChildren());
-
-        // Create a child file via an output stream
-        final OutputStream outstr = folder.resolveFile("file2.txt").getContent().getOutputStream();
-        outstr.close();
-        names.add("file2.txt");
-        assertSameFileSet(names, folder.getChildren());
-
-        // Delete a child folder
-        folder.resolveFile("dir1").deleteAll();
-        names.remove("dir1");
-        assertSameFileSet(names, folder.getChildren());
-
-        // Delete a child file
-        folder.resolveFile("file1.html").deleteAll();
-        names.remove("file1.html");
-        assertSameFileSet(names, folder.getChildren());
-
-        // Recreate the folder
-        folder.deleteAll();
-        folder.createFolder();
-        assertEquals(0, folder.getChildren().length);
-    }
-
-    /**
-     * Check listeners are notified of changes.
-     */
-    public void testListener() throws Exception
-    {
-        final FileObject baseFile = createScratchFolder();
-
-        final FileObject child = baseFile.resolveFile("newfile.txt");
-        assertTrue(!child.exists());
-
-        final FileSystem fs = baseFile.getFileSystem();
-        final TestListener listener = new TestListener(child);
-        fs.addListener(child, listener);
-        try
-        {
-            // Create as a folder
-            listener.addCreateEvent();
-            child.createFolder();
-            listener.assertFinished();
-
-            // Create the folder again. Should not get an event.
-            child.createFolder();
-
-            // Delete
-            listener.addDeleteEvent();
-            child.delete();
-            listener.assertFinished();
-
-            // Delete again. Should not get an event
-            child.delete();
-
-            // Create as a file
-            listener.addCreateEvent();
-            child.createFile();
-            listener.assertFinished();
-
-            // Create the file again. Should not get an event
-            child.createFile();
-
-            listener.addDeleteEvent();
-            child.delete();
-
-            // Create as a file, by writing to it.
-            listener.addCreateEvent();
-            child.getContent().getOutputStream().close();
-            listener.assertFinished();
-
-            // Recreate the file by writing to it
-            child.getContent().getOutputStream().close();
-
-            // Copy another file over the top
-            final FileObject otherChild = baseFile.resolveFile("folder1");
-            otherChild.createFolder();
-            listener.addDeleteEvent();
-            listener.addCreateEvent();
-            child.copyFrom(otherChild, Selectors.SELECT_SELF);
-            listener.assertFinished();
-
-        }
-        finally
-        {
-            fs.removeListener(child, listener);}
-    }
-
-    /**
-     * Ensures the names of a set of files match an expected set.
-     */
-    private void assertSameFileSet(final Set<String> names, final FileObject[] files)
-    {
-        // Make sure the sets are the same length
-        assertEquals(names.size(), files.length);
-
-        // Check for unexpected names
-        for (final FileObject file : files)
-        {
-            assertTrue(names.contains(file.getName().getBaseName()));
-        }
-    }
-
-    /**
-     * A test listener.
-     */
-    private static class TestListener implements FileListener
-    {
-        private final FileObject file;
-        private final ArrayList<Object> events = new ArrayList<Object>();
-        private static final Object CREATE = "create";
-        private static final Object DELETE = "delete";
-        private static final Object CHANGED = "changed";
-
-        public TestListener(final FileObject file)
-        {
-            this.file = file;
-        }
-
-        /**
-         * Called when a file is created.
-         */
-        @Override
-        public void fileCreated(final FileChangeEvent event)
-        {
-            assertTrue("Unexpected create event", events.size() > 0);
-            assertSame("Expecting a create event", CREATE, events.remove(0));
-            assertEquals(file, event.getFile());
-            try
-            {
-                assertTrue(file.exists());
-            }
-            catch (final FileSystemException e)
-            {
-                fail();
-            }
-        }
-
-        /**
-         * Called when a file is deleted.
-         */
-        @Override
-        public void fileDeleted(final FileChangeEvent event)
-        {
-            assertTrue("Unexpected delete event", events.size() > 0);
-            assertSame("Expecting a delete event", DELETE, events.remove(0));
-            assertEquals(file, event.getFile());
-            try
-            {
-                assertTrue(!file.exists());
-            }
-            catch (final FileSystemException e)
-            {
-                fail();
-            }
-        }
-
-        @Override
-        public void fileChanged(final FileChangeEvent event) throws Exception
-        {
-            assertTrue("Unexpected changed event", events.size() > 0);
-            assertSame("Expecting a changed event", CHANGED, events.remove(0));
-            assertEquals(file, event.getFile());
-            try
-            {
-                assertTrue(!file.exists());
-            }
-            catch (final FileSystemException e)
-            {
-                fail();
-            }
-        }
-
-        public void addCreateEvent()
-        {
-            events.add(CREATE);
-        }
-
-        public void addDeleteEvent()
-        {
-            events.add(DELETE);
-        }
-
-        public void assertFinished()
-        {
-            assertEquals("Missing event", 0, events.size());
-        }
-    }
-
-    /**
-     * Tests file write to and from the same filesystem type
-     */
-    public void testWriteSameFileSystem() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        final FileObject fileSource = scratchFolder.resolveFile("file1.txt");
-        assertTrue(!fileSource.exists());
-
-        // Create the source file
-        final String expectedString = "Here is some sample content for the file.  Blah Blah Blah.";
-        final OutputStream expectedOutputStream = fileSource.getContent().getOutputStream();
-        try
-        {
-            expectedOutputStream.write(expectedString.getBytes("utf-8"));
-        }
-        finally
-        {
-            expectedOutputStream.close();
-        }
-
-        assertSameContent(expectedString, fileSource);
-
-        // Make sure we can copy the new file to another file on the same filesystem
-        final FileObject fileTarget = scratchFolder.resolveFile("file1copy.txt");
-        assertTrue(!fileTarget.exists());
-
-        final FileContent contentSource = fileSource.getContent();
-        //
-        // Tests FileContent#write(FileContent)
-        contentSource.write(fileTarget.getContent());
-        assertSameContent(expectedString, fileTarget);
-        //
-        // Tests FileContent#write(OutputStream)
-        OutputStream outputStream = fileTarget.getContent().getOutputStream();
-        try {
-            contentSource.write(outputStream);
-        } finally {
-            outputStream.close();
-        }
-        assertSameContent(expectedString, fileTarget);
-        //
-        // Tests FileContent#write(OutputStream, int)
-        outputStream = fileTarget.getContent().getOutputStream();
-        try {
-            contentSource.write(outputStream, 1234);
-        } finally {
-            outputStream.close();
-        }
-        assertSameContent(expectedString, fileTarget);
-    }
-
-    /**
-     * Tests overwriting a file on the same file system.
-     */
-    public void testOverwriteSameFileSystem() throws Exception
-    {
-        final FileObject scratchFolder = createScratchFolder();
-
-        // Create direct child of the test folder
-        final FileObject file = scratchFolder.resolveFile("file1.txt");
-        assertTrue(!file.exists());
-
-        // Create the source file
-        final String content = "Here is some sample content for the file.  Blah Blah Blah.";
-        final OutputStream os = file.getContent().getOutputStream();
-        try
-        {
-            os.write(content.getBytes("utf-8"));
-        }
-        finally
-        {
-            os.close();
-        }
-
-        assertSameContent(content, file);
-
-        // Make sure we can copy the new file to another file on the same file system
-        final FileObject fileCopy = scratchFolder.resolveFile("file1copy.txt");
-        assertTrue(!fileCopy.exists());
-        file.getContent().write(fileCopy);
-
-        assertSameContent(content, fileCopy);
-
-        // Make sure we can copy the same new file to the same target file on the same file system
-        assertTrue(fileCopy.exists());
-        file.getContent().write(fileCopy);
-
-        assertSameContent(content, fileCopy);
-
-        // Make sure we can copy the same new file to the same target file on the same file system
-        assertTrue(fileCopy.exists());
-        file.getContent().write(fileCopy.getContent());
-
-        assertSameContent(content, fileCopy);
-
-        // Make sure we can copy the same new file to the same target file on the same file system
-        assertTrue(fileCopy.exists());
-        OutputStream outputStream = fileCopy.getContent().getOutputStream();
-        try {
-            file.getContent().write(outputStream);
-        }
-        finally {
-            outputStream.close();
-        }
-        assertSameContent(content, fileCopy);
-
-        // Make sure we can copy the same new file to the same target file on the same file system
-        assertTrue(fileCopy.exists());
-        outputStream = fileCopy.getContent().getOutputStream();
-        try {
-            file.getContent().write(outputStream, 1234);
-        }
-        finally {
-            outputStream.close();
-        }
-        assertSameContent(content, fileCopy);
-   }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/UriTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/UriTests.java
deleted file mode 100644
index 0534ceb..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/UriTests.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.commons.vfs2.test;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-
-/**
- * Absolute URI test cases.
- */
-public class UriTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]{Capability.URI};
-    }
-
-    /**
-     * Tests resolution of absolute URI.
-     */
-    public void testAbsoluteURI() throws Exception
-    {
-        final FileObject readFolder = getReadFolder();
-
-        // Try fetching base folder again by its URI
-        final String uri = readFolder.getName().getURI();
-        FileObject file = getManager().resolveFile(uri, readFolder.getFileSystem().getFileSystemOptions());
-        assertSame("file object", readFolder, file);
-
-        // Try fetching the filesystem root by its URI
-        final String rootUri = readFolder.getName().getRootURI();
-        file = getManager().resolveFile(rootUri, readFolder.getFileSystem().getFileSystemOptions());
-        assertSame(readFolder.getFileSystem().getRoot(), file);
-        assertEquals(rootUri, file.getName().getRootURI());
-        assertEquals(rootUri, file.getName().getURI());
-        assertEquals(FileName.ROOT_PATH, file.getName().getPath());
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlStructureTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlStructureTests.java
deleted file mode 100644
index 179e6bf..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlStructureTests.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.commons.vfs2.test;
-
-import java.io.IOException;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-
-/**
- * URL Test cases for providers that supply structural info.
- */
-public class UrlStructureTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Returns the capabilities required by the tests of this test case.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]
-        {
-            Capability.GET_TYPE,
-            Capability.URI
-        };
-    }
-
-    /**
-     * Tests that folders have no content.
-     */
-    public void testFolderURL() throws Exception
-    {
-        final FileObject folder = getReadFolder().resolveFile("dir1");
-        if (folder.getFileSystem().hasCapability(Capability.DIRECTORY_READ_CONTENT))
-        {
-            // test might not fail on e.g. HttpFileSystem as there are no direcotries.
-            // A Directory do have a content on http. e.g a generated directory listing or the index.html page.
-            return;
-        }
-
-        assertTrue(folder.exists());
-
-        // Try getting the content of a folder
-        try
-        {
-            folder.getURL().openConnection().getInputStream();
-            fail();
-        }
-        catch (final IOException e)
-        {
-            assertSameMessage("vfs.provider/read-not-file.error", folder, e);
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlTests.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlTests.java
deleted file mode 100644
index ec269f1..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlTests.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.commons.vfs2.test;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemOptions;
-
-/**
- * URL test cases for providers.
- */
-public class UrlTests
-    extends AbstractProviderTestCase
-{
-    /**
-     * Returns the capabilities required by the tests of this test case.  The
-     * tests are not run if the provider being tested does not support all
-     * the required capabilities.  Return null or an empty array to always
-     * run the tests.
-     */
-    @Override
-    protected Capability[] getRequiredCaps()
-    {
-        return new Capability[]{Capability.URI};
-    }
-
-    /**
-     * Tests url.
-     */
-    public void testURL() throws Exception
-    {
-        final FileObject file = getReadFolder().resolveFile("some-dir/");
-        final URL url = file.getURL();
-
-        assertEquals(file.getName().getURI(), url.toExternalForm());
-
-        final URL parentURL;
-        try
-        {
-            parentURL = new URL(url, "..");
-        }
-        catch (final MalformedURLException e)
-        {
-            throw e;
-        }
-        assertEquals(file.getParent().getURL(), parentURL);
-
-        final URL rootURL = new URL(url, "/");
-        assertEquals(file.getFileSystem().getRoot().getURL(), rootURL);
-    }
-
-    /**
-     * Tests content.
-     */
-    public void testURLContent() throws Exception
-    {
-        // Test non-empty file
-        FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertTrue(file.exists());
-
-        URLConnection urlCon = file.getURL().openConnection();
-        assertSameURLContent(FILE1_CONTENT, urlCon);
-
-        // Test empty file
-        file = getReadFolder().resolveFile("empty.txt");
-        assertTrue(file.exists());
-
-        urlCon = file.getURL().openConnection();
-        assertSameURLContent("", urlCon);
-    }
-
-    /**
-     * Tests content.
-     */
-    public void testURLContentProvider() throws Exception
-    {
-        // Test non-empty file
-        FileObject file = getReadFolder().resolveFile("file1.txt");
-        assertTrue(file.exists());
-
-        String uri = file.getURL().toExternalForm();
-        FileSystemOptions options = getReadFolder().getFileSystem().getFileSystemOptions();
-
-        FileObject f1 = getManager().resolveFile(uri, options);
-        FileObject f2 = getManager().resolveFile(uri, options);
-
-        assertEquals("Two files resolved by URI must be equals on " + uri,  f1, f2);
-        assertSame("Resolving two times should not produce new filesystem on " + uri, f1.getFileSystem(), f2.getFileSystem());
-    }
-
-    /**
-     * Tests that unknown files have no content.
-     */
-    public void testUnknownURL() throws Exception
-    {
-        // Try getting the content of an unknown file
-        final FileObject unknownFile = getReadFolder().resolveFile("unknown-file");
-        assertFalse(unknownFile.exists());
-
-        final URLConnection connection = unknownFile.getURL().openConnection();
-        try
-        {
-            connection.getInputStream();
-            fail();
-        }
-        catch (final IOException e)
-        {
-            assertSameMessage("vfs.provider/read-not-file.error", unknownFile, e);
-        }
-        assertEquals(-1, connection.getContentLength());
-    }
-
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/test/VerifyingFileSelector.java b/trunk/core/src/test/java/org/apache/commons/vfs2/test/VerifyingFileSelector.java
deleted file mode 100644
index c34f9f2..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/test/VerifyingFileSelector.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.commons.vfs2.test;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSelectInfo;
-import org.apache.commons.vfs2.FileSelector;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-import org.junit.Assert;
-
-/**
- * A file selector that asserts that all files are visited, in the correct
- * order.
- */
-public class VerifyingFileSelector
-    extends Assert
-    implements FileSelector
-{
-    private final FileInfo rootFile;
-    private final List<FileObject> files = new ArrayList<FileObject>();
-
-    private FileInfo currentFolderInfo;
-    private FileObject currentFolder;
-    private Set<String> children;
-    private final List<Set<String>> stack = new ArrayList<Set<String>>();
-
-    public VerifyingFileSelector(final FileInfo fileInfo)
-    {
-        this.rootFile = fileInfo;
-        children = new HashSet<String>();
-        children.add(rootFile.baseName);
-    }
-
-    /**
-     * Determines if a file or folder should be selected.
-     */
-    @Override
-    public boolean includeFile(final FileSelectInfo fileInfo)
-        throws FileSystemException
-    {
-        final FileObject file = fileInfo.getFile();
-        if (file == currentFolder)
-        {
-            // Pop current folder
-            assertEquals(0, children.size());
-            currentFolder = currentFolder.getParent();
-            currentFolderInfo = currentFolderInfo.getParent();
-            children = stack.remove(0);
-        }
-
-        final String baseName = file.getName().getBaseName();
-
-        final FileInfo childInfo = getChild(baseName);
-        assertSame(childInfo.type, file.getType());
-
-        final boolean isChild = children.remove(baseName);
-        assertTrue(isChild);
-
-        files.add(file);
-        return true;
-    }
-
-    /**
-     * Determines whether a folder should be traversed.
-     */
-    @Override
-    public boolean traverseDescendents(final FileSelectInfo fileInfo)
-        throws FileSystemException
-    {
-        // Check that the given file is a folder
-        final FileObject folder = FileObjectUtils.getAbstractFileObject(fileInfo.getFile());
-        assertSame(FileType.FOLDER, folder.getType());
-        assertTrue(folder.isFolder());
-
-        // Locate the info for the folder
-        final String baseName = folder.getName().getBaseName();
-        if (currentFolder == null)
-        {
-            assertEquals(rootFile.baseName, baseName);
-            currentFolderInfo = rootFile;
-        }
-        else
-        {
-            AbstractFileObject parent = FileObjectUtils.getAbstractFileObject(folder.getParent());
-            assertSame(currentFolder, parent);
-
-            // Locate the info for the child, and make sure it is folder
-            currentFolderInfo = getChild(baseName);
-            assertSame(FileType.FOLDER, currentFolderInfo.type);
-        }
-
-        // Push the folder
-        stack.add(0, children);
-        children = new HashSet<String>(currentFolderInfo.children.keySet());
-        currentFolder = folder;
-
-        return true;
-    }
-
-    /**
-     * Finds a child of the current folder.
-     */
-    private FileInfo getChild(final String baseName)
-    {
-        if (currentFolderInfo == null)
-        {
-            assertEquals(rootFile.baseName, baseName);
-            return rootFile;
-        }
-        else
-        {
-            final FileInfo child = currentFolderInfo.children.get(baseName);
-            assertNotNull("Could not locate child " + baseName, child);
-            return child;
-        }
-    }
-
-    /**
-     * Asserts that the selector has seen all the files.
-     *
-     * @return The files in the order they where visited.
-     */
-    public List<FileObject> finish()
-    {
-        assertEquals(0, children.size());
-        return files;
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilderTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilderTest.java
deleted file mode 100644
index 3db4849..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/util/DelegatingFileSystemOptionsBuilderTest.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.commons.vfs2.util;
-
-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.File;
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.impl.StandardFileSystemManager;
-import org.apache.commons.vfs2.provider.http.HttpFileSystemConfigBuilder;
-import org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder;
-import org.apache.commons.vfs2.provider.sftp.TrustEveryoneUserInfo;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Some tests for the DelegatingFileSystemOptionsBuilder
- */
-public class DelegatingFileSystemOptionsBuilderTest
-{
-    private StandardFileSystemManager fsm = null;
-
-    @Before
-    public void setUp() throws Exception
-    {
-
-        // get a full blown, fully functional manager
-        fsm = new StandardFileSystemManager();
-        fsm.init();
-    }
-
-
-    @After
-    public void tearDown() throws Exception
-    {
-        if (fsm != null)
-        {
-            fsm.close();
-        }
-    }
-
-    @Test
-    public void testDelegatingGood() throws Throwable
-    {
-        final String[] identityPaths = new String[]
-        {
-            "/file1",
-            "/file2",
-        };
-
-        final FileSystemOptions opts = new FileSystemOptions();
-        final DelegatingFileSystemOptionsBuilder delgate = new DelegatingFileSystemOptionsBuilder(fsm);
-
-        delgate.setConfigString(opts, "http", "proxyHost", "proxy");
-        delgate.setConfigString(opts, "http", "proxyPort", "8080");
-        delgate.setConfigClass(opts, "sftp", "userinfo", TrustEveryoneUserInfo.class);
-        delgate.setConfigStrings(opts, "sftp", "identities", identityPaths);
-
-        assertEquals("http.proxyHost", HttpFileSystemConfigBuilder.getInstance().getProxyHost(opts), "proxy");
-        assertEquals("http.proxyPort", HttpFileSystemConfigBuilder.getInstance().getProxyPort(opts), 8080);
-        assertEquals("sftp.userInfo", SftpFileSystemConfigBuilder.getInstance().getUserInfo(opts).getClass(), TrustEveryoneUserInfo.class);
-
-        final File identities[] = SftpFileSystemConfigBuilder.getInstance().getIdentities(opts);
-        assertNotNull("sftp.identities", identities);
-        assertEquals("sftp.identities size", identities.length, identityPaths.length);
-        for (int iterIdentities = 0; iterIdentities < identities.length; iterIdentities++)
-        {
-            assertEquals("sftp.identities #" + iterIdentities,
-                identities[iterIdentities].getAbsolutePath(),
-                new File(identityPaths[iterIdentities]).getAbsolutePath());
-        }
-    }
-
-    @Test
-    public void testDelegatingBad() throws Throwable
-    {
-        final FileSystemOptions opts = new FileSystemOptions();
-        final DelegatingFileSystemOptionsBuilder delgate = new DelegatingFileSystemOptionsBuilder(fsm);
-
-        try
-        {
-            delgate.setConfigString(opts, "http", "proxyPort", "wrong_port");
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            assertEquals(e.getCause().getClass(), InvocationTargetException.class);
-            assertEquals(((InvocationTargetException) e.getCause()).getTargetException().getClass(), NumberFormatException.class);
-        }
-
-        try
-        {
-            delgate.setConfigClass(opts, "sftp", "userinfo", String.class);
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            assertEquals(e.getCode(), "vfs.provider/config-value-invalid.error");
-        }
-    }
-
-    private static String[] schemes = new String[]
-    {
-        "webdav", "http", "ftp", "file", "zip", "tar", "tgz", "bz2", "gz", "jar", "tmp", "ram"
-    };
-
-    @Test
-    public void testConfiguration() throws Exception
-    {
-        for (final String scheme : schemes)
-        {
-            assertTrue("Missing " + scheme + " provider", fsm.hasProvider(scheme));
-        }
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/util/EncryptDecryptTest.java b/trunk/core/src/test/java/org/apache/commons/vfs2/util/EncryptDecryptTest.java
deleted file mode 100644
index fab5979..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/util/EncryptDecryptTest.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.commons.vfs2.util;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-/**
- */
-public class EncryptDecryptTest
-{
-
-    @Test
-    public void testEncryptDecrypt() throws Exception
-    {
-        final String source = "Qryp2!t&tpR59";
-        final String expected = "914589F049CE3E8E3BB1A41BEAE12A9C";
-
-        final Cryptor cryptor = CryptorFactory.getCryptor();
-        final String encrypted = cryptor.encrypt(source);
-        assertEquals(expected, encrypted);
-
-        final String decrypted = cryptor.decrypt(encrypted);
-        assertEquals(source, decrypted);
-
-    }
-}
diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/util/FreeSocketPortUtil.java b/trunk/core/src/test/java/org/apache/commons/vfs2/util/FreeSocketPortUtil.java
deleted file mode 100644
index 2030560..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/util/FreeSocketPortUtil.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.commons.vfs2.util;

-

-import java.io.IOException;

-import java.net.ServerSocket;

-

-public class FreeSocketPortUtil

-{

-

-    public static void main(final String[] args) throws IOException

-    {

-        System.out.println(FreeSocketPortUtil.findFreeLocalPort());

-    }

-

-    /**

-     * Finds a free local socket port.

-     *

-     * @return a free local socket port.

-     * @throws IOException

-     */

-    public static int findFreeLocalPort() throws IOException

-    {

-        final ServerSocket server = new ServerSocket(0);

-        try

-        {

-            return server.getLocalPort();

-        } finally

-        {

-            server.close();

-        }

-    }

-}

diff --git a/trunk/core/src/test/java/org/apache/commons/vfs2/util/NHttpServer.java b/trunk/core/src/test/java/org/apache/commons/vfs2/util/NHttpServer.java
deleted file mode 100644
index 4147c1e..0000000
--- a/trunk/core/src/test/java/org/apache/commons/vfs2/util/NHttpServer.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.

- * ====================================================================

- *

- * This software consists of voluntary contributions made by many

- * individuals on behalf of the Apache Software Foundation.  For more

- * information on the Apache Software Foundation, please see

- * <http://www.apache.org/>.

- */

-package org.apache.commons.vfs2.util;

-

-import java.io.File;

-import java.io.IOException;

-import java.io.InputStream;

-import java.io.InterruptedIOException;

-import java.net.InetSocketAddress;

-import java.net.MalformedURLException;

-import java.net.URL;

-import java.net.URLDecoder;

-import java.security.KeyManagementException;

-import java.security.KeyStore;

-import java.security.KeyStoreException;

-import java.security.NoSuchAlgorithmException;

-import java.security.UnrecoverableKeyException;

-import java.security.cert.CertificateException;

-import java.util.Date;

-import java.util.Locale;

-import java.util.concurrent.Executors;

-

-import javax.net.ssl.KeyManager;

-import javax.net.ssl.KeyManagerFactory;

-import javax.net.ssl.SSLContext;

-

-import org.apache.commons.httpclient.util.DateUtil;

-import org.apache.commons.io.IOUtils;

-import org.apache.http.HttpException;

-import org.apache.http.HttpHeaders;

-import org.apache.http.HttpRequest;

-import org.apache.http.HttpResponse;

-import org.apache.http.HttpResponseInterceptor;

-import org.apache.http.HttpStatus;

-import org.apache.http.MethodNotSupportedException;

-import org.apache.http.entity.ContentType;

-import org.apache.http.impl.DefaultConnectionReuseStrategy;

-import org.apache.http.impl.nio.DefaultHttpServerIODispatch;

-import org.apache.http.impl.nio.DefaultNHttpServerConnection;

-import org.apache.http.impl.nio.DefaultNHttpServerConnectionFactory;

-import org.apache.http.impl.nio.SSLNHttpServerConnectionFactory;

-import org.apache.http.impl.nio.reactor.DefaultListeningIOReactor;

-import org.apache.http.nio.NHttpConnection;

-import org.apache.http.nio.NHttpConnectionFactory;

-import org.apache.http.nio.NHttpServerConnection;

-import org.apache.http.nio.entity.NFileEntity;

-import org.apache.http.nio.entity.NStringEntity;

-import org.apache.http.nio.protocol.BasicAsyncRequestConsumer;

-import org.apache.http.nio.protocol.BasicAsyncResponseProducer;

-import org.apache.http.nio.protocol.HttpAsyncExchange;

-import org.apache.http.nio.protocol.HttpAsyncRequestConsumer;

-import org.apache.http.nio.protocol.HttpAsyncRequestHandler;

-import org.apache.http.nio.protocol.HttpAsyncRequestHandlerRegistry;

-import org.apache.http.nio.protocol.HttpAsyncService;

-import org.apache.http.nio.reactor.IOEventDispatch;

-import org.apache.http.nio.reactor.IOReactorException;

-import org.apache.http.nio.reactor.ListeningIOReactor;

-import org.apache.http.params.CoreConnectionPNames;

-import org.apache.http.params.CoreProtocolPNames;

-import org.apache.http.params.HttpParams;

-import org.apache.http.params.SyncBasicHttpParams;

-import org.apache.http.protocol.ExecutionContext;

-import org.apache.http.protocol.HttpContext;

-import org.apache.http.protocol.HttpProcessor;

-import org.apache.http.protocol.ImmutableHttpProcessor;

-import org.apache.http.protocol.ResponseConnControl;

-import org.apache.http.protocol.ResponseContent;

-import org.apache.http.protocol.ResponseDate;

-import org.apache.http.protocol.ResponseServer;

-

-/**

- * Adapted from org.apache.http.examples.nio.NHttpServer.

- *

- * <p>

- * HTTP/1.1 file server based on the non-blocking I/O model and capable of direct channel (zero copy) data transfer.

- * </p>

- * <p>

- * Please note the purpose of this application is demonstrate the usage of HttpCore APIs. It is NOT intended to

- * demonstrate the most efficient way of building an HTTP server.

- * </p>

- *

- * @version $Id$

- * @since 2.1

- */

-public class NHttpServer

-{

-

-    static class HttpFileHandler implements HttpAsyncRequestHandler<HttpRequest>

-    {

-

-        private final File docRoot;

-

-        public HttpFileHandler(final File docRoot)

-        {

-            super();

-            this.docRoot = docRoot;

-        }

-

-        @Override

-        public void handle(final HttpRequest request, final HttpAsyncExchange httpexchange, final HttpContext context)

-                throws HttpException, IOException

-        {

-            final HttpResponse response = httpexchange.getResponse();

-            this.handleInternal(request, response, context);

-            httpexchange.submitResponse(new BasicAsyncResponseProducer(response));

-        }

-

-        private void handleInternal(final HttpRequest request, final HttpResponse response, final HttpContext context)

-                throws HttpException, IOException

-        {

-

-            final String method = request.getRequestLine().getMethod().toUpperCase(Locale.ENGLISH);

-            if (!method.equals("GET") && !method.equals("HEAD") && !method.equals("POST"))

-            {

-                throw new MethodNotSupportedException(method + " method not supported");

-            }

-

-            final String target = request.getRequestLine().getUri();

-            final File file = new File(this.docRoot, URLDecoder.decode(target, "UTF-8"));

-            if (!file.exists())

-            {

-

-                response.setStatusCode(HttpStatus.SC_NOT_FOUND);

-                final NStringEntity entity = new NStringEntity("<html><body><h1>File" + file.getPath()

-                        + " not found</h1></body></html>", ContentType.create("text/html", "UTF-8"));

-                response.setEntity(entity);

-                NHttpServer.debug("File " + file.getPath() + " not found");

-

-            } else if (!file.canRead())

-            {

-

-                response.setStatusCode(HttpStatus.SC_FORBIDDEN);

-                final NStringEntity entity = new NStringEntity("<html><body><h1>Access denied</h1></body></html>",

-                        ContentType.create("text/html", "UTF-8"));

-                response.setEntity(entity);

-                NHttpServer.debug("Cannot read file " + file.getPath());

-

-            } else

-            {

-                final NHttpConnection conn = (NHttpConnection) context.getAttribute(ExecutionContext.HTTP_CONNECTION);

-                response.setStatusCode(HttpStatus.SC_OK);

-                final NFileEntity body = new NFileEntity(file, ContentType.create("text/html"));

-                response.setEntity(body);

-                if (!response.containsHeader(HttpHeaders.LAST_MODIFIED))

-                {

-                    response.addHeader(HttpHeaders.LAST_MODIFIED, DateUtil.formatDate(new Date(file.lastModified())));

-                }

-                NHttpServer.debug(conn + ": serving file " + file.getPath());

-            }

-        }

-

-        @Override

-        public HttpAsyncRequestConsumer<HttpRequest> processRequest(final HttpRequest request, final HttpContext context)

-        {

-            // Buffer request content in memory for simplicity

-            return new BasicAsyncRequestConsumer();

-        }

-

-    }

-

-    static final boolean Debug = false;

-

-    private static void debug(final String s)

-    {

-        if (Debug)

-        {

-            System.out.println(s);

-        }

-    }

-

-    public static void main(final String[] args) throws Exception

-    {

-        new NHttpServer().run(Integer.valueOf(args[0]), new File(args[1]), 0);

-    }

-

-    volatile ListeningIOReactor ioReactor;

-

-    public boolean run(final int port, final File docRoot, final long waitMillis) throws IOReactorException,

-            InterruptedException

-    {

-        Executors.newSingleThreadExecutor().execute(new Runnable()

-        {

-            @Override

-            public void run()

-            {

-                try

-                {

-                    NHttpServer.this.runBlock(port, docRoot);

-                } catch (final IOReactorException e)

-                {

-                    throw new IllegalStateException(e);

-                } catch (final UnrecoverableKeyException e)

-                {

-                    throw new IllegalStateException(e);

-                } catch (final KeyStoreException e)

-                {

-                    throw new IllegalStateException(e);

-                } catch (final NoSuchAlgorithmException e)

-                {

-                    throw new IllegalStateException(e);

-                } catch (final CertificateException e)

-                {

-                    throw new IllegalStateException(e);

-                } catch (final IOException e)

-                {

-                    throw new IllegalStateException(e);

-                } catch (final KeyManagementException e)

-                {

-                    throw new IllegalStateException(e);

-                }

-            }

-        });

-        return this.waitForServerStartup(port, waitMillis);

-    }

-

-    public void runBlock(final int port, final File docRoot) throws KeyStoreException, NoSuchAlgorithmException,

-            CertificateException, IOException, UnrecoverableKeyException, KeyManagementException

-    {

-        if (docRoot == null)

-        {

-            throw new IllegalArgumentException("No doc root specified.");

-        }

-        // HTTP parameters for the server

-        final HttpParams params = new SyncBasicHttpParams();

-        params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 5000)

-                .setIntParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 8 * 1024)

-                .setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true)

-                .setParameter(CoreProtocolPNames.ORIGIN_SERVER, "HttpTest/1.1");

-        // Create HTTP protocol processing chain

-        final HttpProcessor httpproc = new ImmutableHttpProcessor(new HttpResponseInterceptor[]

-        {

-                // Use standard server-side protocol interceptors

-                new ResponseDate(),

-                new ResponseServer(),

-                new ResponseContent(),

-                new ResponseConnControl() });

-        // Create request handler registry

-        final HttpAsyncRequestHandlerRegistry reqistry = new HttpAsyncRequestHandlerRegistry();

-        // Register the default handler for all URIs

-        reqistry.register("*", new HttpFileHandler(docRoot));

-        // Create server-side HTTP protocol handler

-        final HttpAsyncService protocolHandler = new HttpAsyncService(httpproc, new DefaultConnectionReuseStrategy(),

-                reqistry, params)

-        {

-

-            @Override

-            public void closed(final NHttpServerConnection conn)

-            {

-                NHttpServer.debug(conn + ": connection closed");

-                super.closed(conn);

-            }

-

-            @Override

-            public void connected(final NHttpServerConnection conn)

-            {

-                NHttpServer.debug(conn + ": connection open");

-                super.connected(conn);

-            }

-

-        };

-        // Create HTTP connection factory

-        NHttpConnectionFactory<DefaultNHttpServerConnection> connFactory;

-        if (port == 8443)

-        {

-            // Initialize SSL context

-            final ClassLoader cl = NHttpServer.class.getClassLoader();

-            final URL url = cl.getResource("my.keystore");

-            if (url == null)

-            {

-                NHttpServer.debug("Keystore not found");

-                System.exit(1);

-            }

-            final KeyStore keystore = KeyStore.getInstance("jks");

-            keystore.load(url.openStream(), "secret".toCharArray());

-            final KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());

-            kmfactory.init(keystore, "secret".toCharArray());

-            final KeyManager[] keymanagers = kmfactory.getKeyManagers();

-            final SSLContext sslcontext = SSLContext.getInstance("TLS");

-            sslcontext.init(keymanagers, null, null);

-            connFactory = new SSLNHttpServerConnectionFactory(sslcontext, null, params);

-        } else

-        {

-            connFactory = new DefaultNHttpServerConnectionFactory(params);

-        }

-        // Create server-side I/O event dispatch

-        final IOEventDispatch ioEventDispatch = new DefaultHttpServerIODispatch(protocolHandler, connFactory);

-        // Create server-side I/O reactor

-        this.ioReactor = new DefaultListeningIOReactor();

-        try

-        {

-            // Listen of the given port

-            this.ioReactor.listen(new InetSocketAddress(port));

-            // Ready to go!

-            this.ioReactor.execute(ioEventDispatch);

-        } catch (final InterruptedIOException ex)

-        {

-            System.err.println("Interrupted");

-        } catch (final IOException e)

-        {

-            System.err.println("I/O error: " + e.getMessage());

-        }

-        NHttpServer.debug("Shutdown");

-    }

-

-    public void stop() throws IOException

-    {

-        if (this.ioReactor != null)

-        {

-            this.ioReactor.shutdown(2000);

-        }

-    }

-

-    private boolean waitForServerStartup(final int port, final long waitMillis) throws InterruptedException

-    {

-        final long endWait = System.currentTimeMillis() + waitMillis;

-        final String urlSpec = "http://localhost:" + port;

-        try

-        {

-            final URL url = new URL(urlSpec);

-            InputStream inputStream = null;

-            while (System.currentTimeMillis() < endWait && inputStream == null)

-            {

-                try

-                {

-                    inputStream = url.openStream();

-                    if (inputStream != null)

-                    {

-                        IOUtils.closeQuietly(inputStream);

-                        return true;

-                    }

-                } catch (final IOException e)

-                {

-                    // ignore

-                    // debug("While waiting: " + e);

-                    // e.printStackTrace();

-                }

-                Thread.sleep(100);

-            }

-        } catch (final MalformedURLException e)

-        {

-            throw new IllegalStateException("Error in test code for URL " + urlSpec);

-        }

-        return false;

-    }

-

-}

diff --git a/trunk/core/src/test/resources/jcrweb.xml b/trunk/core/src/test/resources/jcrweb.xml
deleted file mode 100644
index 7124d45..0000000
--- a/trunk/core/src/test/resources/jcrweb.xml
+++ /dev/null
@@ -1,186 +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.
-  -->
-
-<!--  Apache Commons VFS Note:
-      This file is from jackrabbit-standalone-1.6.5!WEB-INF/web.xml
-      Some servlets are removed or reconfigured to avoid cluttering directories.
--->
-
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
-<web-app>
-    <display-name>Apache Jackrabbit</display-name>
-
-    <!-- ====================================================================== -->
-    <!-- R E P O S I T O R Y   S E R V L E T                                    -->
-    <!-- ====================================================================== -->
-    <servlet>
-        <servlet-name>Repository</servlet-name>
-        <servlet-class>org.apache.jackrabbit.j2ee.RepositoryAccessServlet</servlet-class>
-
-        <init-param>
-          <param-name>repository.context.attribute.name</param-name>
-          <param-value>javax.jcr.Repository</param-value>
-        </init-param>
-
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-
-    <!-- ====================================================================== -->
-    <!-- W E B D A V  S E R V L E T                                              -->
-    <!-- ====================================================================== -->
-    <servlet>
-        <servlet-name>Webdav</servlet-name>
-        <description>
-            The webdav servlet that connects HTTP request to the repository.
-        </description>
-        <servlet-class>org.apache.jackrabbit.j2ee.SimpleWebdavServlet</servlet-class>
-
-        <init-param>
-            <param-name>resource-path-prefix</param-name>
-            <param-value>/repository</param-value>
-            <description>
-                defines the prefix for spooling resources out of the repository.
-            </description>
-        </init-param>
-        <init-param>
-            <param-name>resource-config</param-name>
-            <param-value>/WEB-INF/config.xml</param-value>
-            <description>
-                Defines various dav-resource configuration parameters.
-            </description>
-        </init-param>
-        <load-on-startup>3</load-on-startup>
-    </servlet>
-
-    <!-- ====================================================================== -->
-    <!-- W E B D A V  S E R V E R  S E R V L E T                                  -->
-    <!-- ====================================================================== -->
-    <servlet>
-        <servlet-name>JCRWebdavServer</servlet-name>
-        <description>
-            The servlet used to remote JCR calls over HTTP.
-        </description>
-        <servlet-class>org.apache.jackrabbit.j2ee.JcrRemotingServlet</servlet-class>
-        <init-param>
-            <param-name>missing-auth-mapping</param-name>
-            <param-value></param-value>
-            <description>
-                Defines how a missing authorization header should be handled.
-                1) If this init-param is missing, a 401 response is generated.
-                This is suiteable for clients (eg. webdav clients) for which
-                sending a proper authorization header is not possible if the
-                server never sent a 401.
-                2) If this init-param is present with an empty value,
-                null-credentials are returned, thus forcing an null login
-                on the repository.
-                3) If this init-param has a 'user:password' value, the respective
-                simple credentials are generated.
-            </description>
-        </init-param>
-        <!--
-            Optional parameter to define the value of the 'WWW-Authenticate' header
-        -->
-        <!--
-        <init-param>
-            <param-name>authenticate-header</param-name>
-            <param-value>Basic realm="Jackrabbit Webdav Server"</param-value>
-            <description>
-                Defines the value of the 'WWW-Authenticate' header.
-            </description>
-        </init-param>
-        -->
-        <init-param>
-            <param-name>resource-path-prefix</param-name>
-            <param-value>/server</param-value>
-            <description>
-                defines the prefix for spooling resources out of the repository.
-            </description>
-        </init-param>
-        <!--
-            Init parameters specific for JcrRemotingServlet
-        -->
-        <init-param>
-            <param-name>home</param-name>
-            <param-value>target/test/jackrabbit</param-value>
-            <description>JcrRemotingServlet: Optional home directory for JcrRemotingServlet temporary files (default: "jackrabbit")</description>
-        </init-param>
-        <init-param>
-            <param-name>rmi.enabled</param-name>
-            <param-value>false</param-value>
-        </init-param>
-        <!--
-        <init-param>
-            <param-name>temp-directory</param-name>
-            <param-value></param-value>
-            <description>JcrRemotingServlet: Optional temporary directory name (under home, default: "tmp")</description>
-        </init-param>
-        <init-param>
-            <param-name>batchread-config</param-name>
-            <param-value>/WEB-INF/batchread.properties</param-value>
-            <description>JcrRemotingServlet: Optional mapping from node type names to default depth.</description>
-        </init-param>
-        -->
-        <load-on-startup>5</load-on-startup>
-    </servlet>
-
-    <!-- ====================================================================== -->
-    <!-- R M I   B I N D I N G   S E R V L E T S                                -->
-    <!-- ====================================================================== -->
-<!--     <servlet>
-      <servlet-name>RMI</servlet-name>
-      <servlet-class>org.apache.jackrabbit.servlet.remote.RMIRemoteBindingServlet</servlet-class>
-        <init-param>
-            <param-name>url</param-name>
-            <param-value>//localhost/jackrabbit.repository</param-value>
-        </init-param>
-        <load-on-startup>6</load-on-startup>
-    </servlet>
--->
-    <!-- ====================================================================== -->
-    <!-- S E R V L E T   M A P P I N G                                          -->
-    <!-- ====================================================================== -->
-    <servlet-mapping>
-        <servlet-name>Webdav</servlet-name>
-        <url-pattern>/repository/*</url-pattern>
-    </servlet-mapping>
-    <servlet-mapping>
-        <servlet-name>JCRWebdavServer</servlet-name>
-        <url-pattern>/server/*</url-pattern>
-    </servlet-mapping>
-<!--      <servlet-mapping>
-        <servlet-name>RMI</servlet-name>
-        <url-pattern>/rmi</url-pattern>
-    </servlet-mapping>-->
-
-    <!-- ====================================================================== -->
-    <!-- W E L C O M E   F I L E S                                              -->
-    <!-- ====================================================================== -->
-    <welcome-file-list>
-      <welcome-file>index.jsp</welcome-file>
-    </welcome-file-list>
-
-    <error-page>
-        <exception-type>org.apache.jackrabbit.j2ee.JcrApiNotFoundException</exception-type>
-        <location>/error/classpath.jsp</location>
-    </error-page>
-    <error-page>
-        <exception-type>javax.jcr.RepositoryException</exception-type>
-        <location>/error/repository.jsp</location>
-    </error-page>
-
-</web-app>
diff --git a/trunk/core/src/test/resources/log4j.properties b/trunk/core/src/test/resources/log4j.properties
deleted file mode 100644
index 11084db..0000000
--- a/trunk/core/src/test/resources/log4j.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.

-

-# @version $Id: log4j.properties 27216 2011-09-14 02:34:00Z ggregory $

-

-log4j.rootLogger=ERROR, Console

-#log4j.rootLogger=WARN, Console

-#log4j.rootLogger=INFO, Console

-#log4j.rootLogger=DEBUG, Console

-

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

-# The console log

-#

-# Documentation: http://logging.apache.org/log4j/docs/api/org/apache/log4j/ConsoleAppender.html

-#

-# To enable this appender, add its name to the log4j.rootLogger list

-

-log4j.appender.Console=org.apache.log4j.ConsoleAppender

-log4j.appender.Console.ImmediateFlush=true

-log4j.appender.Console.Target=System.out

-log4j.appender.Console.layout=org.apache.log4j.PatternLayout

-log4j.appender.Console.layout.ConversionPattern=%d{ISO8601} [%t] %-5p: %m%n

diff --git a/trunk/core/src/test/resources/org.apache.ftpserver/users.properties b/trunk/core/src/test/resources/org.apache.ftpserver/users.properties
deleted file mode 100644
index fadf36c..0000000
--- a/trunk/core/src/test/resources/org.apache.ftpserver/users.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.

-

-# Password is "admin"

-ftpserver.user.admin.userpassword=21232F297A57A5A743894A0E4A801FC3

-ftpserver.user.admin.homedirectory=target/test-classes/test-data

-ftpserver.user.admin.enableflag=true

-ftpserver.user.admin.writepermission=true

-ftpserver.user.admin.maxloginnumber=0

-ftpserver.user.admin.maxloginperip=0

-ftpserver.user.admin.idletime=0

-ftpserver.user.admin.uploadrate=0

-ftpserver.user.admin.downloadrate=0

-

-ftpserver.user.anonymous.userpassword=

-ftpserver.user.anonymous.homedirectory=target/test-classes/test-data

-ftpserver.user.anonymous.enableflag=true

-ftpserver.user.anonymous.writepermission=false

-ftpserver.user.anonymous.maxloginnumber=20

-ftpserver.user.anonymous.maxloginperip=2

-ftpserver.user.anonymous.idletime=300

-ftpserver.user.anonymous.uploadrate=4800

-ftpserver.user.anonymous.downloadrate=4800

-

-# password is "test"

-ftpserver.user.test.userpassword=098f6bcd4621d373cade4e832627b4f6

-ftpserver.user.test.homedirectory=target/test-classes/test-data

-ftpserver.user.test.enableflag=true

-ftpserver.user.test.writepermission=true

diff --git a/trunk/core/src/test/resources/org.apache.ftpsserver/ftpserver.jks b/trunk/core/src/test/resources/org.apache.ftpsserver/ftpserver.jks
deleted file mode 100644
index 28f294b..0000000
--- a/trunk/core/src/test/resources/org.apache.ftpsserver/ftpserver.jks
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/org.apache.ftpsserver/users.properties b/trunk/core/src/test/resources/org.apache.ftpsserver/users.properties
deleted file mode 100644
index 59fe696..0000000
--- a/trunk/core/src/test/resources/org.apache.ftpsserver/users.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.
-
-# Password is "admin"
-ftpserver.user.admin.userpassword=21232F297A57A5A743894A0E4A801FC3
-ftpserver.user.admin.homedirectory=target/test-classes/test-data
-ftpserver.user.admin.enableflag=true
-ftpserver.user.admin.writepermission=true
-ftpserver.user.admin.maxloginnumber=0
-ftpserver.user.admin.maxloginperip=0
-ftpserver.user.admin.idletime=0
-ftpserver.user.admin.uploadrate=0
-ftpserver.user.admin.downloadrate=0
-
-ftpserver.user.anonymous.userpassword=
-ftpserver.user.anonymous.homedirectory=target/test-classes/test-data
-ftpserver.user.anonymous.enableflag=true
-ftpserver.user.anonymous.writepermission=false
-ftpserver.user.anonymous.maxloginnumber=20
-ftpserver.user.anonymous.maxloginperip=2
-ftpserver.user.anonymous.idletime=300
-ftpserver.user.anonymous.uploadrate=4800
-ftpserver.user.anonymous.downloadrate=4800
-
-# password is "test"
-ftpserver.user.test.userpassword=098f6bcd4621d373cade4e832627b4f6
-ftpserver.user.test.homedirectory=target/test-classes/test-data
-ftpserver.user.test.enableflag=true
-ftpserver.user.test.writepermission=true
diff --git a/trunk/core/src/test/resources/test-data/largefile.tar.gz b/trunk/core/src/test/resources/test-data/largefile.tar.gz
deleted file mode 100644
index 5bcc47a..0000000
--- a/trunk/core/src/test/resources/test-data/largefile.tar.gz
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/nested.jar b/trunk/core/src/test/resources/test-data/nested.jar
deleted file mode 100644
index c5bc269..0000000
--- a/trunk/core/src/test/resources/test-data/nested.jar
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/nested.tar b/trunk/core/src/test/resources/test-data/nested.tar
deleted file mode 100644
index ffc4089..0000000
--- a/trunk/core/src/test/resources/test-data/nested.tar
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/nested.tbz2 b/trunk/core/src/test/resources/test-data/nested.tbz2
deleted file mode 100644
index 60ebcf0..0000000
--- a/trunk/core/src/test/resources/test-data/nested.tbz2
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/nested.tgz b/trunk/core/src/test/resources/test-data/nested.tgz
deleted file mode 100644
index cbbcb61..0000000
--- a/trunk/core/src/test/resources/test-data/nested.tgz
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/nested.zip b/trunk/core/src/test/resources/test-data/nested.zip
deleted file mode 100644
index d1c78f4..0000000
--- a/trunk/core/src/test/resources/test-data/nested.zip
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/file1.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/file1.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/file1.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/file2.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/file2.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/file2.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/file3.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/file3.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/file3.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir1/file1.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir1/file1.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir1/file1.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir1/file2.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir1/file2.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir1/file2.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir1/file3.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir1/file3.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir1/file3.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir2/file1.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir2/file1.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir2/file1.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir2/file2.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir2/file2.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir2/file2.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir2/file3.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir2/file3.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir2/file3.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir3/file1.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir3/file1.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir3/file1.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir3/file2.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir3/file2.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir3/file2.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir3/file3.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir3/file3.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir3/file3.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir4.jar/file1.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir4.jar/file1.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir4.jar/file1.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir4.jar/file2.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir4.jar/file2.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir4.jar/file2.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir4.jar/file3.txt b/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir4.jar/file3.txt
deleted file mode 100644
index 9ad7b1b..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/dir1/subdir4.jar/file3.txt
+++ /dev/null
@@ -1 +0,0 @@
-A test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/empty.txt b/trunk/core/src/test/resources/test-data/read-tests/empty.txt
deleted file mode 100644
index e69de29..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/empty.txt
+++ /dev/null
diff --git a/trunk/core/src/test/resources/test-data/read-tests/file space.txt b/trunk/core/src/test/resources/test-data/read-tests/file space.txt
deleted file mode 100644
index af27ff4..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/file space.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is a test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/file%.txt b/trunk/core/src/test/resources/test-data/read-tests/file%.txt
deleted file mode 100644
index af27ff4..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/file%.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is a test file.
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/read-tests/file1.txt b/trunk/core/src/test/resources/test-data/read-tests/file1.txt
deleted file mode 100644
index af27ff4..0000000
--- a/trunk/core/src/test/resources/test-data/read-tests/file1.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is a test file.
\ No newline at end of file
diff --git "a/trunk/core/src/test/resources/test-data/test-hash-\043test.txt" "b/trunk/core/src/test/resources/test-data/test-hash-\043test.txt"
deleted file mode 100644
index 8deb37d..0000000
--- "a/trunk/core/src/test/resources/test-data/test-hash-\043test.txt"
+++ /dev/null
@@ -1 +0,0 @@
-Test file for VFS-325: Bad handling of hashs (#) in file names when walking a file tree using findFiles().
\ No newline at end of file
diff --git a/trunk/core/src/test/resources/test-data/test.jar b/trunk/core/src/test/resources/test-data/test.jar
deleted file mode 100644
index 7ff1e6a..0000000
--- a/trunk/core/src/test/resources/test-data/test.jar
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/test.mf b/trunk/core/src/test/resources/test-data/test.mf
deleted file mode 100644
index e85d462..0000000
--- a/trunk/core/src/test/resources/test-data/test.mf
+++ /dev/null
@@ -1,11 +0,0 @@
-Manifest-Version: 1.0
-Specification-Title: SpecTitle
-Specification-Vendor: SpecVendor
-Specification-Version: 1.0
-Implementation-Title: ImplTitle
-Implementation-Vendor: ImplVendor
-Implementation-Version: 1.1
-Sealed: false
-
-Name: code/sealed/
-Sealed: true
diff --git a/trunk/core/src/test/resources/test-data/test.policy b/trunk/core/src/test/resources/test-data/test.policy
deleted file mode 100644
index 4c363a0..0000000
--- a/trunk/core/src/test/resources/test-data/test.policy
+++ /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.
-
-// Standard extensions get all permissions by default
-
-grant codeBase "file:${java.home}/lib/ext/*" {
-	permission java.security.AllPermission;
-};
-
-grant codeBase "file:${maven.home}/-" {
-	permission java.security.AllPermission;
-};
-
-grant codeBase "file:${maven.build.dest}" {
-    permission java.io.FilePermission "${user.dir}/vfs_cache/-", "read, write, delete";
-    permission java.io.FilePermission "${user.dir}/vfs_cache", "read, write, delete";
-    permission java.io.FilePermission "${user.dir}", "read";
-    permission java.net.NetPermission "specifyStreamHandler";
-};
-
-// default permissions granted to all domains
-
-grant {
-    permission java.io.FilePermission "${test.basedir}/write-tests", "read, write, delete";
-    permission java.io.FilePermission "${test.basedir}/write-tests/-", "read, write, delete";
-    permission java.io.FilePermission "${test.basedir}/-", "read";
-    permission java.io.FilePermission "${test.basedir}", "read";
-
-    //This is needed for the ClassLoader tests.
-    permission java.lang.RuntimePermission "createClassLoader";
-
-	// Allows any thread to stop itself using the java.lang.Thread.stop()
-	// method that takes no argument.
-	// Note that this permission is granted by default only to remain
-	// backwards compatible.
-	// It is strongly recommended that you either remove this permission
-	// from this policy file or further restrict it to code sources
-	// that you specify, because Thread.stop() is potentially unsafe.
-	// See "http://java.sun.com/notes" for more information.
-	permission java.lang.RuntimePermission "stopThread";
-
-	// allows anyone to listen on un-privileged ports
-	permission java.net.SocketPermission "localhost:1024-", "listen";
-
-	// "standard" properies that can be read by anyone
-
-	permission java.util.PropertyPermission "java.version", "read";
-	permission java.util.PropertyPermission "java.vendor", "read";
-	permission java.util.PropertyPermission "java.vendor.url", "read";
-	permission java.util.PropertyPermission "java.class.version", "read";
-	permission java.util.PropertyPermission "os.name", "read";
-	permission java.util.PropertyPermission "os.version", "read";
-	permission java.util.PropertyPermission "os.arch", "read";
-	permission java.util.PropertyPermission "file.separator", "read";
-	permission java.util.PropertyPermission "path.separator", "read";
-	permission java.util.PropertyPermission "line.separator", "read";
-
-	permission java.util.PropertyPermission "java.specification.version", "read";
-	permission java.util.PropertyPermission "java.specification.vendor", "read";
-	permission java.util.PropertyPermission "java.specification.name", "read";
-
-	permission java.util.PropertyPermission "java.vm.specification.version", "read";
-	permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
-	permission java.util.PropertyPermission "java.vm.specification.name", "read";
-	permission java.util.PropertyPermission "java.vm.version", "read";
-	permission java.util.PropertyPermission "java.vm.vendor", "read";
-	permission java.util.PropertyPermission "java.vm.name", "read";
-	permission java.util.PropertyPermission "test.basedir", "read";
-	permission java.util.PropertyPermission "user.dir", "read";
-};
-
diff --git a/trunk/core/src/test/resources/test-data/test.tar b/trunk/core/src/test/resources/test-data/test.tar
deleted file mode 100644
index ef82461..0000000
--- a/trunk/core/src/test/resources/test-data/test.tar
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/test.tbz2 b/trunk/core/src/test/resources/test-data/test.tbz2
deleted file mode 100644
index f7e2086..0000000
--- a/trunk/core/src/test/resources/test-data/test.tbz2
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/test.tgz b/trunk/core/src/test/resources/test-data/test.tgz
deleted file mode 100644
index 579107d..0000000
--- a/trunk/core/src/test/resources/test-data/test.tgz
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/test.zip b/trunk/core/src/test/resources/test-data/test.zip
deleted file mode 100644
index 3e5d4d9..0000000
--- a/trunk/core/src/test/resources/test-data/test.zip
+++ /dev/null
Binary files differ
diff --git a/trunk/core/src/test/resources/test-data/write-tests/dummy.txt b/trunk/core/src/test/resources/test-data/write-tests/dummy.txt
deleted file mode 100644
index d7716a7..0000000
--- a/trunk/core/src/test/resources/test-data/write-tests/dummy.txt
+++ /dev/null
@@ -1 +0,0 @@
-dummy file to cause directory to be created.
\ No newline at end of file
diff --git a/trunk/dist/pom.xml b/trunk/dist/pom.xml
deleted file mode 100644
index 59a7902..0000000
--- a/trunk/dist/pom.xml
+++ /dev/null
@@ -1,142 +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>
-
-  <name>Apache Commons VFS Distribution</name>
-  <groupId>org.apache.commons</groupId>
-  <artifactId>commons-vfs2-distribution</artifactId>
-  <version>2.1</version>
-  <packaging>pom</packaging>
-  <description>Apache Commons VFS is a Virtual File System library - Distribution archives.</description>
-
-  <parent>
-    <groupId>org.apache.commons</groupId>
-    <artifactId>commons-vfs2-project</artifactId>
-    <version>2.1</version>
-    <relativePath>../</relativePath>
-  </parent>
-
-  <properties>
-    <!--  dist module contains no code and no checkstyle config -->
-    <checkstyle.skip>true</checkstyle.skip>
-    <vfs.parent.dir>${basedir}/..</vfs.parent.dir>
-  </properties>
-
-  <profiles>
-    <profile>
-      <id>release</id>
-      <dependencies>
-        <dependency>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-vfs2</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-vfs2</artifactId>
-          <version>${project.version}</version>
-          <classifier>sources</classifier>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-vfs2</artifactId>
-          <version>${project.version}</version>
-          <classifier>javadoc</classifier>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-vfs2</artifactId>
-          <version>${project.version}</version>
-          <classifier>tests</classifier>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-vfs2</artifactId>
-          <version>${project.version}</version>
-          <classifier>test-sources</classifier>
-        </dependency>
-
-        <dependency>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-vfs2-examples</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-vfs2-examples</artifactId>
-          <version>${project.version}</version>
-          <classifier>sources</classifier>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-vfs2-examples</artifactId>
-          <version>${project.version}</version>
-          <classifier>javadoc</classifier>
-        </dependency>
-      </dependencies>
-
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <executions>
-              <!-- As the main Apache POM only builds source zip archives but
-                   commons wants both zip and tar.gz and because this is configured
-                   in the assembly, we need to use a specific assembly. That also allows
-                   naming the final artifact as -src not -source-release.
-              -->
-              <execution>
-                <id>vfs-source-release-assembly</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>single</goal>
-                </goals>
-                <configuration>
-                  <finalName>commons-vfs-${project.version}</finalName>
-                  <descriptors>
-                      <descriptor>src/assembly/src.xml</descriptor>
-                  </descriptors>
-                  <tarLongFileMode>gnu</tarLongFileMode>
-                </configuration>
-              </execution>
-              <execution>
-                <id>binary</id>
-                <configuration>
-                  <finalName>commons-vfs-${project.version}</finalName>
-                  <descriptors>
-                    <descriptor>src/assembly/bin.xml</descriptor>
-                  </descriptors>
-                  <tarLongFileMode>gnu</tarLongFileMode>
-                </configuration>
-                <goals>
-                  <goal>single</goal>
-                </goals>
-                <phase>package</phase>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-</project>
diff --git a/trunk/dist/src/assembly/bin.xml b/trunk/dist/src/assembly/bin.xml
deleted file mode 100644
index c175e60..0000000
--- a/trunk/dist/src/assembly/bin.xml
+++ /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.
--->
-<assembly>
-    <id>bin</id>
-    <formats>
-        <format>tar.gz</format>
-        <format>zip</format>
-    </formats>
-    <includeSiteDirectory>false</includeSiteDirectory>
-  
-    <dependencySets>
-        <dependencySet>
-            <includes>
-                <include>org.apache.commons:commons-vfs2</include>
-                <include>org.apache.commons:commons-vfs2-examples</include>
-            </includes>
-            <useProjectArtifact>false</useProjectArtifact>
-        </dependencySet>
-    </dependencySets>
-
-    <fileSets>
-        <fileSet>
-            <directory>..</directory>
-            <includes>
-                <include>LICENSE.txt</include>
-                <include>NOTICE.txt</include>
-                <include>RELEASE-NOTES.txt</include>
-            </includes>
-        </fileSet>
-    </fileSets>
-
-	</assembly>
diff --git a/trunk/dist/src/assembly/src.xml b/trunk/dist/src/assembly/src.xml
deleted file mode 100644
index 25c32a7..0000000
--- a/trunk/dist/src/assembly/src.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.
--->
-
-<assembly>
-  <id>src</id>
-  <formats>
-    <format>zip</format>
-    <format>tar.gz</format>
-  </formats>
-  <fileSets>
-    <!-- main project directory structure -->
-    <fileSet>
-      <directory>..</directory>
-      <useDefaultExcludes>true</useDefaultExcludes>
-      <excludes>
-        <exclude>**/sandbox/**</exclude>
-        <!-- build output -->
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/).*${project.build.directory}.*]</exclude>
-
-        <!-- NOTE: Most of the following excludes should not be required
-             if the standard release process is followed. This is because the
-             release plugin checks out project sources into a location like
-             target/checkout, then runs the build from there. The result is
-             a source-release archive that comes from a pretty clean directory
-             structure.
-
-             HOWEVER, if the release plugin is configured to run extra goals
-             or generate a project website, it's definitely possible that some
-             of these files will be present. So, it's safer to exclude them.
-        -->
-
-        <!-- IDEs -->
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?maven-eclipse\.xml]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.project]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.classpath]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iws]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.ipr]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iml]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.idea(/.*)?]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.settings(/.*)?]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.externalToolBuilders(/.*)?]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.deployables(/.*)?]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.wtpmodules(/.*)?]</exclude>
-
-        <!-- misc -->
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?cobertura\.ser]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?doap_vfs\.rdf]</exclude>
-
-        <!-- release-plugin temp files -->
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?pom\.xml\.releaseBackup]</exclude>
-        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?release\.properties]</exclude>
-      </excludes>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/trunk/examples/pom.xml b/trunk/examples/pom.xml
deleted file mode 100644
index bdb2777..0000000
--- a/trunk/examples/pom.xml
+++ /dev/null
@@ -1,82 +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>
-
-  <name>Apache Commons VFS Examples</name>
-  <groupId>org.apache.commons</groupId>
-  <artifactId>commons-vfs2-examples</artifactId>
-  <version>2.1</version>
-  <description>Apache Commons VFS is a Virtual File System library - Examples.</description>
-
-  <parent>
-    <groupId>org.apache.commons</groupId>
-    <artifactId>commons-vfs2-project</artifactId>
-    <version>2.1</version>
-    <relativePath>../</relativePath>
-  </parent>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-vfs2</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>commons-net</groupId>
-      <artifactId>commons-net</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-collections4</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>commons-httpclient</groupId>
-      <artifactId>commons-httpclient</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>com.jcraft</groupId>
-      <artifactId>jsch</artifactId>
-      <optional>true</optional>
-    </dependency>
-  </dependencies>
-
-  <properties>
-    <vfs.parent.dir>${basedir}/..</vfs.parent.dir>
-  </properties>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>${vfs.parent.dir}</directory>
-        <targetPath>META-INF</targetPath>
-        <includes>
-          <include>NOTICE.txt</include>
-          <include>LICENSE.txt</include>
-        </includes>
-      </resource>
-    </resources>
-  </build>
-
-</project>
diff --git a/trunk/examples/src/main/java/org/apache/commons/vfs2/example/ChangeLastModificationTime.java b/trunk/examples/src/main/java/org/apache/commons/vfs2/example/ChangeLastModificationTime.java
deleted file mode 100644
index a5ff9d8..0000000
--- a/trunk/examples/src/main/java/org/apache/commons/vfs2/example/ChangeLastModificationTime.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.commons.vfs2.example;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.VFS;
-
-/**
- * Example to change the last modification time of the given file.
- */
-public final class ChangeLastModificationTime
-{
-    private ChangeLastModificationTime()
-    {
-        /* main class not instantiated. */
-    }
-
-    public static void main(final String[] args) throws Exception
-    {
-        if (args.length == 0)
-        {
-            System.err.println("Please pass the name of a file as parameter.");
-            return;
-        }
-
-        final FileObject fo = VFS.getManager().resolveFile(args[0]);
-        final long setTo = System.currentTimeMillis();
-        System.err.println("set to: " + setTo);
-        fo.getContent().setLastModifiedTime(setTo);
-        System.err.println("after set: " + fo.getContent().getLastModifiedTime());
-    }
-
-}
diff --git a/trunk/examples/src/main/java/org/apache/commons/vfs2/example/Shell.java b/trunk/examples/src/main/java/org/apache/commons/vfs2/example/Shell.java
deleted file mode 100644
index 1484cc1..0000000
--- a/trunk/examples/src/main/java/org/apache/commons/vfs2/example/Shell.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.commons.vfs2.example;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.charset.Charset;
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.FileUtil;
-import org.apache.commons.vfs2.Selectors;
-import org.apache.commons.vfs2.VFS;
-import org.apache.commons.vfs2.operations.FileOperationProvider;
-
-/**
- * A simple command-line shell for performing file operations.
- * <p>
- * See
- * <a href="https://wiki.apache.org/commons/VfsExampleShell">Commons VFS Shell Examples</a>
- * in Apache Commons Wiki.
- */
-public final class Shell
-{
-    private final FileSystemManager mgr;
-    private FileObject cwd;
-    private final BufferedReader reader;
-
-    private Shell() throws IOException
-    {
-        mgr = VFS.getManager();
-        cwd = mgr.toFileObject(new File(System.getProperty("user.dir")));
-        reader = new BufferedReader(new InputStreamReader(System.in, Charset.defaultCharset()));
-    }
-
-    public static void main(final String[] args)
-    {
-        try
-        {
-            new Shell().go();
-        }
-        catch (final Exception e)
-        {
-            e.printStackTrace();
-            System.exit(1);
-        }
-        System.exit(0);
-    }
-
-    private void go() throws Exception
-    {
-        System.out.println("VFS Shell " + getVersion(Shell.class));
-        while (true)
-        {
-            final String[] cmd = nextCommand();
-            if (cmd == null)
-            {
-                return;
-            }
-            if (cmd.length == 0)
-            {
-                continue;
-            }
-            final String cmdName = cmd[0];
-            if (cmdName.equalsIgnoreCase("exit") || cmdName.equalsIgnoreCase("quit"))
-            {
-                return;
-            }
-            try
-            {
-                handleCommand(cmd);
-            }
-            catch (final Exception e)
-            {
-                System.err.println("Command failed:");
-                e.printStackTrace(System.err);
-            }
-        }
-    }
-
-    /**
-     * Handles a command.
-     */
-    private void handleCommand(final String[] cmd) throws Exception
-    {
-        final String cmdName = cmd[0];
-        if (cmdName.equalsIgnoreCase("cat"))
-        {
-            cat(cmd);
-        }
-        else if (cmdName.equalsIgnoreCase("cd"))
-        {
-            cd(cmd);
-        }
-        else if (cmdName.equalsIgnoreCase("cp"))
-        {
-            cp(cmd);
-        }
-        else if (cmdName.equalsIgnoreCase("help") || cmdName.equals("?"))
-        {
-            help();
-        }
-        else if (cmdName.equalsIgnoreCase("ls"))
-        {
-            ls(cmd);
-        }
-        else if (cmdName.equalsIgnoreCase("pwd"))
-        {
-            pwd();
-        }
-        else if (cmdName.equalsIgnoreCase("rm"))
-        {
-            rm(cmd);
-        }
-        else if (cmdName.equalsIgnoreCase("touch"))
-        {
-            touch(cmd);
-        }
-        else if (cmdName.equalsIgnoreCase("info"))
-        {
-            info(cmd);
-        }
-        else
-        {
-            System.err.println("Unknown command \"" + cmdName + "\" (Try 'help').");
-        }
-    }
-
-    private void info(String[] cmd) throws Exception
-    {
-        if (cmd.length > 1)
-        {
-            info(cmd[1]);
-        }
-        else
-        {
-            System.out.println("Default manager: \"" + mgr.getClass().getName() + "\" " +
-                                   "version " + getVersion(mgr.getClass()));
-            String[] schemes = mgr.getSchemes();
-            List<String> virtual = new ArrayList<String>();
-            List<String> physical = new ArrayList<String>();
-            for (int i = 0; i < schemes.length; i++)
-            {
-                Collection<Capability> caps = mgr.getProviderCapabilities(schemes[i]);
-                if (caps != null)
-                {
-                    if (caps.contains(Capability.VIRTUAL)  ||
-                            caps.contains(Capability.COMPRESS) ||
-                            caps.contains(Capability.DISPATCHER))
-                    {
-                        virtual.add(schemes[i]);
-                    }
-                    else
-                    {
-                        physical.add(schemes[i]);
-                    }
-                }
-            }
-            if (!physical.isEmpty())
-            {
-                System.out.println("  Provider Schemes: " + physical);
-            }
-            if (!virtual.isEmpty())
-            {
-                System.out.println("   Virtual Schemes: " + virtual);
-            }
-         }
-    }
-
-    private void info(String scheme) throws Exception
-    {
-         System.out.println("Provider Info for scheme \"" + scheme + "\":");
-         Collection<Capability> caps;
-         caps = mgr.getProviderCapabilities(scheme);
-         if (caps != null && !caps.isEmpty())
-         {
-             System.out.println("  capabilities: " + caps);
-         }
-         FileOperationProvider[] ops = mgr.getOperationProviders(scheme);
-         if (ops != null && ops.length > 0)
-         {
-             System.out.println("  operations: " + ops);
-         }
-    }
-
-    /**
-     * Does a 'help' command.
-     */
-    private void help()
-    {
-        System.out.println("Commands:");
-        System.out.println("cat <file>         Displays the contents of a file.");
-        System.out.println("cd [folder]        Changes current folder.");
-        System.out.println("cp <src> <dest>    Copies a file or folder.");
-        System.out.println("help               Shows this message.");
-        System.out.println("info [scheme]      Displays information about providers.");
-        System.out.println("ls [-R] [path]     Lists contents of a file or folder.");
-        System.out.println("pwd                Displays current folder.");
-        System.out.println("rm <path>          Deletes a file or folder.");
-        System.out.println("touch <path>       Sets the last-modified time of a file.");
-        System.out.println("exit, quit         Exits this program.");
-    }
-
-    /**
-     * Does an 'rm' command.
-     */
-    private void rm(final String[] cmd) throws Exception
-    {
-        if (cmd.length < 2)
-        {
-            throw new Exception("USAGE: rm <path>");
-        }
-
-        final FileObject file = mgr.resolveFile(cwd, cmd[1]);
-        file.delete(Selectors.SELECT_SELF);
-    }
-
-    /**
-     * Does a 'cp' command.
-     */
-    private void cp(final String[] cmd) throws Exception
-    {
-        if (cmd.length < 3)
-        {
-            throw new Exception("USAGE: cp <src> <dest>");
-        }
-
-        final FileObject src = mgr.resolveFile(cwd, cmd[1]);
-        FileObject dest = mgr.resolveFile(cwd, cmd[2]);
-        if (dest.exists() && dest.getType() == FileType.FOLDER)
-        {
-            dest = dest.resolveFile(src.getName().getBaseName());
-        }
-
-        dest.copyFrom(src, Selectors.SELECT_ALL);
-    }
-
-    /**
-     * Does a 'cat' command.
-     */
-    private void cat(final String[] cmd) throws Exception
-    {
-        if (cmd.length < 2)
-        {
-            throw new Exception("USAGE: cat <path>");
-        }
-
-        // Locate the file
-        final FileObject file = mgr.resolveFile(cwd, cmd[1]);
-
-        // Dump the contents to System.out
-        FileUtil.writeContent(file, System.out);
-        System.out.println();
-    }
-
-    /**
-     * Does a 'pwd' command.
-     */
-    private void pwd()
-    {
-        System.out.println("Current folder is " + cwd.getName());
-    }
-
-    /**
-     * Does a 'cd' command.
-     * If the taget directory does not exist, a message is printed to <code>System.err</code>.
-     */
-    private void cd(final String[] cmd) throws Exception
-    {
-        final String path;
-        if (cmd.length > 1)
-        {
-            path = cmd[1];
-        }
-        else
-        {
-            path = System.getProperty("user.home");
-        }
-
-        // Locate and validate the folder
-        final FileObject tmp = mgr.resolveFile(cwd, path);
-        if (tmp.exists())
-        {
-            cwd = tmp;
-        }
-        else
-        {
-            System.out.println("Folder does not exist: " + tmp.getName());
-        }
-        System.out.println("Current folder is " + cwd.getName());
-    }
-
-    /**
-     * Does an 'ls' command.
-     */
-    private void ls(final String[] cmd) throws FileSystemException
-    {
-        int pos = 1;
-        final boolean recursive;
-        if (cmd.length > pos && cmd[pos].equals("-R"))
-        {
-            recursive = true;
-            pos++;
-        }
-        else
-        {
-            recursive = false;
-        }
-
-        final FileObject file;
-        if (cmd.length > pos)
-        {
-            file = mgr.resolveFile(cwd, cmd[pos]);
-        }
-        else
-        {
-            file = cwd;
-        }
-
-        if (file.getType() == FileType.FOLDER)
-        {
-            // List the contents
-            System.out.println("Contents of " + file.getName());
-            listChildren(file, recursive, "");
-        }
-        else
-        {
-            // Stat the file
-            System.out.println(file.getName());
-            final FileContent content = file.getContent();
-            System.out.println("Size: " + content.getSize() + " bytes.");
-            final DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
-            final String lastMod = dateFormat.format(new Date(content.getLastModifiedTime()));
-            System.out.println("Last modified: " + lastMod);
-        }
-    }
-
-    /**
-     * Does a 'touch' command.
-     */
-    private void touch(final String[] cmd) throws Exception
-    {
-        if (cmd.length < 2)
-        {
-            throw new Exception("USAGE: touch <path>");
-        }
-        final FileObject file = mgr.resolveFile(cwd, cmd[1]);
-        if (!file.exists())
-        {
-            file.createFile();
-        }
-        file.getContent().setLastModifiedTime(System.currentTimeMillis());
-    }
-
-    /**
-     * Lists the children of a folder.
-     */
-    private void listChildren(final FileObject dir,
-                              final boolean recursive,
-                              final String prefix)
-        throws FileSystemException
-    {
-        final FileObject[] children = dir.getChildren();
-        for (final FileObject child : children)
-        {
-            System.out.print(prefix);
-            System.out.print(child.getName().getBaseName());
-            if (child.getType() == FileType.FOLDER)
-            {
-                System.out.println("/");
-                if (recursive)
-                {
-                    listChildren(child, recursive, prefix + "    ");
-                }
-            }
-            else
-            {
-                System.out.println();
-            }
-        }
-    }
-
-    /**
-     * Returns the next command, split into tokens.
-     */
-    private String[] nextCommand() throws IOException
-    {
-        System.out.print("> ");
-        final String line = reader.readLine();
-        if (line == null)
-        {
-            return null;
-        }
-        final ArrayList<String> cmd = new ArrayList<String>();
-        final StringTokenizer tokens = new StringTokenizer(line);
-        while (tokens.hasMoreTokens())
-        {
-            cmd.add(tokens.nextToken());
-        }
-        return cmd.toArray(new String[cmd.size()]);
-    }
-
-    private static String getVersion(Class<?> cls)
-    {
-        try
-        {
-            return cls.getPackage().getImplementationVersion();
-        }
-        catch (Exception ignored)
-        {
-            return "N/A";
-        }
-    }
-}
diff --git a/trunk/examples/src/main/java/org/apache/commons/vfs2/example/ShowProperties.java b/trunk/examples/src/main/java/org/apache/commons/vfs2/example/ShowProperties.java
deleted file mode 100644
index db095c8..0000000
--- a/trunk/examples/src/main/java/org/apache/commons/vfs2/example/ShowProperties.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.commons.vfs2.example;
-
-import java.text.DateFormat;
-import java.util.Date;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.VFS;
-
-/**
- * Example which prints all properties of the file passed as first parameter.
- */
-public final class ShowProperties
-{
-    /** Maximum number of children to show. */
-    private static final int SHOW_MAX = 5;
-
-    private ShowProperties()
-    {
-        /* main class not instantiated. */
-    }
-
-    public static void main(final String[] args)
-    {
-        if (args.length == 0)
-        {
-            System.err.println("Please pass the name of a file as parameter.");
-            System.err.println("e.g. java org.apache.commons.vfs2.example.ShowProperties LICENSE.txt");
-            return;
-        }
-        for (final String arg : args)
-        {
-            try
-            {
-                final FileSystemManager mgr = VFS.getManager();
-                System.out.println();
-                System.out.println("Parsing: " + arg);
-                final FileObject file = mgr.resolveFile(arg);
-                System.out.println("URL: " + file.getURL());
-                System.out.println("getName(): " + file.getName());
-                System.out.println("BaseName: " + file.getName().getBaseName());
-                System.out.println("Extension: " + file.getName().getExtension());
-                System.out.println("Path: " + file.getName().getPath());
-                System.out.println("Scheme: " + file.getName().getScheme());
-                System.out.println("URI: " + file.getName().getURI());
-                System.out.println("Root URI: " + file.getName().getRootURI());
-                System.out.println("Parent: " + file.getName().getParent());
-                System.out.println("Type: " + file.getType());
-                System.out.println("Exists: " + file.exists());
-                System.out.println("Readable: " + file.isReadable());
-                System.out.println("Writeable: " + file.isWriteable());
-                System.out.println("Root path: " + file.getFileSystem().getRoot().getName().getPath());
-                if (file.exists())
-                {
-                    if (file.getType().equals(FileType.FILE))
-                    {
-                        System.out.println("Size: " + file.getContent().getSize() + " bytes");
-                    }
-                    else if (file.getType().equals(FileType.FOLDER) && file.isReadable())
-                    {
-                        final FileObject[] children = file.getChildren();
-                        System.out.println("Directory with " + children.length + " files");
-                        for (int iterChildren = 0; iterChildren < children.length; iterChildren++)
-                        {
-                            System.out.println("#" + iterChildren + ": " + children[iterChildren].getName());
-                            if (iterChildren > SHOW_MAX)
-                            {
-                                break;
-                            }
-                        }
-                    }
-                    System.out.println("Last modified: " + DateFormat.getInstance().format(
-                            new Date(file.getContent().getLastModifiedTime())));
-                }
-                else
-                {
-                    System.out.println("The file does not exist");
-                }
-                file.close();
-            }
-            catch (final FileSystemException ex)
-            {
-                ex.printStackTrace();
-            }
-        }
-    }
-
-}
-
diff --git a/trunk/examples/src/main/java/org/apache/commons/vfs2/example/package.html b/trunk/examples/src/main/java/org/apache/commons/vfs2/example/package.html
deleted file mode 100644
index 53385a2..0000000
--- a/trunk/examples/src/main/java/org/apache/commons/vfs2/example/package.html
+++ /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.
--->
-<body>
-<p>Apache Commons VFS Examples classes.</p>
-</body>
diff --git a/trunk/examples/src/main/java/org/apache/commons/vfs2/libcheck/FtpCheck.java b/trunk/examples/src/main/java/org/apache/commons/vfs2/libcheck/FtpCheck.java
deleted file mode 100644
index 542ae4f..0000000
--- a/trunk/examples/src/main/java/org/apache/commons/vfs2/libcheck/FtpCheck.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.commons.vfs2.libcheck;
-
-import java.io.OutputStream;
-import java.nio.charset.Charset;
-
-import org.apache.commons.net.ftp.FTPClient;
-import org.apache.commons.net.ftp.FTPFile;
-import org.apache.commons.net.ftp.FTPReply;
-
-/**
- * Basic check for FTP.
- */
-public final class FtpCheck
-{
-    private FtpCheck()
-    {
-        /* main class not instantiated. */
-    }
-
-    public static void main(final String[] args) throws Exception
-    {
-        if (args.length < 3)
-        {
-            throw new IllegalArgumentException("Usage: FtpCheck user pass host dir");
-        }
-        final String user = args[0];
-        final String pass = args[1];
-        final String host = args[2];
-        String dir = null;
-        if (args.length == 4)
-        {
-            dir = args[3];
-        }
-
-        final FTPClient client = new FTPClient();
-        client.connect(host);
-        final int reply = client.getReplyCode();
-        if (!FTPReply.isPositiveCompletion(reply))
-        {
-            throw new IllegalArgumentException("cant connect: " + reply);
-        }
-        if (!client.login(user, pass))
-        {
-            throw new IllegalArgumentException("login failed");
-        }
-        client.enterLocalPassiveMode();
-
-        final OutputStream os = client.storeFileStream(dir + "/test.txt");
-        if (os == null)
-        {
-            throw new IllegalStateException(client.getReplyString());
-        }
-        os.write("test".getBytes(Charset.defaultCharset()));
-        os.close();
-        client.completePendingCommand();
-
-        if (dir != null && !client.changeWorkingDirectory(dir))
-        {
-            throw new IllegalArgumentException("change dir to '" + dir + "' failed");
-        }
-
-        System.err.println("System: " + client.getSystemType());
-
-        final FTPFile[] files = client.listFiles();
-        for (int i = 0; i < files.length; i++)
-        {
-            final FTPFile file = files[i];
-            if (file == null)
-            {
-                System.err.println("#" + i + ": " + null);
-            }
-            else
-            {
-                System.err.println("#" + i + ": " + file.getRawListing());
-                System.err.println("#" + i + ": " + file.toString());
-                System.err.println("\t name:" + file.getName() + " type:" + file.getType());
-            }
-        }
-        client.disconnect();
-    }
-}
diff --git a/trunk/examples/src/main/java/org/apache/commons/vfs2/libcheck/SftpCheck.java b/trunk/examples/src/main/java/org/apache/commons/vfs2/libcheck/SftpCheck.java
deleted file mode 100644
index 7990a1b..0000000
--- a/trunk/examples/src/main/java/org/apache/commons/vfs2/libcheck/SftpCheck.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.commons.vfs2.libcheck;
-
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.Vector;
-
-import com.jcraft.jsch.ChannelSftp;
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.Session;
-import com.jcraft.jsch.UserInfo;
-
-/**
- * Basic check for SFTP.
- */
-public final class SftpCheck
-{
-    private SftpCheck()
-    {
-        /* main class not instantiated. */
-    }
-
-    public static void main(final String[] args) throws Exception
-    {
-        if (args.length != 4)
-        {
-            throw new IllegalArgumentException("Usage: SftpCheck user pass host dir");
-        }
-        final String user = args[0];
-        final String pass = args[1];
-        final String host = args[2];
-        final String dir = args[3];
-
-        final Properties props = new Properties();
-        props.setProperty("StrictHostKeyChecking", "false");
-        final JSch jsch = new JSch();
-        final Session session = jsch.getSession(user, host, 22);
-        session.setUserInfo(new UserInfo()
-        {
-            @Override
-            public String getPassphrase()
-            {
-                return null;
-            }
-
-            @Override
-            public String getPassword()
-            {
-                return null;
-            }
-
-            @Override
-            public boolean promptPassword(final String string)
-            {
-                return false;
-            }
-
-            @Override
-            public boolean promptPassphrase(final String string)
-            {
-                return false;
-            }
-
-            @Override
-            public boolean promptYesNo(final String string)
-            {
-                return true;
-            }
-
-            @Override
-            public void showMessage(final String string)
-            {
-            }
-        });
-        session.setPassword(pass);
-        session.connect();
-        final ChannelSftp chan = (ChannelSftp) session.openChannel("sftp");
-        chan.connect();
-        final Vector<?> list = chan.ls(dir);
-        final Iterator<?> iterList = list.iterator();
-        while (iterList.hasNext())
-        {
-            System.err.println(iterList.next());
-        }
-        System.err.println("done");
-        chan.disconnect();
-        session.disconnect();
-    }
-}
diff --git a/trunk/examples/src/main/java/org/apache/commons/vfs2/libcheck/package.html b/trunk/examples/src/main/java/org/apache/commons/vfs2/libcheck/package.html
deleted file mode 100644
index 553d5d2..0000000
--- a/trunk/examples/src/main/java/org/apache/commons/vfs2/libcheck/package.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--

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

-    contributor license agreements.  See the NOTICE file distributed with

-    this work for additional information regarding copyright ownership.

-    The ASF licenses this file to You under the Apache License, Version 2.0

-    (the "License"); you may not use this file except in compliance with

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

-

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

-

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

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

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

-    See the License for the specific language governing permissions and

-    limitations under the License.

--->

-<body>

-<p>Sample clients for commons-net.ftp and JSch libraries.</p>

-<p>The classes do not use the VFS library, but can be used to test the underlying

-libraries, if they can connect to a specified servicde.</p>

-</body>

diff --git a/trunk/examples/src/site/site.xml b/trunk/examples/src/site/site.xml
deleted file mode 100644
index 1da9b61..0000000
--- a/trunk/examples/src/site/site.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT 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="Commons&#xA0;VFS">
-
-  <bannerRight>
-    <name>Commons&#xA0;VFS</name>
-    <src>../images/vfs-logo-white.png</src>
-    <href>../index.html</href>
-  </bannerRight>
-
-  <body>
-    <links>
-      <item name="Commons VFS Home" href="../index.html"/>
-    </links>
-
-    <!-- menues are inherited -->
-
-    <menu ref="reports"/>
-
-	</body>
-</project>
diff --git a/trunk/examples/src/site/xdoc/index.xml b/trunk/examples/src/site/xdoc/index.xml
deleted file mode 100644
index 144a63e..0000000
--- a/trunk/examples/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,104 +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.

--->

-

-<document>

-    <properties>

-        <title>Apache Commons VFS Examples</title>

-        <author email="dev@commons.apache.org">Apache Commons Developers</author>

-    </properties>

-

-    <body>

-

-    <section name="About Apache Commons VFS Examples">

-            <p>

-                This example module contains sample 

-                <a href="xref/index.html">source code</a> for learning how to use Apache

-                Commons VFS in the <code>org.apache.commons.vfs2.example</code> package.

-            </p>

-            <p>

-                The <code>org.apache.commons.vfs2.libcheck</code> package contains some Java

-                classes to exercise some of the functionality of the libraries (dependencies)

-                used by Apache Commons VFS. This is mainly for the maintainers of VFS providers.

-            </p>

-        </section>

-

-        <section name="Commons VFS Shell Example">

-

-            <p>

-                The Commons VFS Shell is an example for a command line shell.

-                It can be used to play with different providers and to verify

-                an installation.

-            </p>

-

-            <p>

-                Check out the page <a href="https://wiki.apache.org/commons/VfsExampleShell">VfsExampleShell</a>

-                on the Apache Commons Wiki for a number of examples. In particular you can use the <code>info</code>

-                command to list the schemes which are auto discovered by the <code>StandardFileSystemManager</code>.

-            </p>

-

-            <p>

-                The following examples assume an environment variable REP which points to a populated local Maven

-                repository. As an alternative you can <a href="../download.html">download</a> the required

-                <a href="../commons-vfs2/dependencies.html">dependencies</a> manually. (The commons-collection4

-                dependency is not needed for the VFS Shell as it does not use <code>LRUFilesCache</code>.) Because

-                of licensing restrictions the sandbox component must be

-                <a href="../commons-vfs2-sandbox/index.html">built locally</a> and then installed into the repository.

-            </p>

-

-            <subsection name="Starting VFS Shell on Linux/Unix">

-                <source><![CDATA[

-REP=~/.m2/repository

-LIB=$REP/commons-logging/commons-logging/1.2/commons-logging-1.2.jar

-LIB=$LIB:$REP/commons-net/commons-net/2.2/commons-net-2.2.jar

-# LIB=$LIB:$REP/org/apache/commons/commons-collections4/4.0/commons-collection-4.0.jar

-LIB=$LIB:$REP/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar:$REP/commons-codec/commons-codec/1.2/commons-codec-1.2.jar

-LIB=$LIB:$REP/com/jcraft/jsch/0.1.51/jsch-0.1.51.jar

-# next 3 lines are for webdav

-LIB=$LIB:$REP/org/apache/jackrabbit/jackrabbit-webdav/1.6.5/jackrabbit-webdav-1.6.5.jar

-LIB=$LIB:$REP/org/slf4j/slf4j-api/1.5.11/slf4j-api-1.5.11.jar:$REP/org/slf4j/slf4j-simple/1.5.3/slf4j-simple-1.5.3.jar

-LIB=$LIB:$REP/org/apache/jackrabbit/jackrabbit-jcr-commons/1.6.5/jackrabbit-jcr-commons-1.6.5.jar

-# LIB=$LIB:$REP/org/apache/commons/commons-vfs2-sandbox/2.1/commons-vfs2-sandbox-2.1.jar:$REP/jcifs/jcifs/0.8.3/jcifs-0.8.3.jar

-LIB=$LIB:$REP/org/apache/commons/commons-vfs2-examples/2.1/commons-vfs2-examples-2.1.jar

-LIB=$LIB:$REP/org/apache/commons/commons-vfs2/2.1/commons-vfs2-2.1.jar

-java -cp $LIB org.apache.commons.vfs2.example.Shell

-]]></source>

-            </subsection>

-

-            <subsection name="Starting VFS Shell on Windows">

-                <source><![CDATA[

-set REP=%USERPROFILE%\.m2\repository

-set LIB=%REP%\commons-logging\commons-logging\1.2\commons-logging-1.2.jar

-set LIB=%LIB%;%REP%\commons-net\commons-net\2.2\commons-net-2.2.jar

-REM # set LIB=%LIB%;%REP%\org\apache\commons\commons-collections4\4.0\commons-collection-4.0.jar

-set LIB=%LIB%;%REP%\commons-httpclient\commons-httpclient\3.1\commons-httpclient-3.1.jar;%REP%\commons-codec\commons-codec\1.2\commons-codec-1.2.jar

-set LIB=%LIB%;%REP%\com\jcraft\jsch\0.1.51\jsch-0.1.51.jar

-REM # next 3 lines are for webdav

-set LIB=%LIB%;%REP%\org\apache\jackrabbit\jackrabbit-webdav\1.6.5\jackrabbit-webdav-1.6.5.jar

-set LIB=%LIB%;%REP%\org\slf4j\slf4j-api\1.5.11\slf4j-api-1.5.11.jar;%REP%\org\slf4j\slf4j-simple\1.5.3\slf4j-simple-1.5.3.jar

-set LIB=%LIB%;%REP%\org\apache\jackrabbit\jackrabbit-jcr-commons\1.6.5\jackrabbit-jcr-commons-1.6.5.jar

-REM # set LIB=%LIB%;%REP%\org\apache\commons\commons-vfs2-sandbox\2.1\commons-vfs2-sandbox-2.1.jar;%REP%\jcifs\jcifs\0.8.3\jcifs-0.8.3.jar

-set LIB=%LIB%;%REP%\org\apache\commons\commons-vfs2-examples\2.1\commons-vfs2-examples-2.1.jar

-set LIB=%LIB%;%REP%\org\apache\commons\commons-vfs2\2.1\commons-vfs2-2.1.jar

-java -cp %LIB% org.apache.commons.vfs2.example.Shell

-]]></source>

-            </subsection>

-        </section>

-

-    </body>

-</document>

-

diff --git a/trunk/findbugs-exclude-filter.xml b/trunk/findbugs-exclude-filter.xml
deleted file mode 100644
index 873d353..0000000
--- a/trunk/findbugs-exclude-filter.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-
-<!-- ===================================================================== -->
-<!-- $Id$ -->
-<!-- ===================================================================== -->
-<FindBugsFilter>
-  <!-- Enable only high priority warnings -->
-  <Match>
-    <Priority value="2"/>
-  </Match>
-
-  <Match>
-    <Priority value="3"/>
-  </Match>
-</FindBugsFilter>
diff --git a/trunk/pom.xml b/trunk/pom.xml
deleted file mode 100644
index d764705..0000000
--- a/trunk/pom.xml
+++ /dev/null
@@ -1,566 +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>
-    <groupId>org.apache.commons</groupId>
-    <artifactId>commons-parent</artifactId>
-    <version>40</version>
-  </parent>
-
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.commons</groupId>
-  <artifactId>commons-vfs2-project</artifactId>
-  <name>Apache Commons VFS</name>
-  <description>Apache Commons VFS is a Virtual File System library.</description>
-  <packaging>pom</packaging>
-  <version>2.1</version>
-
-  <url>http://commons.apache.org/proper/commons-vfs/</url>
-  <inceptionYear>2002</inceptionYear>
-
-  <modules>
-    <module>core</module>
-    <module>examples</module>
-    <module>dist</module>
-  </modules>
-
-  <issueManagement>
-    <system>jira</system>
-    <url>https://issues.apache.org/jira/browse/VFS</url>
-  </issueManagement>
-
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/commons/proper/vfs/tags/commons-vfs2-project-2.1</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/commons/proper/vfs/tags/commons-vfs2-project-2.1</developerConnection>
-    <url>http://svn.apache.org/viewvc/commons/proper/vfs/tags/commons-vfs2-project-2.1</url>
-  </scm>
-
-  <developers>
-    <developer>
-      <name>Adam Murdoch</name>
-      <id>adammurdoch</id>
-      <email>adammurdoch -at- apache.org</email>
-      <organization />
-    </developer>
-    <developer>
-      <name>James Strachan</name>
-      <id>jstrachan</id>
-      <email>jstrachan -at- apache.org</email>
-      <organization>SpiritSoft, Inc.</organization>
-    </developer>
-    <developer>
-      <name>Mario Ivankovits</name>
-      <id>imario</id>
-      <email>imario -at- apache.org</email>
-      <organization>OPS EDV Gmbh</organization>
-    </developer>
-    <developer>
-      <name>Rahul Akolkar</name>
-      <id>rahul</id>
-      <email>rahul -at- apache.org</email>
-      <organization>The Apache Software Foundation</organization>
-    </developer>
-    <developer>
-      <name>James Carman</name>
-      <id>jcarman</id>
-      <email>jcarman -at- apache.org</email>
-      <organization>The Apache Software Foundation</organization>
-    </developer>
-    <developer>
-      <name>Ralph Goers</name>
-      <id>rgoers</id>
-      <email>rgoers -at- apache.org</email>
-      <organization>Intuit</organization>
-    </developer>
-    <developer>
-      <name>Joerg Schaible</name>
-      <id>joehni</id>
-      <email>joehni -at- apache.org</email>
-    </developer>
-    <developer>
-      <name>Gary D. Gregory</name>
-      <id>ggregory</id>
-      <email>ggregory -at- apache.org</email>
-      <url>http://www.garygregory.com</url>
-      <timezone>-5</timezone>
-    </developer>
-    <developer>
-      <name>Bernd Eckenfels</name>
-      <id>ecki</id>
-      <email>ecki -at- apache.org</email>
-      <url>http://bernd.eckenfels.net</url>
-      <timezone>+1</timezone>
-    </developer>
-  </developers>
-
-  <contributors>
-    <contributor>
-      <name>Rami Ojares</name>
-      <email>rami.ojares -at- elisa.fi</email>
-    </contributor>
-    <contributor>
-      <name>Anthony Goubard</name>
-      <email>adagoubard -at- chello.nl</email>
-    </contributor>
-    <contributor>
-      <name>Christopher Ottley</name>
-      <email>xknight -at- users.sourceforge.net</email>
-    </contributor>
-    <contributor>
-      <name>Dave Marion</name>
-      <email>dlmarion -at- apache.org</email>
-    </contributor>
-    <contributor>
-      <name>Scott Bjerstedt</name>
-      <email>jcottbjer -at- gmail.com</email>
-    </contributor>
-    <contributor>
-      <name>Jose Juan Montiel</name>
-      <email>josejuan.montiel -at- gmail.com</email>
-    </contributor>
-  </contributors>
-
-  <properties>
-    <commons.encoding>UTF-8</commons.encoding>
-
-    <maven.compiler.source>1.6</maven.compiler.source>
-    <maven.compiler.target>1.6</maven.compiler.target>
-
-    <!-- bare ID without major version or commons- prefix -->
-    <commons.componentid>vfs</commons.componentid>
-    <commons.binary.suffix />
-    <commons.jira.id>VFS</commons.jira.id>
-    <commons.jira.pid>12310495</commons.jira.pid>
-    <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-vfs</commons.scmPubUrl>
-
-    <commons.release.version>2.1</commons.release.version>
-    <!--<commons.rc.version>RC1</commons.rc.version> -->
-    <commons.release.name>commons-vfs-${commons.release.version}</commons.release.name>
-    <commons.release.desc>(requires Java 1.6+)</commons.release.desc>
-
-    <commons.release.2.version>2.0</commons.release.2.version>
-    <commons.release.2.name>commons-vfs-2.0</commons.release.2.name>
-    <commons.release.2.desc>(requires Java 1.5+)</commons.release.2.desc>
-    <commons.release.2.binary.suffix />
-
-    <vfs.parent.dir>${basedir}</vfs.parent.dir>
-    <version.checkstyle>2.13</version.checkstyle>
-    <!-- make sure bundle plugin has dependency informations for 'optional' -->
-    <commons.osgi.excludeDependencies />
-  </properties>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>${basedir}/osgi</directory>
-        <targetPath>osgi</targetPath>
-        <includes>
-          <include>MANIFEST.MF</include>
-        </includes>
-      </resource>
-    </resources>
-
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>vfs-jar-manifest</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <mkdir dir="${project.build.directory}/osgi" />
-                <touch file="${project.build.directory}/osgi/MANIFEST.MF" />
-              </target>
-            </configuration>
-          </execution>
-          <execution>
-            <id>javadoc.resources</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <copy todir="${project.build.directory}/apidocs/META-INF">
-                  <fileset dir="${vfs.parent.dir}">
-                    <include name="LICENSE.txt" />
-                    <include name="NOTICE.txt" />
-                  </fileset>
-                </copy>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <version>${version.checkstyle}</version>
-        <!-- Keep build/reporting in sync -->
-        <configuration>
-          <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> -->
-          <configLocation>${vfs.parent.dir}/checkstyle.xml</configLocation>
-          <suppressionsLocation>${vfs.parent.dir}/checkstyle-suppressions.xml</suppressionsLocation>
-          <enableRulesSummary>false</enableRulesSummary>
-          <propertyExpansion>basedir=${basedir}</propertyExpansion>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>${commons.rat.version}</version>
-        <!-- Should agree with config in reporting section -->
-        <configuration>
-          <excludes combine.children="append">
-            <!--  trivial test data text files -->
-            <exclude>src/test/resources/test-data/**/*.txt</exclude>
-            <exclude>src/test/resources/test-data/test.mf</exclude>
-            <!--  implicite exclude does not work if sandbox profile is not activated -->
-            <exclude>sandbox/**</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-  <reporting>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>${commons.rat.version}</version>
-        <!-- Should agree with config in build section -->
-        <configuration>
-          <excludes combine.children="append">
-            <!--  trivial test data text files -->
-            <exclude>src/test/resources/test-data/**/*.txt</exclude>
-            <exclude>src/test/resources/test-data/test.mf</exclude>
-            <!--  implicit exclude does not work if sandbox profile is not activated -->
-            <exclude>sandbox/**</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <version>${version.checkstyle}</version>
-        <!-- Keep build/reporting in sync -->
-        <configuration>
-          <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> -->
-          <configLocation>${vfs.parent.dir}/checkstyle.xml</configLocation>
-          <suppressionsLocation>${vfs.parent.dir}/checkstyle-suppressions.xml</suppressionsLocation>
-          <enableRulesSummary>false</enableRulesSummary>
-          <propertyExpansion>basedir=${basedir}</propertyExpansion>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <version>${commons.javadoc.version}</version>
-        <configuration>
-          <tags>
-            <tag>
-              <name>todo</name>
-              <!-- todo tag for all places -->
-              <placement>a</placement>
-              <head>To Do:</head>
-            </tag>
-          </tags>
-          <aggregate>true</aggregate>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>findbugs-maven-plugin</artifactId>
-        <!-- commons-parent defines version 2.5.x or 3.x depending on JDK active. -->
-        <version>${commons.findbugs.version}</version>
-        <configuration>
-          <threshold>Normal</threshold>
-          <effort>Default</effort>
-          <excludeFilterFile>${vfs.parent.dir}/findbugs-exclude-filter.xml</excludeFilterFile>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-pmd-plugin</artifactId>
-        <version>3.3</version>
-        <configuration>
-          <targetJdk>${maven.compiler.target}</targetJdk>
-          <aggregate>true</aggregate>
-        </configuration>
-      </plugin>
-      <!-- cobertura breaks because it cannot parse annotations in methods. -->
-      <!--
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>cobertura-maven-plugin</artifactId>
-        <version>${commons.cobertura.version}</version>
-      </plugin>
-      -->
-      <!-- javancss breaks because it cannot parse annotations in methods. -->
-      <!--
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>javancss-maven-plugin</artifactId>
-        <version>2.0</version>
-      </plugin>
-      -->
-    </plugins>
-  </reporting>
-
-  <dependencyManagement>
-    <dependencies>
-      <!-- artifacts of project, versions managed by release-plugin -->
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-vfs2</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-vfs2</artifactId>
-        <version>${project.version}</version>
-        <type>test-jar</type>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-vfs2-sandbox</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-vfs2-examples</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-
-      <!-- 3rd party dependencies -->
-      <dependency>
-        <groupId>commons-logging</groupId>
-        <artifactId>commons-logging</artifactId>
-        <version>1.2</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-net</groupId>
-        <artifactId>commons-net</artifactId>
-        <version>3.4</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-collections4</artifactId>
-        <version>4.1</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-httpclient</groupId>
-        <artifactId>commons-httpclient</artifactId>
-        <version>3.1</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-compress</artifactId>
-        <version>1.10</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.jackrabbit</groupId>
-        <artifactId>jackrabbit-webdav</artifactId>
-        <version>1.6.5</version>
-      </dependency>
-      <dependency>
-        <groupId>ant</groupId>
-        <artifactId>ant</artifactId>
-        <version>1.6.5</version>
-      </dependency>
-      <dependency>
-        <groupId>com.jcraft</groupId>
-        <artifactId>jsch</artifactId>
-        <version>0.1.53</version>
-      </dependency>
-      <dependency>
-        <groupId>jcifs</groupId>
-        <artifactId>jcifs</artifactId>
-        <version>0.8.3</version>
-      </dependency>
-      <dependency>
-        <groupId>javax.mail</groupId>
-        <artifactId>mail</artifactId>
-        <version>1.4.7</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.hadoop</groupId>
-        <artifactId>hadoop-common</artifactId>
-        <version>2.6.0</version>
-        <exclusions>
-          <exclusion>
-            <groupId>*</groupId>
-            <artifactId>*</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.hadoop</groupId>
-        <artifactId>hadoop-hdfs</artifactId>
-        <version>2.6.0</version>
-        <exclusions>
-          <exclusion>
-            <groupId>*</groupId>
-            <artifactId>*</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-
-      <!-- Testing -->
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>4.12</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.commons</groupId>
-        <artifactId>commons-lang3</artifactId>
-        <version>3.4</version>
-      </dependency>
-      <!-- Test FTP with Apache FTP Server (MINA) -->
-      <dependency>
-        <groupId>org.apache.ftpserver</groupId>
-        <artifactId>ftpserver-core</artifactId>
-        <version>1.0.6</version>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
-        <version>1.5.11</version>
-      </dependency>
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>jcl-over-slf4j</artifactId>
-        <version>1.5.11</version>
-      </dependency>
-      <!-- Test SFTP with Apache SSHd Server (MINA) -->
-      <dependency>
-        <groupId>org.apache.sshd</groupId>
-        <artifactId>sshd-core</artifactId>
-        <version>0.8.0</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.mina</groupId>
-        <artifactId>mina-core</artifactId>
-        <version>2.0.7</version>
-      </dependency>
-      <dependency>
-        <groupId>org.bouncycastle</groupId>
-        <artifactId>bcprov-jdk16</artifactId>
-        <version>1.46</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-io</groupId>
-        <artifactId>commons-io</artifactId>
-        <version>2.5</version>
-      </dependency>
-      <!-- Test HTTP with Apache HttpComponent Core -->
-      <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpcore-nio</artifactId>
-        <version>4.3.2</version>
-      </dependency>
-      <!-- Test WebDAV with Apache Jackrabbit -->
-      <dependency>
-        <groupId>org.apache.jackrabbit</groupId>
-        <artifactId>jackrabbit-standalone</artifactId>
-        <version>1.6.5</version>
-        <exclusions>
-          <exclusion>
-            <!-- provides everything inlined. -->
-            <groupId>*</groupId>
-            <artifactId>*</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <!-- HDFS test dependencies -->
-      <dependency>
-        <groupId>org.apache.hadoop</groupId>
-        <artifactId>hadoop-common</artifactId>
-        <version>2.6.0</version>
-        <type>test-jar</type>
-        <exclusions>
-          <exclusion>
-            <!-- jackrabbit-standalone provides one, too -->
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.hadoop</groupId>
-        <artifactId>hadoop-hdfs</artifactId>
-        <version>2.6.0</version>
-        <type>test-jar</type>
-      </dependency>
-      <dependency>
-        <groupId>javax.ws.rs</groupId>
-        <artifactId>jsr311-api</artifactId>
-        <version>1.1.1</version>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
-  <distributionManagement>
-    <site>
-      <id>commons.site</id>
-      <name>Apache Commons Site</name>
-      <url>scm:svn:${commons.scmPubUrl}</url>
-    </site>
-  </distributionManagement>
-
-  <!-- Releasing VFS as a multi-module build with binary artifacts is somewhat painful. This profile hooks into the commons-parent
-    and the apache-pom to get the build done and then uses the assembly to package it up. -->
-  <profiles>
-    <profile>
-      <id>include-sandbox</id>
-      <modules>
-        <module>sandbox</module>
-      </modules>
-    </profile>
-    <profile>
-      <id>release</id>
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <executions>
-              <!-- Don't build the archives here. They are constructed in the dist project -->
-              <execution>
-                <configuration>
-                  <skipAssembly>true</skipAssembly>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-  </profiles>
-
-</project>
diff --git a/trunk/sandbox/pom.xml b/trunk/sandbox/pom.xml
deleted file mode 100644
index c988f7e..0000000
--- a/trunk/sandbox/pom.xml
+++ /dev/null
@@ -1,159 +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>
-
-  <name>Apache Commons VFS Sandbox</name>
-  <groupId>org.apache.commons</groupId>
-  <artifactId>commons-vfs2-sandbox</artifactId>
-  <version>2.1-SNAPSHOT</version>
-  <description>Apache Commons VFS is a Virtual File System library - Sandbox.</description>
-
-  <parent>
-    <groupId>org.apache.commons</groupId>
-    <artifactId>commons-vfs2-project</artifactId>
-    <version>2.1-SNAPSHOT</version>
-    <relativePath>../</relativePath>
-  </parent>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-vfs2</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>jcifs</groupId>
-      <artifactId>jcifs</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>commons-httpclient</groupId>
-      <artifactId>commons-httpclient</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>javax.mail</groupId>
-      <artifactId>mail</artifactId>
-      <optional>true</optional>
-    </dependency>
-
-    <dependency>
-       <groupId>org.apache.commons</groupId>
-       <artifactId>commons-vfs2</artifactId>
-       <type>test-jar</type>
-       <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <properties>
-    <commons.componentid>vfs-sandbox</commons.componentid>
-    <vfs.parent.dir>${basedir}/..</vfs.parent.dir>
-  </properties>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>${project.basedir}/src/main/resources</directory>
-      </resource>
-      <resource>
-        <directory>${vfs.parent.dir}</directory>
-        <targetPath>META-INF</targetPath>
-        <includes>
-          <include>NOTICE.txt</include>
-          <include>LICENSE.txt</include>
-        </includes>
-      </resource>
-    </resources>
-     <!-- include NOTICE/LICENSE in generated test jar -->
-    <testResources>
-      <testResource>
-        <directory>${vfs.parent.dir}</directory>
-        <targetPath>META-INF</targetPath>
-        <includes>
-          <include>NOTICE.txt</include>
-          <include>LICENSE.txt</include>
-        </includes>
-      </testResource>
-    </testResources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <!-- surfire do not honor suite(), see MSUREFIRE-131 why our tests wont work with maven 2 -->
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <systemPropertyVariables>
-            <test.basedir>../core/target/test-classes/test-data</test.basedir>
-            <test.basedir.res>test-data</test.basedir.res>
-          </systemPropertyVariables>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <profile>
-      <id>smb</id>
-      <activation>
-        <activeByDefault>false</activeByDefault>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <configuration>
-              <systemPropertyVariables>
-                <test.basedir>../core/target/test-classes/test-data</test.basedir>
-                <test.basedir.res>test-data</test.basedir.res>
-                <test.smb.uri>${test.smb.uri}</test.smb.uri>
-              </systemPropertyVariables>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-</project>
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeAttributesMap.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeAttributesMap.java
deleted file mode 100644
index 3d336c0..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeAttributesMap.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.commons.vfs2.provider.mime;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-import javax.mail.Address;
-import javax.mail.Header;
-import javax.mail.MessagingException;
-import javax.mail.Part;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * A map which tries to allow access to the various aspects of the mail.
- */
-public class MimeAttributesMap implements Map<String, Object>
-{
-    private static final String OBJECT_PREFIX = "obj.";
-
-    private final Log log = LogFactory.getLog(MimeAttributesMap.class);
-    private final Part part;
-    private final Map<String, Method> mimeMessageGetters = new TreeMap<String, Method>();
-
-    private Map<String, Object> backingMap;
-
-
-    public MimeAttributesMap(final Part part)
-    {
-        this.part = part;
-        addMimeMessageMethod(part.getClass().getMethods());
-        addMimeMessageMethod(part.getClass().getDeclaredMethods());
-    }
-
-    private void addMimeMessageMethod(final Method[] methods)
-    {
-        for (final Method method : methods)
-        {
-            if (!Modifier.isPublic(method.getModifiers()))
-            {
-                continue;
-            }
-            if (method.getParameterTypes().length > 0)
-            {
-                continue;
-            }
-
-            if (method.getName().startsWith("get"))
-            {
-                mimeMessageGetters.put(method.getName().substring(3), method);
-            }
-            else if (method.getName().startsWith("is"))
-            {
-                mimeMessageGetters.put(method.getName().substring(2), method);
-            }
-        }
-    }
-
-    private Map<String, Object> getMap()
-    {
-        if (backingMap == null)
-        {
-            backingMap = createMap();
-        }
-
-        return backingMap;
-    }
-
-    private Map<String, Object> createMap()
-    {
-        // Object is either a String, or a List of Strings
-        final Map<String, Object> ret = new TreeMap<String, Object>();
-
-        Enumeration<Header> headers;
-        try
-        {
-            @SuppressWarnings("unchecked") // Javadoc say Part returns Header
-            final
-            Enumeration<Header> allHeaders = part.getAllHeaders();
-            headers = allHeaders;
-        }
-        catch (final MessagingException e)
-        {
-            throw new RuntimeException(e);
-        }
-
-        // add all headers
-        while (headers.hasMoreElements())
-        {
-            final Header header = headers.nextElement();
-            final String headerName = header.getName();
-
-            final Object values = ret.get(headerName);
-
-            if (values == null)
-            {
-                ret.put(headerName, header.getValue());
-            }
-            else if (values instanceof String)
-            {
-                final ArrayList<String> newValues = new ArrayList<String>();
-                newValues.add((String) values);
-                newValues.add(header.getValue());
-                ret.put(headerName, newValues);
-            }
-            else if (values instanceof List)
-            {
-                @SuppressWarnings("unchecked") // we only add Strings to the Lists
-                final
-                List<String> list = (List<String>) values;
-                list.add(header.getValue());
-            }
-        }
-
-        // add all simple get/is results (with obj. prefix)
-        final Iterator<Entry<String, Method>> iterEntries = mimeMessageGetters.entrySet().iterator();
-        while (iterEntries.hasNext())
-        {
-            final Map.Entry<String, Method> entry = iterEntries.next();
-            final String name = entry.getKey();
-            final Method method = entry.getValue();
-
-            try
-            {
-                final Object value = method.invoke(part);
-                ret.put(OBJECT_PREFIX + name, value);
-            }
-            catch (final IllegalAccessException e)
-            {
-                log.debug(e.getLocalizedMessage(), e);
-            }
-            catch (final InvocationTargetException e)
-            {
-                log.debug(e.getLocalizedMessage(), e);
-            }
-        }
-
-        // add extended fields (with obj. prefix too)
-        if (part instanceof MimeMessage)
-        {
-            final MimeMessage message = (MimeMessage) part;
-            try
-            {
-                final Address[] address = message.getRecipients(MimeMessage.RecipientType.BCC);
-                ret.put(OBJECT_PREFIX + "Recipients.BCC", address);
-            }
-            catch (final MessagingException e)
-            {
-                log.debug(e.getLocalizedMessage(), e);
-            }
-            try
-            {
-                final Address[] address = message.getRecipients(MimeMessage.RecipientType.CC);
-                ret.put(OBJECT_PREFIX + "Recipients.CC", address);
-            }
-            catch (final MessagingException e)
-            {
-                log.debug(e.getLocalizedMessage(), e);
-            }
-            try
-            {
-                final Address[] address = message.getRecipients(MimeMessage.RecipientType.TO);
-                ret.put(OBJECT_PREFIX + "Recipients.TO", address);
-            }
-            catch (final MessagingException e)
-            {
-                log.debug(e.getLocalizedMessage(), e);
-            }
-            try
-            {
-                final Address[] address = message.getRecipients(MimeMessage.RecipientType.NEWSGROUPS);
-                ret.put(OBJECT_PREFIX + "Recipients.NEWSGROUPS", address);
-            }
-            catch (final MessagingException e)
-            {
-                log.debug(e.getLocalizedMessage(), e);
-            }
-        }
-
-        return ret;
-    }
-
-    public int size()
-    {
-        return getMap().size();
-    }
-
-    public boolean isEmpty()
-    {
-        return getMap().size() < 1;
-    }
-
-    public boolean containsKey(final Object key)
-    {
-        return getMap().containsKey(key);
-    }
-
-    public boolean containsValue(final Object value)
-    {
-        return getMap().containsValue(value);
-    }
-
-    public Object get(final Object key)
-    {
-        return getMap().get(key);
-    }
-
-    public Object put(final String key, final Object value)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public Object remove(final Object key)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public void putAll(final Map<? extends String, ? extends Object> t)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public void clear()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    public Set<String> keySet()
-    {
-        return Collections.unmodifiableSet(getMap().keySet());
-    }
-
-    public Collection<Object> values()
-    {
-        return Collections.unmodifiableCollection(getMap().values());
-    }
-
-    public Set<Entry<String, Object>> entrySet()
-    {
-        return Collections.unmodifiableSet(getMap().entrySet());
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileContentInfoFactory.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileContentInfoFactory.java
deleted file mode 100644
index de3643f..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileContentInfoFactory.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.commons.vfs2.provider.mime;
-
-import javax.mail.MessagingException;
-import javax.mail.Part;
-import javax.mail.internet.ContentType;
-
-import org.apache.commons.vfs2.FileContent;
-import org.apache.commons.vfs2.FileContentInfo;
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.impl.DefaultFileContentInfo;
-
-/**
- * Get access to the content info stuff for mime objects.
- */
-public class MimeFileContentInfoFactory implements FileContentInfoFactory
-{
-    public FileContentInfo create(final FileContent fileContent) throws FileSystemException
-    {
-        final MimeFileObject mimeFile = (MimeFileObject) fileContent.getFile();
-        final Part part = mimeFile.getPart();
-
-        String contentTypeString = null;
-        String charset = null;
-
-        try
-        {
-            // special handling for multipart
-            if (mimeFile.isMultipart())
-            {
-                // get the original content type, but ...
-                contentTypeString = part.getContentType();
-
-                // .... we deliver the preamble instead of an inupt string
-                // the preamble will be delivered in UTF-8 - fixed
-                charset = MimeFileSystem.PREAMBLE_CHARSET;
-            }
-        }
-        catch (final MessagingException e)
-        {
-            throw new FileSystemException(e);
-        }
-
-        if (contentTypeString == null)
-        {
-            // normal message ... get the content type
-            try
-            {
-                contentTypeString = part.getContentType();
-            }
-            catch (final MessagingException e)
-            {
-                throw new FileSystemException(e);
-            }
-        }
-
-        ContentType contentType;
-        try
-        {
-            contentType = new ContentType(contentTypeString);
-        }
-        catch (final MessagingException e)
-        {
-            throw new FileSystemException(e);
-        }
-
-        if (charset == null)
-        {
-            // charset might already be set by the multipart message stuff, else
-            // extract it from the contentType now
-            charset = contentType.getParameter("charset"); // NON-NLS
-        }
-
-        return new DefaultFileContentInfo(
-            contentType.getBaseType(),
-            charset);
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileObject.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileObject.java
deleted file mode 100644
index f9dade3..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileObject.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.commons.vfs2.provider.mime;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-
-import javax.mail.Header;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Multipart;
-import javax.mail.Part;
-import javax.mail.internet.MimeMultipart;
-
-import org.apache.commons.vfs2.FileContentInfoFactory;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.NameScope;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.util.FileObjectUtils;
-
-/**
- * A part of a MIME message.
- */
-public class MimeFileObject
-    extends AbstractFileObject<MimeFileSystem>
-    implements FileObject
-{
-    private Part part;
-    private Map<String, Object> attributeMap;
-
-    protected MimeFileObject(final AbstractFileName name,
-                            final Part part,
-                            final MimeFileSystem fileSystem) throws FileSystemException
-    {
-        super(name, fileSystem);
-        setPart(part);
-    }
-    /**
-     * Attaches this file object to its file resource.
-     */
-    @Override
-    protected void doAttach() throws Exception
-    {
-        if (part == null)
-        {
-            if (!getName().equals(getFileSystem().getRootName()))
-            {
-                final MimeFileObject foParent = (MimeFileObject) FileObjectUtils.getAbstractFileObject(getParent());
-                setPart(foParent.findPart(getName().getBaseName()));
-                return;
-            }
-
-            setPart(((MimeFileSystem) getFileSystem()).createCommunicationLink());
-        }
-    }
-
-    private Part findPart(final String partName) throws Exception
-    {
-        if (getType() == FileType.IMAGINARY)
-        {
-            // not existent
-            return null;
-        }
-
-        if (isMultipart())
-        {
-            final Multipart multipart = (Multipart)  part.getContent();
-            if (partName.startsWith(MimeFileSystem.NULL_BP_NAME))
-            {
-                final int partNumber = Integer.parseInt(partName.substring(MimeFileSystem.NULL_BP_NAME.length()), 10);
-                if (partNumber < 0 || partNumber + 1 > multipart.getCount())
-                {
-                    // non existent
-                    return null;
-                }
-
-                return multipart.getBodyPart(partNumber);
-            }
-
-            for (int i = 0; i < multipart.getCount(); i++)
-            {
-                final Part childPart = multipart.getBodyPart(i);
-                if (partName.equals(childPart.getFileName()))
-                {
-                    return childPart;
-                }
-            }
-        }
-
-        return null;
-    }
-
-    @Override
-    protected void doDetach() throws Exception
-    {
-    }
-
-    /**
-     * Determines the type of the file, returns null if the file does not
-     * exist.
-     */
-    @Override
-    protected FileType doGetType() throws Exception
-    {
-        if (part == null)
-        {
-            return FileType.IMAGINARY;
-        }
-
-        if (isMultipart())
-        {
-            // we cant have children ...
-            return FileType.FILE_OR_FOLDER;
-        }
-
-        return FileType.FILE;
-    }
-
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        return null;
-    }
-
-    /**
-     * Lists the children of the file.  Is only called if {@link #doGetType}
-     * returns {@link org.apache.commons.vfs2.FileType#FOLDER}.
-     */
-    @Override
-    protected FileObject[] doListChildrenResolved() throws Exception
-    {
-        if (part == null)
-        {
-            return null;
-        }
-
-        final List<MimeFileObject> vfs = new ArrayList<MimeFileObject>();
-        if (isMultipart())
-        {
-            final Object container = part.getContent();
-            if (container instanceof Multipart)
-            {
-                final Multipart multipart = (Multipart) container;
-
-                for (int i = 0; i < multipart.getCount(); i++)
-                {
-                    final Part part = multipart.getBodyPart(i);
-
-                    String filename = UriParser.encode(part.getFileName());
-                    if (filename == null)
-                    {
-                        filename = MimeFileSystem.NULL_BP_NAME + i;
-                    }
-
-                    final MimeFileObject fo = (MimeFileObject) FileObjectUtils.getAbstractFileObject(
-                        getFileSystem().resolveFile(
-                            getFileSystem().getFileSystemManager().resolveName(getName(),
-                            filename,
-                            NameScope.CHILD)));
-                    fo.setPart(part);
-                    vfs.add(fo);
-                }
-            }
-        }
-
-        return vfs.toArray(new MimeFileObject[vfs.size()]);
-    }
-
-    private void setPart(final Part part)
-    {
-        this.part = part;
-        this.attributeMap = null;
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        return part.getSize();
-    }
-
-    /**
-     * Returns the last modified time of this file.
-     */
-    @Override
-    protected long doGetLastModifiedTime()
-        throws Exception
-    {
-        final Message mm = getMessage();
-        if (mm == null)
-        {
-            return -1;
-        }
-        if (mm.getSentDate() != null)
-        {
-            return mm.getSentDate().getTime();
-        }
-        if (mm.getReceivedDate() != null)
-        {
-            mm.getReceivedDate();
-        }
-        return 0;
-    }
-
-    private Message getMessage() throws FileSystemException
-    {
-        if (part instanceof Message)
-        {
-            return (Message) part;
-        }
-
-        return ((MimeFileObject) FileObjectUtils.getAbstractFileObject(getParent())).getMessage();
-    }
-
-    /**
-     * Creates an input stream to read the file content from.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        if (isMultipart())
-        {
-            // deliver the preamble as the only content
-
-            final String preamble = ((MimeMultipart) part.getContent()).getPreamble();
-            if (preamble == null)
-            {
-                return new ByteArrayInputStream(new byte[]{});
-            }
-            return new ByteArrayInputStream(preamble.getBytes(MimeFileSystem.PREAMBLE_CHARSET));
-        }
-
-        return part.getInputStream();
-    }
-
-    boolean isMultipart() throws MessagingException
-    {
-        return part.getContentType() != null && part.getContentType().startsWith("multipart/");
-    }
-
-    @Override
-    protected FileContentInfoFactory getFileContentInfoFactory()
-    {
-        return new MimeFileContentInfoFactory();
-    }
-
-    protected Part getPart()
-    {
-        return part;
-    }
-
-    /**
-     * Returns all headers of this part.
-     * <p>
-     * The map key is a java.lang.String and the value is a:
-     * <ul>
-     * <li>{@code java.lang.Strings} for single entries or a</li>
-     * <li>{@code java.utils.List<java.lang.Strings>} for entries with multiple values</li>
-     * </ul>
-     */
-    @Override
-    protected Map<String, Object> doGetAttributes() throws Exception
-    {
-        if (attributeMap == null)
-        {
-            if (part != null)
-            {
-                attributeMap = new MimeAttributesMap(part);
-            }
-            else
-            {
-                attributeMap = Collections.emptyMap();
-            }
-        }
-
-        return attributeMap;
-    }
-
-    @SuppressWarnings("unchecked") // Javadoc says Part returns Header
-    protected Enumeration<Header> getAllHeaders() throws MessagingException
-    {
-        return part.getAllHeaders();
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileProvider.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileProvider.java
deleted file mode 100644
index 295664b..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileProvider.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.commons.vfs2.provider.mime;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.AbstractLayeredFileProvider;
-import org.apache.commons.vfs2.provider.FileProvider;
-import org.apache.commons.vfs2.provider.LayeredFileName;
-
-/**
- * A provider for MIME Message.
- */
-public class MimeFileProvider
-    extends AbstractLayeredFileProvider
-    implements FileProvider
-{
-    static final Collection<Capability> capabilities =
-        Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-            {
-                Capability.GET_TYPE,
-                Capability.GET_LAST_MODIFIED,
-                Capability.LIST_CHILDREN,
-                Capability.READ_CONTENT,
-                Capability.URI,
-                Capability.ATTRIBUTES
-            }));
-
-    public MimeFileProvider()
-    {
-        super();
-    }
-
-    /**
-     * Creates the filesystem.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final String scheme, final FileObject file,
-                                            final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        final FileName name =
-            new LayeredFileName(scheme, file.getName(), FileName.ROOT_PATH, FileType.FOLDER);
-        return new MimeFileSystem(name, file, fileSystemOptions);
-    }
-
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileSystem.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileSystem.java
deleted file mode 100644
index 960688a..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/MimeFileSystem.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.provider.mime;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collection;
-
-import javax.mail.MessagingException;
-import javax.mail.Part;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-import org.apache.commons.vfs2.util.SharedRandomContentInputStream;
-
-/**
- * An MIME file system.
- */
-public class MimeFileSystem
-    extends AbstractFileSystem
-{
-    static final String NULL_BP_NAME = "_body_part_";
-    static final String CONTENT_NAME = "_content";
-    static final String PREAMBLE_CHARSET = "UTF-8";
-
-    private final Log log = LogFactory.getLog(MimeFileSystem.class);
-
-    private InputStream mimeStream = null;
-
-    protected MimeFileSystem(final FileName rootName, final FileObject parentLayer,
-                             final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, parentLayer, fileSystemOptions);
-    }
-
-    /**
-     * Creates a file object.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws FileSystemException
-    {
-        return new MimeFileObject(name, null, this);
-    }
-
-    /**
-     * Returns the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(MimeFileProvider.capabilities);
-    }
-
-
-    @Override
-    protected void doCloseCommunicationLink()
-    {
-        try
-        {
-            if (mimeStream == null)
-            {
-                return;
-            }
-
-            closeMimeStream();
-            mimeStream = null;
-        }
-        catch (final IOException e)
-        {
-            log.warn(e.getLocalizedMessage(), e);
-        }
-    }
-
-    private void closeMimeStream() throws IOException
-    {
-        if (mimeStream instanceof SharedRandomContentInputStream)
-        {
-            ((SharedRandomContentInputStream) mimeStream).closeAll();
-        }
-        else
-        {
-            mimeStream.close();
-        }
-    }
-
-    public Part createCommunicationLink() throws IOException, MessagingException
-    {
-        if (mimeStream != null)
-        {
-            closeMimeStream();
-        }
-
-        final FileObject parentLayer = getParentLayer();
-        if (!parentLayer.exists())
-        {
-            return null;
-        }
-
-        if (parentLayer.getFileSystem().hasCapability(Capability.RANDOM_ACCESS_READ))
-        {
-            mimeStream = new SharedRandomContentInputStream(parentLayer);
-        }
-        else
-        {
-            mimeStream = getParentLayer().getContent().getInputStream();
-        }
-        return new MimeMessage(null, mimeStream);
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/package.html b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/package.html
deleted file mode 100644
index 2b20633..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/mime/package.html
+++ /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.

-  -->

-<body>

-<p>VFS (Sandbox) Mime File Provider.</p>

-</body>

diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileName.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileName.java
deleted file mode 100644
index 96dfb7d..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileName.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.commons.vfs2.provider.smb;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.GenericFileName;
-
-/**
- * An SMB URI.  Adds a share name to the generic URI.
- */
-public class SmbFileName extends GenericFileName
-{
-    private static final int DEFAULT_PORT = 139;
-
-    private final String share;
-    private final String domain;
-    private String uriWithoutAuth;
-
-    protected SmbFileName(
-        final String scheme,
-        final String hostName,
-        final int port,
-        final String userName,
-        final String password,
-        final String domain,
-        final String share,
-        final String path,
-        final FileType type)
-    {
-        super(scheme, hostName, port, DEFAULT_PORT, userName, password, path, type);
-        this.share = share;
-        this.domain = domain;
-    }
-
-    /**
-     * Returns the share name.
-     * @return share name
-     */
-    public String getShare()
-    {
-        return share;
-    }
-
-    /**
-     * Builds the root URI for this file name.
-     */
-    @Override
-    protected void appendRootUri(final StringBuilder buffer, final boolean addPassword)
-    {
-        super.appendRootUri(buffer, addPassword);
-        buffer.append('/');
-        buffer.append(share);
-    }
-
-    /**
-     * Put {@code domain} before @{code username} if both are set.
-     * <p>
-     * Uses super method to add password or password placeholder.
-     */
-    @Override
-    protected void appendCredentials(final StringBuilder buffer, final boolean addPassword)
-    {
-        if (getDomain() != null && getDomain().length() != 0 &&
-            getUserName() != null && getUserName().length() != 0)
-        {
-            buffer.append(getDomain());
-            buffer.append("\\");
-        }
-        super.appendCredentials(buffer, addPassword);
-    }
-
-    /**
-     * Factory method for creating name instances.
-     *
-     * @param path path of file.
-     * @param type file or directory
-     * @return new SmbFileName object, never null.
-     */
-    @Override
-    public FileName createName(final String path, final FileType type)
-    {
-        return new SmbFileName(
-            getScheme(),
-            getHostName(),
-            getPort(),
-            getUserName(),
-            getPassword(),
-            domain,
-            share,
-            path,
-            type);
-    }
-
-    /**
-     * Construct the path suitable for SmbFile when used with NtlmPasswordAuthentication.
-     *
-     * @return caches and return URI with no username/password, never null
-     * @throws FileSystemException if any of the invoked methods throw
-     */
-    public String getUriWithoutAuth() throws FileSystemException
-    {
-        if (uriWithoutAuth != null)
-        {
-            return uriWithoutAuth;
-        }
-
-        final StringBuilder sb = new StringBuilder(120);
-        sb.append(getScheme());
-        sb.append("://");
-        sb.append(getHostName());
-        if (getPort() != DEFAULT_PORT)
-        {
-            sb.append(":");
-            sb.append(getPort());
-        }
-        sb.append("/");
-        sb.append(getShare());
-        sb.append(getPathDecoded());
-        uriWithoutAuth = sb.toString();
-        return uriWithoutAuth;
-    }
-
-    /**
-     * Returns the domain name.
-     * @return domain name
-     */
-    public String getDomain()
-    {
-        return domain;
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileNameParser.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileNameParser.java
deleted file mode 100644
index 7d8cd3a..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileNameParser.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.commons.vfs2.provider.smb;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.provider.FileNameParser;
-import org.apache.commons.vfs2.provider.URLFileNameParser;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.provider.VfsComponentContext;
-
-/**
- * Implementation for sftp. set default port to 139
- */
-public class SmbFileNameParser extends URLFileNameParser
-{
-    private static final SmbFileNameParser INSTANCE = new SmbFileNameParser();
-    private static final int SMB_PORT = 139;
-
-    public SmbFileNameParser()
-    {
-        super(SMB_PORT);
-    }
-
-    public static FileNameParser getInstance()
-    {
-        return INSTANCE;
-    }
-
-    @Override
-    public FileName parseUri(final VfsComponentContext context, final FileName base,
-                             final String filename) throws FileSystemException
-    {
-        final StringBuilder name = new StringBuilder();
-
-        // Extract the scheme and authority parts
-        final Authority auth = extractToPath(filename, name);
-
-        // extract domain
-        String username = auth.getUserName();
-        final String domain = extractDomain(username);
-        if (domain != null)
-        {
-            username = username.substring(domain.length() + 1);
-        }
-
-        // Decode and adjust separators
-        UriParser.canonicalizePath(name, 0, name.length(), this);
-        UriParser.fixSeparators(name);
-
-        // Extract the share
-        final String share = UriParser.extractFirstElement(name);
-        if (share == null || share.length() == 0)
-        {
-            throw new FileSystemException("vfs.provider.smb/missing-share-name.error", filename);
-        }
-
-        // Normalise the path.  Do this after extracting the share name,
-        // to deal with things like smb://hostname/share/..
-        final FileType fileType = UriParser.normalisePath(name);
-        final String path = name.toString();
-
-        return new SmbFileName(
-            auth.getScheme(),
-            auth.getHostName(),
-            auth.getPort(),
-            username,
-            auth.getPassword(),
-            domain,
-            share,
-            path,
-            fileType);
-    }
-
-    private String extractDomain(final String username)
-    {
-        if (username == null)
-        {
-            return null;
-        }
-
-        for (int i = 0; i < username.length(); i++)
-        {
-            if (username.charAt(i) == '\\')
-            {
-                return username.substring(0, i);
-            }
-        }
-
-        return null;
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileObject.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileObject.java
deleted file mode 100644
index b6d863f..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileObject.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.commons.vfs2.provider.smb;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-
-import jcifs.smb.NtlmPasswordAuthentication;
-import jcifs.smb.SmbException;
-import jcifs.smb.SmbFile;
-import jcifs.smb.SmbFileInputStream;
-import jcifs.smb.SmbFileOutputStream;
-
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileType;
-import org.apache.commons.vfs2.FileTypeHasNoContentException;
-import org.apache.commons.vfs2.RandomAccessContent;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileObject;
-import org.apache.commons.vfs2.provider.UriParser;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-import org.apache.commons.vfs2.util.UserAuthenticatorUtils;
-
-/**
- * A file in an SMB file system.
- */
-public class SmbFileObject
-    extends AbstractFileObject<SmbFileSystem>
-{
-    // private final String fileName;
-    private SmbFile file;
-
-    protected SmbFileObject(final AbstractFileName name,
-                            final SmbFileSystem fileSystem) throws FileSystemException
-    {
-        super(name, fileSystem);
-        // this.fileName = UriParser.decode(name.getURI());
-    }
-
-    /**
-     * Attaches this file object to its file resource.
-     */
-    @Override
-    protected void doAttach() throws Exception
-    {
-        // Defer creation of the SmbFile to here
-        if (file == null)
-        {
-            file = createSmbFile(getName());
-        }
-    }
-
-    @Override
-    protected void doDetach() throws Exception
-    {
-        // file closed through content-streams
-        file = null;
-    }
-
-    private SmbFile createSmbFile(final FileName fileName)
-        throws MalformedURLException, SmbException, FileSystemException
-    {
-        final SmbFileName smbFileName = (SmbFileName) fileName;
-
-        final String path = smbFileName.getUriWithoutAuth();
-
-        UserAuthenticationData authData = null;
-        SmbFile file;
-        try
-        {
-            authData = UserAuthenticatorUtils.authenticate(
-                           getFileSystem().getFileSystemOptions(),
-                           SmbFileProvider.AUTHENTICATOR_TYPES);
-
-            NtlmPasswordAuthentication auth = null;
-            if (authData != null)
-            {
-                auth = new NtlmPasswordAuthentication(
-                    UserAuthenticatorUtils.toString(
-                        UserAuthenticatorUtils.getData(authData, UserAuthenticationData.DOMAIN,
-                            UserAuthenticatorUtils.toChar(smbFileName.getDomain()))),
-                    UserAuthenticatorUtils.toString(
-                        UserAuthenticatorUtils.getData(authData, UserAuthenticationData.USERNAME,
-                            UserAuthenticatorUtils.toChar(smbFileName.getUserName()))),
-                    UserAuthenticatorUtils.toString(
-                        UserAuthenticatorUtils.getData(authData, UserAuthenticationData.PASSWORD,
-                            UserAuthenticatorUtils.toChar(smbFileName.getPassword()))));
-            }
-
-            // if auth == null SmbFile uses default credentials
-            // ("jcifs.smb.client.domain", "?"), ("jcifs.smb.client.username", "GUEST"),
-            // ("jcifs.smb.client.password", BLANK);
-            // ANONYMOUS=("","","")
-            file = new SmbFile(path, auth);
-
-            if (file.isDirectory() && !file.toString().endsWith("/"))
-            {
-                file = new SmbFile(path + "/", auth);
-            }
-            return file;
-        }
-        finally
-        {
-            UserAuthenticatorUtils.cleanup(authData); // might be null
-        }
-    }
-
-    /**
-     * Determines the type of the file, returns null if the file does not
-     * exist.
-     */
-    @Override
-    protected FileType doGetType() throws Exception
-    {
-        if (!file.exists())
-        {
-            return FileType.IMAGINARY;
-        }
-        else if (file.isDirectory())
-        {
-            return FileType.FOLDER;
-        }
-        else if (file.isFile())
-        {
-            return FileType.FILE;
-        }
-
-        throw new FileSystemException("vfs.provider.smb/get-type.error", getName());
-    }
-
-    /**
-     * Lists the children of the file.  Is only called if {@link #doGetType}
-     * returns {@link FileType#FOLDER}.
-     */
-    @Override
-    protected String[] doListChildren() throws Exception
-    {
-        // VFS-210: do not try to get listing for anything else than directories
-        if (!file.isDirectory())
-        {
-            return null;
-        }
-
-        return UriParser.encode(file.list());
-    }
-
-    /**
-     * Determines if this file is hidden.
-     */
-    @Override
-    protected boolean doIsHidden() throws Exception
-    {
-        return file.isHidden();
-    }
-
-    /**
-     * Deletes the file.
-     */
-    @Override
-    protected void doDelete() throws Exception
-    {
-        file.delete();
-    }
-
-    @Override
-    protected void doRename(final FileObject newfile) throws Exception
-    {
-        file.renameTo(createSmbFile(newfile.getName()));
-    }
-
-    /**
-     * Creates this file as a folder.
-     */
-    @Override
-    protected void doCreateFolder() throws Exception
-    {
-        file.mkdir();
-        file = createSmbFile(getName());
-    }
-
-    /**
-     * Returns the size of the file content (in bytes).
-     */
-    @Override
-    protected long doGetContentSize() throws Exception
-    {
-        return file.length();
-    }
-
-    /**
-     * Returns the last modified time of this file.
-     */
-    @Override
-    protected long doGetLastModifiedTime()
-        throws Exception
-    {
-        return file.getLastModified();
-    }
-
-    /**
-     * Creates an input stream to read the file content from.
-     */
-    @Override
-    protected InputStream doGetInputStream() throws Exception
-    {
-        try
-        {
-            return new SmbFileInputStream(file);
-        }
-        catch (final SmbException e)
-        {
-            if (e.getErrorCode() == SmbException.ERRbadfile)
-            {
-                throw new org.apache.commons.vfs2.FileNotFoundException(getName());
-            }
-            else if (file.isDirectory())
-            {
-                throw new FileTypeHasNoContentException(getName());
-            }
-
-            throw e;
-        }
-    }
-
-    /**
-     * Creates an output stream to write the file content to.
-     */
-    @Override
-    protected OutputStream doGetOutputStream(final boolean bAppend) throws Exception
-    {
-        return new SmbFileOutputStream(file, bAppend);
-    }
-
-    /**
-     * random access
-     */
-    @Override
-    protected RandomAccessContent doGetRandomAccessContent(final RandomAccessMode mode) throws Exception
-    {
-        return new SmbFileRandomAccessContent(file, mode);
-    }
-
-    @Override
-    protected boolean doSetLastModifiedTime(final long modtime) throws Exception
-    {
-        file.setLastModified(modtime);
-        return true;
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileProvider.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileProvider.java
deleted file mode 100644
index 9413954..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileProvider.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.commons.vfs2.provider.smb;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileSystem;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.UserAuthenticationData;
-import org.apache.commons.vfs2.provider.AbstractOriginatingFileProvider;
-import org.apache.commons.vfs2.provider.FileProvider;
-
-/**
- * A provider for SMB (Samba, Windows share) file systems.
- */
-public class SmbFileProvider
-    extends AbstractOriginatingFileProvider
-    implements FileProvider
-{
-    /** Authentication data supported by this provider. */
-    public static final UserAuthenticationData.Type[] AUTHENTICATOR_TYPES = new UserAuthenticationData.Type[]
-        {
-            UserAuthenticationData.USERNAME, UserAuthenticationData.PASSWORD, UserAuthenticationData.DOMAIN
-        };
-
-    static final Collection<Capability> capabilities =
-        Collections.unmodifiableCollection(Arrays.asList(new Capability[]
-            {
-                Capability.CREATE,
-                Capability.DELETE,
-                Capability.RENAME,
-                Capability.GET_TYPE,
-                Capability.GET_LAST_MODIFIED,
-                Capability.SET_LAST_MODIFIED_FILE,
-                Capability.SET_LAST_MODIFIED_FOLDER,
-                Capability.LIST_CHILDREN,
-                Capability.READ_CONTENT,
-                Capability.URI,
-                Capability.WRITE_CONTENT,
-                Capability.APPEND_CONTENT,
-                Capability.RANDOM_ACCESS_READ,
-                Capability.RANDOM_ACCESS_WRITE
-            }));
-
-    public SmbFileProvider()
-    {
-        super();
-        setFileNameParser(SmbFileNameParser.getInstance());
-    }
-
-    /**
-     * Creates the filesystem.
-     */
-    @Override
-    protected FileSystem doCreateFileSystem(final FileName name, final FileSystemOptions fileSystemOptions)
-        throws FileSystemException
-    {
-        return new SmbFileSystem(name, fileSystemOptions);
-    }
-
-    public Collection<Capability> getCapabilities()
-    {
-        return capabilities;
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileRandomAccessContent.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileRandomAccessContent.java
deleted file mode 100644
index 73b9cd5..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileRandomAccessContent.java
+++ /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.
- */
-package org.apache.commons.vfs2.provider.smb;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.UnknownHostException;
-
-import jcifs.smb.SmbException;
-import jcifs.smb.SmbFile;
-import jcifs.smb.SmbRandomAccessFile;
-
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.AbstractRandomAccessContent;
-import org.apache.commons.vfs2.util.RandomAccessMode;
-
-/**
- * RandomAccess for smb files
- */
-class SmbFileRandomAccessContent extends AbstractRandomAccessContent
-{
-    private final SmbRandomAccessFile raf;
-    private final InputStream rafis;
-
-    SmbFileRandomAccessContent(final SmbFile smbFile, final RandomAccessMode mode) throws FileSystemException
-    {
-        super(mode);
-
-        try
-        {
-            raf = new SmbRandomAccessFile(smbFile, mode.getModeString());
-            rafis = new InputStream()
-            {
-                @Override
-                public int available() throws IOException
-                {
-                    final long available = raf.length() - raf.getFilePointer();
-                    if (available > Integer.MAX_VALUE)
-                    {
-                        return Integer.MAX_VALUE;
-                    }
-
-                    return (int) available;
-                }
-
-                @Override
-                public void close() throws IOException
-                {
-                    raf.close();
-                }
-
-                @Override
-                public int read() throws IOException
-                {
-                    return raf.readByte();
-                }
-
-                @Override
-                public int read(final byte[] b) throws IOException
-                {
-                    return raf.read(b);
-                }
-
-                @Override
-                public int read(final byte[] b, final int off, final int len) throws IOException
-                {
-                    return raf.read(b, off, len);
-                }
-
-                @Override
-                public long skip(final long n) throws IOException
-                {
-                    raf.seek(raf.getFilePointer() + n);
-                    return n;
-                }
-            };
-        }
-        catch (final MalformedURLException e)
-        {
-            throw new FileSystemException("vfs.provider/random-access-open-failed.error", smbFile, e);
-        }
-        catch (final SmbException e)
-        {
-            throw new FileSystemException("vfs.provider/random-access-open-failed.error", smbFile, e);
-        }
-        catch (final UnknownHostException e)
-        {
-            throw new FileSystemException("vfs.provider/random-access-open-failed.error", smbFile, e);
-        }
-    }
-
-    public void close() throws IOException
-    {
-        raf.close();
-    }
-
-    public long getFilePointer() throws IOException
-    {
-        return raf.getFilePointer();
-    }
-
-    public InputStream getInputStream() throws IOException
-    {
-        return rafis;
-    }
-
-    public long length() throws IOException
-    {
-        return raf.length();
-    }
-
-    public boolean readBoolean() throws IOException
-    {
-        return raf.readBoolean();
-    }
-
-    public byte readByte() throws IOException
-    {
-        return raf.readByte();
-    }
-
-    public char readChar() throws IOException
-    {
-        return raf.readChar();
-    }
-
-    public double readDouble() throws IOException
-    {
-        return raf.readDouble();
-    }
-
-    public float readFloat() throws IOException
-    {
-        return raf.readFloat();
-    }
-
-    public void readFully(final byte[] b) throws IOException
-    {
-        raf.readFully(b);
-    }
-
-    public void readFully(final byte[] b, final int off, final int len) throws IOException
-    {
-        raf.readFully(b, off, len);
-    }
-
-    public int readInt() throws IOException
-    {
-        return raf.readInt();
-    }
-
-    public long readLong() throws IOException
-    {
-        return raf.readLong();
-    }
-
-    public short readShort() throws IOException
-    {
-        return raf.readShort();
-    }
-
-    public int readUnsignedByte() throws IOException
-    {
-        return raf.readUnsignedByte();
-    }
-
-    public int readUnsignedShort() throws IOException
-    {
-        return raf.readUnsignedShort();
-    }
-
-    public String readUTF() throws IOException
-    {
-        return raf.readUTF();
-    }
-
-    public void seek(final long pos) throws IOException
-    {
-        raf.seek(pos);
-    }
-
-    public void setLength(final long newLength) throws IOException
-    {
-        raf.setLength(newLength);
-    }
-
-    public int skipBytes(final int n) throws IOException
-    {
-        return raf.skipBytes(n);
-    }
-
-    @Override
-    public void write(final byte[] b) throws IOException
-    {
-        raf.write(b);
-    }
-
-    @Override
-    public void write(final byte[] b, final int off, final int len) throws IOException
-    {
-        raf.write(b, off, len);
-    }
-
-    @Override
-    public void write(final int b) throws IOException
-    {
-        raf.write(b);
-    }
-
-    @Override
-    public void writeBoolean(final boolean v) throws IOException
-    {
-        raf.writeBoolean(v);
-    }
-
-    @Override
-    public void writeByte(final int v) throws IOException
-    {
-        raf.writeByte(v);
-    }
-
-    @Override
-    public void writeBytes(final String s) throws IOException
-    {
-        raf.writeBytes(s);
-    }
-
-    @Override
-    public void writeChar(final int v) throws IOException
-    {
-        raf.writeChar(v);
-    }
-
-    @Override
-    public void writeChars(final String s) throws IOException
-    {
-        raf.writeChars(s);
-    }
-
-    @Override
-    public void writeDouble(final double v) throws IOException
-    {
-        raf.writeDouble(v);
-    }
-
-    @Override
-    public void writeFloat(final float v) throws IOException
-    {
-        raf.writeFloat(v);
-    }
-
-    @Override
-    public void writeInt(final int v) throws IOException
-    {
-        raf.writeInt(v);
-    }
-
-    @Override
-    public void writeLong(final long v) throws IOException
-    {
-        raf.writeLong(v);
-    }
-
-    @Override
-    public void writeShort(final int v) throws IOException
-    {
-        raf.writeShort(v);
-    }
-
-    @Override
-    public void writeUTF(final String str) throws IOException
-    {
-        raf.writeUTF(str);
-    }
-
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileSystem.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileSystem.java
deleted file mode 100644
index ed1942e..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/SmbFileSystem.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.commons.vfs2.provider.smb;
-
-import java.util.Collection;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileName;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.FileSystemOptions;
-import org.apache.commons.vfs2.provider.AbstractFileName;
-import org.apache.commons.vfs2.provider.AbstractFileSystem;
-
-/**
- * An SMB file system.
- */
-public class SmbFileSystem
-    extends AbstractFileSystem
-{
-    protected SmbFileSystem(final FileName rootName, final FileSystemOptions fileSystemOptions)
-    {
-        super(rootName, null, fileSystemOptions);
-    }
-
-    /**
-     * Creates a file object.
-     */
-    @Override
-    protected FileObject createFile(final AbstractFileName name) throws FileSystemException
-    {
-        return new SmbFileObject(name, this);
-    }
-
-    /**
-     * Returns the capabilities of this file system.
-     */
-    @Override
-    protected void addCapabilities(final Collection<Capability> caps)
-    {
-        caps.addAll(SmbFileProvider.capabilities);
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/package.html b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/package.html
deleted file mode 100644
index b98b9e4..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/provider/smb/package.html
+++ /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.
-  -->
-<body>
-<p>VFS (Sandbox) SMB/CIFS File Provider.</p>
-</body>
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/util/FileObjectDataSource.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/util/FileObjectDataSource.java
deleted file mode 100644
index d325898..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/util/FileObjectDataSource.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.commons.vfs2.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import javax.activation.DataSource;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-
-/**
- * (Sandbox) Provide access to a FileObject as JAF DataSource.
- */
-public class FileObjectDataSource implements DataSource
-{
-    private final FileObject fo;
-
-    public FileObjectDataSource(final FileObject fo)
-    {
-        this.fo = fo;
-    }
-
-    public InputStream getInputStream() throws IOException
-    {
-        return fo.getContent().getInputStream();
-    }
-
-    public OutputStream getOutputStream() throws IOException
-    {
-        return fo.getContent().getOutputStream();
-    }
-
-    public String getContentType()
-    {
-        try
-        {
-            return fo.getContent().getContentInfo().getContentType();
-        }
-        catch (final FileSystemException e)
-        {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public String getName()
-    {
-        return fo.getName().getBaseName();
-    }
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/util/RACRandomAccessFile.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/util/RACRandomAccessFile.java
deleted file mode 100644
index 1ec9cad..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/util/RACRandomAccessFile.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright 2002-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.vfs2.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import org.apache.commons.vfs2.RandomAccessContent;
-
-/**
- * (Sandbox) Encapsulates a {@link RandomAccessContent} instance, allowing it to be used
- * as a {@link RandomAccessFile} instance.
- */
-public class RACRandomAccessFile extends RandomAccessFile implements RandomAccessContent
-{
-    private final byte[] singleByteBuf = new byte[1];
-
-    private RandomAccessContent rac;
-
-    public RACRandomAccessFile(final RandomAccessContent rac) throws IOException
-    {
-        this(createTempFile());
-        this.rac = rac;
-    }
-
-    private RACRandomAccessFile(final File tempFile) throws IOException
-    {
-        super(tempFile, "r");
-        deleteTempFile(tempFile);
-    }
-
-    private static File createTempFile() throws IOException
-    {
-        return File.createTempFile("fraf", "");
-    }
-
-    private void deleteTempFile(final File tempFile)
-    {
-        try
-        {
-            super.close();
-        }
-        catch (final IOException ex)
-        {
-            throw new RuntimeException(ex);
-        }
-        finally
-        {
-            /* ignored = */ tempFile.delete();
-        }
-    }
-
-    @Override
-    public long getFilePointer() throws IOException
-    {
-        return this.rac.getFilePointer();
-    }
-
-    @Override
-    public void seek(final long pos) throws IOException
-    {
-        this.rac.seek(pos);
-    }
-
-    @Override
-    public int skipBytes(final int n) throws IOException
-    {
-        return this.rac.skipBytes(n);
-    }
-
-    @Override
-    public long length() throws IOException
-    {
-        return this.rac.length();
-    }
-
-    @Override
-    public void setLength(final long newLength) throws IOException
-    {
-        throw new IOException("Underlying RandomAccessContent instance length cannot be modified.");
-    }
-
-    public InputStream getInputStream() throws IOException
-    {
-        return this.rac.getInputStream();
-    }
-
-    @Override
-    public void close() throws IOException
-    {
-        this.rac.close();
-    }
-
-    @Override
-    public final int read(final byte[] b) throws IOException
-    {
-        return read(b, 0, b.length);
-    }
-
-    @Override
-    public final int read() throws IOException
-    {
-        final byte[] buf = this.singleByteBuf;
-        final int count = read(buf, 0, 1);
-        return count < 0 ? -1 : buf[0] & 0xFF;
-    }
-
-    @Override
-    public int read(final byte[] b, final int off, final int len) throws IOException
-    {
-        this.rac.readFully(b, off, len);
-        return len;
-    }
-
-    @Override
-    public final void write(final int b) throws IOException
-    {
-        final byte[] buf = this.singleByteBuf;
-        buf[0] = (byte) b;
-        write(buf, 0, 1);
-    }
-
-    @Override
-    public final void write(final byte[] b) throws IOException
-    {
-        write(b, 0, b.length);
-    }
-
-    @Override
-    public void write(final byte[] b, final int off, final int len) throws IOException
-    {
-        this.rac.write(b, off, len);
-    }
-
-}
diff --git a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/util/SharedRandomContentInputStream.java b/trunk/sandbox/src/main/java/org/apache/commons/vfs2/util/SharedRandomContentInputStream.java
deleted file mode 100644
index 2fbd130..0000000
--- a/trunk/sandbox/src/main/java/org/apache/commons/vfs2/util/SharedRandomContentInputStream.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.commons.vfs2.util;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.mail.internet.SharedInputStream;
-
-import org.apache.commons.vfs2.Capability;
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.RandomAccessContent;
-
-/**
- * (Sandbox) A wrapper to an FileObject to get a {@link javax.mail.internet.SharedInputStream}.
- */
-public class SharedRandomContentInputStream extends BufferedInputStream implements SharedInputStream
-{
-    private final Set<SharedRandomContentInputStream> createdStreams;
-    private final FileObject fo;
-    private final long fileStart;
-    private final long fileEnd;
-
-    private long pos;
-    private long resetCount;
-
-    private SharedRandomContentInputStream(final Set<SharedRandomContentInputStream> createdStreams,
-                                           final FileObject fo, final long fileStart, final long fileEnd,
-                                           final InputStream is)
-        throws FileSystemException
-    {
-        super(is);
-
-        if (!fo.getFileSystem().hasCapability(Capability.RANDOM_ACCESS_READ))
-        {
-            throw new FileSystemException("vfs.util/missing-capability.error", Capability.RANDOM_ACCESS_READ);
-        }
-
-        this.fo = fo;
-        this.fileStart = fileStart;
-        this.fileEnd = fileEnd;
-        this.createdStreams = createdStreams;
-
-        synchronized (createdStreams)
-        {
-            createdStreams.add(this);
-        }
-    }
-
-    public SharedRandomContentInputStream(final FileObject fo) throws FileSystemException
-    {
-        this(new HashSet<SharedRandomContentInputStream>(), fo, 0, -1, fo.getContent().getInputStream());
-    }
-
-
-    @Override
-    public synchronized int read() throws IOException
-    {
-        if (checkEnd())
-        {
-            return -1;
-        }
-        final int r = super.read();
-        pos++;
-        resetCount++;
-        return r;
-    }
-
-    @Override
-    public synchronized int read(final byte[] b, final int off, int len) throws IOException
-    {
-        if (checkEnd())
-        {
-            return -1;
-        }
-
-        if (fileEnd > -1 && calcFilePosition(len) > fileEnd)
-        {
-            // we can not read past our end
-            len = (int) (fileEnd - getFilePosition());
-        }
-
-        final int nread = super.read(b, off, len);
-        pos += nread;
-        resetCount += nread;
-        return nread;
-    }
-
-    @Override
-    public synchronized long skip(long n) throws IOException
-    {
-        if (checkEnd())
-        {
-            return -1;
-        }
-
-        if (fileEnd > -1 && calcFilePosition(n) > fileEnd)
-        {
-            // we can not skip past our end
-            n = fileEnd - getFilePosition();
-        }
-
-        final long nskip = super.skip(n);
-        pos += nskip;
-        resetCount += nskip;
-        return nskip;
-    }
-
-    /*
-    public synchronized int available() throws IOException
-    {
-        long realFileEnd = fileEnd;
-        if (realFileEnd < 0)
-        {
-            realFileEnd = fo.getContent().getSize();
-        }
-        if (realFileEnd < 0)
-        {
-            // we cant determine if there is really something available
-            return 8192;
-        }
-
-        long available = realFileEnd - (fileStart + pos);
-        if (available > Integer.MAX_VALUE)
-        {
-            return Integer.MAX_VALUE;
-        }
-
-        return (int) available;
-    }
-    */
-
-    private boolean checkEnd()
-    {
-        return fileEnd > -1 && (getFilePosition() >= fileEnd);
-    }
-
-    protected long getFilePosition()
-    {
-        return fileStart + pos;
-    }
-
-    protected long calcFilePosition(final long nadd)
-    {
-        return getFilePosition() + nadd;
-    }
-
-    @Override
-    public synchronized void mark(final int readlimit)
-    {
-        super.mark(readlimit);
-        resetCount = 0;
-    }
-
-    @Override
-    public synchronized void reset() throws IOException
-    {
-        super.reset();
-        pos -= resetCount;
-        resetCount = 0;
-    }
-
-    public long getPosition()
-    {
-        return pos;
-    }
-
-
-    @Override
-    public void close() throws IOException
-    {
-        super.close();
-
-        synchronized (createdStreams)
-        {
-            createdStreams.remove(this);
-        }
-    }
-
-    public InputStream newStream(final long start, final long end)
-    {
-        try
-        {
-            final long newFileStart = this.fileStart + start;
-            final long newFileEnd = end < 0 ? this.fileEnd : this.fileStart + end;
-
-            final RandomAccessContent rac = fo.getContent().getRandomAccessContent(RandomAccessMode.READ);
-            rac.seek(newFileStart);
-            return new SharedRandomContentInputStream(
-                createdStreams,
-                fo,
-                newFileStart,
-                newFileEnd,
-                rac.getInputStream());
-        }
-        catch (final IOException e)
-        {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public void closeAll() throws IOException
-    {
-        synchronized (createdStreams)
-        {
-            final SharedRandomContentInputStream[] streams = new SharedRandomContentInputStream[createdStreams.size()];
-            createdStreams.toArray(streams);
-            for (final SharedRandomContentInputStream stream : streams)
-            {
-                stream.close();
-            }
-        }
-    }
-}
diff --git a/trunk/sandbox/src/main/resources/META-INF/vfs-providers.xml b/trunk/sandbox/src/main/resources/META-INF/vfs-providers.xml
deleted file mode 100644
index 45fb237..0000000
--- a/trunk/sandbox/src/main/resources/META-INF/vfs-providers.xml
+++ /dev/null
@@ -1,33 +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.
-  -->
-<providers>
-
-	<provider class-name="org.apache.commons.vfs2.provider.smb.SmbFileProvider">
-		<scheme name="smb"/>
-		<if-available class-name="jcifs.smb.SmbFile"/>
-	</provider>
-
-	<provider class-name="org.apache.commons.vfs2.provider.mime.MimeFileProvider">
-		<scheme name="mime"/>
-		<if-available class-name="javax.mail.internet.MimeMultipart"/>
-	</provider>
-
-	<extension-map extension="mime" scheme="mime"/>
-	<mime-type-map mime-type="message/rfc822" scheme="mime"/>
-
-</providers>
diff --git a/trunk/sandbox/src/site/site.xml b/trunk/sandbox/src/site/site.xml
deleted file mode 100644
index 6c554a8..0000000
--- a/trunk/sandbox/src/site/site.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT 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="Commons&#xA0;VFS">
-
-  <bannerRight>
-    <name>Commons&#xA0;VFS</name>
-    <src>../images/vfs-logo-white.png</src>
-    <href>../index.html</href>
-  </bannerRight>
-
-  <body>
-    <links>
-      <item name="Commons VFS Home" href="../index.html"/>
-    </links>
-
-    <!-- menu inherited -->
-
-    <menu ref="reports"/>
-  </body>
-</project>
diff --git a/trunk/sandbox/src/site/xdoc/index.xml b/trunk/sandbox/src/site/xdoc/index.xml
deleted file mode 100644
index 62bd0fe..0000000
--- a/trunk/sandbox/src/site/xdoc/index.xml
+++ /dev/null
@@ -1,47 +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.

--->

-

-<document>

-    <properties>

-        <title>Apache Commons VFS Sandbox</title>

-        <author email="dev@commons.apache.org">Apache Commons Developers</author>

-    </properties>

-

-    <body>

-

-      <section name="About Apache Commons VFS Sandbox">

-        <p>

-          This sandbox module contains VFS packages (<a href="../filesystems.html">filesystem

-          providers</a>) which cannot be shipped with the official Apache release.

-          This includes experimental code as well as components which have 

-          <a href="dependencies.html">dependencies</a> not compatible with the 

-          <a href="http://www.apache.org/legal/resolved.html#category-x">ASF redistribution policy

-          (especially LGPL)</a>.

-        </p><p>

-          To build the sandbox binaries, see the <a href="../download.html">download and build

-          instructions</a>.

-          Make sure to enable the sandbox maven profile with <code>-Pinclude-sandbox</code>.

-          If you use <code>mvn install</code> the sandbox binary archive can be used from

-          the local repository. If you are not using the released source archive, you may have

-          to adjust the parent-version and version-numbers if you want to avoid SNAPSHOT

-          artifacts.

-        </p>

-      </section>

-

-    </body>

-</document>

diff --git a/trunk/sandbox/src/test/java/org/apache/commons/vfs2/provider/smb/test/FileNameTestCase.java b/trunk/sandbox/src/test/java/org/apache/commons/vfs2/provider/smb/test/FileNameTestCase.java
deleted file mode 100644
index 585836e..0000000
--- a/trunk/sandbox/src/test/java/org/apache/commons/vfs2/provider/smb/test/FileNameTestCase.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.commons.vfs2.provider.smb.test;
-
-import org.apache.commons.AbstractVfsTestCase;
-import org.apache.commons.vfs2.FileSystemException;
-import org.apache.commons.vfs2.provider.smb.SmbFileName;
-import org.apache.commons.vfs2.provider.smb.SmbFileNameParser;
-
-/**
- * Some additional SMB file name test cases.
- */
-public class FileNameTestCase
-    extends AbstractVfsTestCase
-{
-    /**
-     * Tests parsing a URI into its parts.
-     * @throws Exception in case of error
-     */
-    public void testParseUri() throws Exception
-    {
-        // Simple name
-        SmbFileName name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://hostname/share/file");
-        assertEquals("smb", name.getScheme());
-        assertNull(name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(139, name.getPort());
-        assertEquals(name.getDefaultPort(), name.getPort());
-        assertEquals("share", name.getShare());
-        assertEquals("/file", name.getPath());
-        assertEquals("smb://hostname/share/", name.getRootURI());
-        assertEquals("smb://hostname/share/file", name.getURI());
-
-        // Name with port
-        name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://hostname:9090/share/file");
-        assertEquals("smb", name.getScheme());
-        assertNull(name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(9090, name.getPort());
-        assertEquals("share", name.getShare());
-        assertEquals("/file", name.getPath());
-        assertEquals("smb://hostname:9090/share/", name.getRootURI());
-        assertEquals("smb://hostname:9090/share/file", name.getURI());
-
-        // Name with no path
-        name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://hostname/share");
-        assertEquals("smb", name.getScheme());
-        assertNull(name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(139, name.getPort());
-        assertEquals("share", name.getShare());
-        assertEquals("/", name.getPath());
-        assertEquals("smb://hostname/share/", name.getRootURI());
-        assertEquals("smb://hostname/share/", name.getURI());
-
-        // Name with username
-        name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://user@hostname/share/file");
-        assertEquals("smb", name.getScheme());
-        assertEquals("user", name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(139, name.getPort());
-        assertEquals("share", name.getShare());
-        assertEquals("/file", name.getPath());
-        assertEquals("smb://user@hostname/share/", name.getRootURI());
-        assertEquals("smb://user@hostname/share/file", name.getURI());
-
-        // Name with extension
-        name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://user@hostname/share/file.txt");
-        assertEquals("smb", name.getScheme());
-        assertEquals("user", name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(139, name.getPort());
-        assertEquals("share", name.getShare());
-        assertEquals("/file.txt", name.getPath());
-        assertEquals("file.txt", name.getBaseName());
-        assertEquals("txt", name.getExtension());
-        assertEquals("smb://user@hostname/share/", name.getRootURI());
-        assertEquals("smb://user@hostname/share/file.txt", name.getURI());
-
-        // Name look likes extension, but isnt
-        name = (SmbFileName) SmbFileNameParser.getInstance().parseUri(null, null, "smb://user@hostname/share/.bashrc");
-        assertEquals("smb", name.getScheme());
-        assertEquals("user", name.getUserName());
-        assertNull(name.getPassword());
-        assertEquals("hostname", name.getHostName());
-        assertEquals(139, name.getPort());
-        assertEquals("share", name.getShare());
-        assertEquals("/.bashrc", name.getPath());
-        assertEquals(".bashrc", name.getBaseName());
-        assertEquals("", name.getExtension());
-        assertEquals("smb://user@hostname/share/", name.getRootURI());
-        assertEquals("smb://user@hostname/share/.bashrc", name.getURI());
-    }
-
-    /**
-     * Tests error handling in URI parser.
-     * @throws Exception in case of error
-     */
-    public void testBadlyFormedUri() throws Exception
-    {
-        // Does not start with smb://
-        testBadlyFormedUri("smb:", "vfs.provider/missing-double-slashes.error");
-        testBadlyFormedUri("smb:/", "vfs.provider/missing-double-slashes.error");
-        testBadlyFormedUri("smb:a", "vfs.provider/missing-double-slashes.error");
-
-        // Missing hostname
-        testBadlyFormedUri("smb://", "vfs.provider/missing-hostname.error");
-        testBadlyFormedUri("smb://:21/share", "vfs.provider/missing-hostname.error");
-        testBadlyFormedUri("smb:///share", "vfs.provider/missing-hostname.error");
-
-        // Empty port
-        testBadlyFormedUri("smb://host:", "vfs.provider/missing-port.error");
-        testBadlyFormedUri("smb://host:/share", "vfs.provider/missing-port.error");
-        testBadlyFormedUri("smb://host:port/share/file", "vfs.provider/missing-port.error");
-
-        // Missing absolute path
-        testBadlyFormedUri("smb://host:90a", "vfs.provider/missing-hostname-path-sep.error");
-        testBadlyFormedUri("smb://host?a", "vfs.provider/missing-hostname-path-sep.error");
-
-        // Missing share name
-        testBadlyFormedUri("smb://host", "vfs.provider.smb/missing-share-name.error");
-        testBadlyFormedUri("smb://host/", "vfs.provider.smb/missing-share-name.error");
-        testBadlyFormedUri("smb://host:9090/", "vfs.provider.smb/missing-share-name.error");
-    }
-
-    /**
-     * Assert that parsing a URI fails with the expected error.
-     */
-    private void testBadlyFormedUri(final String uri, final String errorMsg)
-    {
-        try
-        {
-            SmbFileNameParser.getInstance().parseUri(null, null, uri);
-            fail();
-        }
-        catch (final FileSystemException e)
-        {
-            assertSameMessage(errorMsg, uri, e);
-        }
-    }
-}
diff --git a/trunk/sandbox/src/test/java/org/apache/commons/vfs2/provider/smb/test/SmbProviderTestCase.java b/trunk/sandbox/src/test/java/org/apache/commons/vfs2/provider/smb/test/SmbProviderTestCase.java
deleted file mode 100644
index 1ad9820..0000000
--- a/trunk/sandbox/src/test/java/org/apache/commons/vfs2/provider/smb/test/SmbProviderTestCase.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.commons.vfs2.provider.smb.test;
-
-import junit.framework.Test;
-
-import org.apache.commons.vfs2.FileObject;
-import org.apache.commons.vfs2.FileSystemManager;
-import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
-import org.apache.commons.vfs2.provider.smb.SmbFileProvider;
-import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestConfig;
-import org.apache.commons.vfs2.test.ProviderTestSuite;
-
-/**
- * Tests for the SMB file system.
- */
-public class SmbProviderTestCase
-    extends AbstractProviderTestConfig
-    implements ProviderTestConfig
-{
-    private static final String TEST_URI = "test.smb.uri";
-    public static Test suite() throws Exception
-    {
-        if (System.getProperty(TEST_URI) != null)
-        {
-            return new ProviderTestSuite(new SmbProviderTestCase());
-        }
-        else
-        {
-            return notConfigured(SmbProviderTestCase.class);
-        }
-    }
-
-    /**
-     * Prepares the file system manager.
-     */
-    @Override
-    public void prepare(final DefaultFileSystemManager manager)
-        throws Exception
-    {
-        manager.addProvider("smb", new SmbFileProvider());
-    }
-
-    /**
-     * Returns the base folder for tests.
-     */
-    @Override
-    public FileObject getBaseTestFolder(final FileSystemManager manager) throws Exception
-    {
-        final String uri = System.getProperty(TEST_URI);
-        return manager.resolveFile(uri);
-    }
-}
diff --git a/trunk/src/changes/changes.xml b/trunk/src/changes/changes.xml
deleted file mode 100644
index 0700dc1..0000000
--- a/trunk/src/changes/changes.xml
+++ /dev/null
@@ -1,599 +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.
--->
-<document xmlns="http://maven.apache.org/changes/1.0.0">
-  <properties>
-    <title>Apache Commons VFS Changes</title>
-    <author email="dev@commons.apache.org">Apache Commons Developers</author>
-  </properties>
-
-  <body>
-    <release version="2.1" date="TBD" description="New features and bug fix release.">
-<!--       <action issue="VFS-443" dev="ggregory" type="update" due-to="nickallen"> -->
-<!--        [Local] Need an easy way to convert from a FileObject to a File. -->
-<!--       </action> -->
-     <action issue="VFS-424" dev="ecki" type="fix">
-        Fix StandardFileSystemManager class loading so it works in a OSGi environment.
-     </action>
-      <action issue="VFS-490" dev="ecki" type="fix">
-        [vfsclassloader] Do not open folders with .jar extension. Adds tests.
-     </action>
-      <action issue="VFS-582" dev="ecki" type="fix">
-        [tests] revert rename of getTestDirectoryFile to make test classes more compatible for external providers.
-     </action>
-      <action issue="VFS-480" dev="ecki" type="fix">
-        Make startup of SoftRefsFileCache cleaner thread work and less racy to avoid leaks.
-     </action>
-      <action issue="VFS-549" dev="ecki" type="fix">
-        Use File.seperator instead of getProperty("file.separator").
-     </action>
-      <action issue="VFS-567" dev="ecki" type="fix" due-to="Antonio Petrelli">
-        [ftp] Ignore exceptions while QUIT/disconnect.
-     </action>
-      <action issue="VFS-572" dev="ecki" type="fix" due-to="Sandra Parsick">
-        [sftp] better documentation for knownhosts file option.
-     </action>
-      <action issue="VFS-574" dev="ecki" type="fix">
-        Ensure FileOpertionProviders are closed. Adds some testcases.
-        The error code for missing operations exceptions corrected: vfs.operation/operation-not-supported.error
-     </action>
-      <action issue="VFS-279" dev="ecki" type="fix" due-to="Didier Earith, Simon Legner">
-        [local] Avoid ClassCastException when replicating local files while OnCall caching is active.
-      </action>
-      <action issue="VFS-297" dev="joehni" type="fix" due-to="Kirill Safonov, Jimmy Praet">
-        [sftp] VSF fails to reuse FileSystem instances if FileSystemOptions contain
-        an array as value. Reported for SFTP using identities.
-      </action>
-      <action issue="VFS-198" dev="ecki" type="add" due-to="Andrew Franklin, Simon Legner">
-        [http] Make user agent configurable.
-      </action>
-      <action issue="VFS-202" dev="ecki" type="fix" due-to="Sergey Vladimirov, Simon Legner">
-        [http] Allow URLs responding with 405 to HEAD requests.
-      </action>
-      <action issue="VFS-490" dev="ecki" type="fix">
-        [hdfs] Make OSGi package imports for hdfs resolution=optional.
-        Removed all scopes from dependency management.
-      </action>
-      <action issue="VFS-560" dev="ecki" type="fix">
-        [http] avoid initial HEAD request to root of HttpFileSystem as it might be wrong context.
-      </action>
-      <action issue="VFS-236" dev="ecki" type="fix" due-to="Matt Casters">
-        [smb] Allow SMB to be used with no authentication.
-      </action>
-      <action issue="VFS-564" dev="ecki" type="fix" due-to="Dmitry Konstantinov">
-        Make some loggers static.
-      </action>
-      <action issue="VFS-555" dev="rwhitcomb" type="add">
-        [hdfs] Add the ability to specify an HDFS configuration file with HdfsFileSystemConfigBuilder.
-      </action>
-      <action issue="VFS-557" dev="ecki" type="fix">
-       [webdav][test] Create WebDav test directory in target/test. Avoid creating core/jackrabbit/tmp.
-       Logfiles of Jackrabbit are preserved when -DWebdavProviderTestCase.Debug=true is specified.
-      </action>
-      <action issue="VFS-558" dev="ecki" type="fix">
-       Make moveTo() and getParent() work with CacheStrategy.ON_CALL.
-       In case of FTP Provider it would lead otherwise to an UnsupportedOperationException.
-      </action>
-      <action dev="ecki" type="fix">
-       [sandbox] RACRandomAccessFile is now in org.apache.commons.vfs2.util package (so sandbox has only one overlapping package).
-      </action>
-      <action issue="VFS-530" dev="ecki" type="update" due-to="Dave Marion">
-       [hdfs] Use stable Apache Hadoop 2.6 dependencies.
-      </action>
-      <action dev="ecki" type="add">
-       [example] make VFS Shell print version and implement new 'info' command.
-      </action>
-      <action issue="VFS-552" dev="ecki" type="fix">
-       [sandbox] include vfs-providers.xml in JAR for dynamic registration of mime and smb providers.
-      </action>
-      <action issue="VFS-551" dev="ecki" type="fix" due-to="David Camilo Espitia Manrique">
-       Javadoc: make it clear that DefaultCryptor is only an obfuscation function.
-      </action>
-      <action issue="VFS-309" dev="ecki" type="fix">
-       DefaultFileContent will remove thread data whenever possible to avoid leaks.
-      </action>
-      <action issue="VFS-487" dev="ecki" type="fix" due-to="Dave Marion">
-       DefaultFileMonitor detects recreated files.
-      </action>
-      <action issue="VFS-523" dev="ecki" type="fix" due-to="Roger Whitcomb">
-       [HDFS] Make HdfsFileObject.equal use system hashcode/equals instead of
-       wrongly comparing file path only.
-      </action>
-      <action issue="VFS-544" dev="ecki" type="fix">
-       [Virtual] Allow virtual file systems and virtual file system provider
-       to be closed, to avoid memory leak.
-      </action>
-      <action issue="VFS-142" dev="ecki" type="fix" due-to="Ryan Boettcher">
-       Use ThreadLocal.remove() to clean out FileContentThreadData objects.
-      </action>
-      <action issue="VFS-545" dev="ecki" type="fix">
-       Make DefaultFilesCache remove reference to filesystem when it is cleared (closed).
-      </action>
-      <action issue="VFS-521" dev="ecki" type="fix">
-       [Ram][Tests] Make RAM provider test pass on Java 8
-       (JDK-8042377, self-suppression not permitted, MonitorOutputStream#close()).
-      </action>
-      <action issue="VFS-601" dev="ggregory" type="update">
-       Update Apache Commons Net from 3.3 to 3.4.
-      </action>
-      <action issue="VFS-602" dev="ggregory" type="update">
-       Update Apache Commons IO from 2.4 to 2.5.
-      </action>
-      <action issue="VFS-579" dev="ggregory" type="update">
-       Update Jsch from 0.1.51 to 0.1.53.
-      </action>
-      <action issue="VFS-542" dev="ggregory" type="update">
-       Update Jsch from 0.1.50 to 0.1.51.
-      </action>
-      <action issue="VFS-578" dev="ggregory" type="update">
-       Update Apache Commons Compress from 1.9 to 1.10.
-      </action>
-      <action issue="VFS-541" dev="ggregory" type="update">
-       Update Apache Commons Compress from 1.6 to 1.9.
-      </action>
-      <action issue="VFS-540" dev="ggregory" type="update">
-       Update Apache Commons Logging from 1.1.3 to 1.2.
-      </action>
-      <action issue="VFS-539" dev="ggregory" type="update">
-       Update Apache Commons Lang from 3.1 to 3.3.2.
-      </action>
-      <action issue="VFS-532" dev="ggregory" type="add" due-to="Gareth Daniel Smith">
-       [FTP] Allow configuring remoteVerificationEnabled on FTPClient instances.
-      </action>
-      <action issue="VFS-338" dev="ecki" type="fix" due-to="Daniel R.">
-       [Local][Tests] Avoid IndexOutOfBoundsException when validating local file URIs.
-      </action>
-      <action issue="VFS-526" dev="ecki" type="update">
-       [HDFS][Tests] Support HDFS testing on Windows (but keep profile "no-hdfs" enabled on Windows VFS-529).
-      </action>
-      <action issue="VFS-453" dev="ecki" type="update" due-to="Jiri Syrovy">
-       [HTTP][WEBDAV] Add file system options for connect and socket timeout.
-      </action>
-      <action issue="VFS-167" dev="ecki" type="update" due-to="Jimmy Praet">
-       [FTP] Allow Proxy support to file system options.
-      </action>
-      <action issue="VFS-520" dev="ecki" type="update">
-       Make JavaDoc compatible with Java 8 tool.
-      </action>
-      <action issue="VFS-518" dev="ggregory" type="update" due-to="Roland Illig">
-        Documentation of FileSystemOptions should be more helpful.
-      </action>
-      <action issue="VFS-500" dev="ggregory" type="update" due-to="Bernd Eckenfels">
-        VFSClassLoader.findResources missing.
-      </action>
-      <action issue="VFS-514" dev="ggregory" type="update" due-to="Bernd Eckenfels">
-        [tests] PermissionsTests leaves unclean test directory.
-      </action>
-      <action issue="VFS-501" dev="ggregory" type="update" due-to="Yves Schumann">
-        Hide passwords from log/console output.
-      </action>
-      <action issue="VFS-496" dev="ggregory" type="update" due-to="Bernd Eckenfels">
-        Resource translation issues.
-      </action>
-      <action issue="VFS-494" dev="ggregory" type="update" due-to="Allen Xudong Cheng">
-        [SFTP] No support for SFTP servers with non Latin-1 file name encoding.
-      </action>
-      <action issue="VFS-368" dev="ggregory" type="update" due-to="Brendan Long">
-        [SFTP] Documentation implies that "userDirIsRoot" defaults to true.
-      </action>
-      <action issue="VFS-265" dev="ggregory" type="update" due-to="Scott Bjerstedt">
-        [FTP] Set user dir as root dir by default.
-      </action>
-      <action issue="VFS-489" dev="ggregory" type="fix" due-to="Bernd Eckenfels">
-        [tests] ProviderWriteTests#testListener does not fail cleanly.
-      </action>
-      <action issue="VFS-486" dev="ggregory" type="fix" due-to="Sam Haldane">
-        DefaultFileMonitor sleeps for twice the specified delay when checkPerRun > 0.
-      </action>
-      <action issue="VFS-484" dev="ggregory" type="update">
-        [SFTP] Update Jsch to 0.1.50 from 0.1.49.
-      </action>
-      <action issue="VFS-482" dev="ggregory" type="fix">
-        Wrong assertion messages in RAM provider test case.
-      </action>
-      <action issue="VFS-507" dev="ggregory" type="update">
-        Update to Apache Commons Collection 4.1 from 3.2.1 and use generics.
-      </action>
-      <action issue="VFS-476" dev="ggregory" type="update">
-        Update Apache Commons Logging to 1.1.3 from 1.1.2.
-      </action>
-      <action issue="VFS-475" dev="ggregory" type="update">
-        Update Apache Commons Net to 3.3 from 3.2.
-      </action>
-      <action issue="VFS-506" dev="ggregory" type="update">
-        [Tar][Bzip2] Update Apache Commons Compress to 1.6 from 1.5.
-      </action>
-      <action issue="VFS-471" dev="ggregory" type="update">
-        Update to Apache Commons Compress 1.5.
-      </action>
-      <action issue="VFS-469" dev="joehni" type="remove">
-        Remove unused dependency to javax.jcr:jcr.
-      </action>
-      <action issue="VFS-283" dev="joehni" type="update">
-        [SFTP] SFTP provider did not support passphrase-protected keys nor the exchange of a public key with
-        a requesting SFTP server. To support such triples (private key/passphrase/public key) instead of private
-        keys only, a new structure EntityInfo has been created. SftpFileSystemConfigBuilder has now the new
-        getter and setter methods getIdentityInfo and setIdentity info which replace the now deprecated methods
-        getIdentities and setIdentities.
-      </action>
-      <action issue="VFS-460" dev="joehni" type="fix">
-        Dependency to commons-compress set as optional.
-      </action>
-      <action issue="VFS-468" dev="joehni" type="add">
-        [FTPS] Add option for KeyManager (and TrustManager) to support FTPS servers that ask for the client certificate for authentication.
-      </action>
-      <action issue="VFS-464" dev="joehni" type="fix">
-        StaticUserAuthenticator should return only requested authentication data.
-      </action>
-      <action issue="VFS-463" dev="joehni" type="update">
-        FileSytemConfigBuilder supports system properties for the value of enum-based configuration entries.
-      </action>
-      <action issue="VFS-462" dev="joehni" type="update">
-        [FTPS] Deprecate FtpsFileSystemConfigBuilder.setFtpsType and FtpsFileSystemConfigBuilder.getFtpsType
-        in favor of FtpsFileSystemConfigBuilder.setFtpsMode and FtpsFileSystemConfigBuilder.getFtpsMode which
-        use new enum FtpsMode instead.
-      </action>
-      <action issue="VFS-461" dev="joehni" type="fix">
-        [FTP/FTPS] ConfigBuilder does not consider system properties for the value of SoTimeout and Encoding.
-      </action>
-      <action issue="VFS-412" dev="joehni" type="add" due-to="Jose Juan Montiel">
-        [FTPS] Add support for command to set the DataChannelProtectionLevel.
-      </action>
-      <action issue="VFS-459" dev="joehni" type="update">
-        [FTP/FTPS] Sent commands and the received answer is logged at debug level.
-      </action>
-      <action issue="VFS-458" dev="joehni" type="fix">
-        [FTPS] Provider missed functionality and bug fixes already available for the FTP provider.
-      </action>
-      <action issue="VFS-452" dev="ggregory" type="fix" due-to="Jean-Marc Borer">
-        [HTTP] HttpFileObject read/write attributes should reflect underlying FileSystem capabilities.
-      </action>
-      <action issue="VFS-285" dev="tn" type="fix" due-to="Kirill Safonov">
-        AbstractFileObject.getChildren() may corrupt its internal state if a filename
-        can not be resolved.
-      </action>
-      <action issue="VFS-450" dev="ggregory" type="fix" due-to="Dave Marion">
-        [HDFS] HDFSFileSystem.resolveFile() does not honor CacheStrategy.ON_RESOLVE.
-      </action>
-      <action issue="VFS-442" dev="ggregory" type="add" due-to="Dave Marion">
-        [HDFS] Add an HDFS FileSystem Provider.
-      </action>
-      <action issue="VFS-448" dev="ggregory" type="fix">
-        commons-vfs 2.0 JAR has flawed OSGi MANIFEST.MF.
-      </action>
-      <action issue="VFS-447" dev="ggregory" type="add">
-        [FTP/FTPS] Update Apache Commons Net to 3.2 from 3.1.
-      </action>
-      <action issue="VFS-445" dev="ggregory" type="add">
-        Add FileSystemManager.resolveFile(URI) and resolveFile(URL).
-      </action>
-      <action issue="VFS-440" dev="ggregory" type="add" due-to="bpiwowar">
-        [SFTP] Stream (e.g. netcat) proxy for Sftp file system (aka ProxyCommand).
-      </action>
-      <action issue="VFS-439" dev="ggregory" type="fix" due-to="pensecit">
-        StaticUserAuthenticator usage example wrong.
-      </action>
-      <action issue="VFS-437" dev="ggregory" type="fix" due-to="denniszhu, danttran, jpowang">
-        [FTP] StackOverFlowError getting the type of a directory with a symbolic link to a parent directory with the same name.
-      </action>
-      <action issue="VFS-435" dev="ggregory" type="fix" due-to="george scott">
-        FileSystemConfigBuilder does not use prefix for some system property lookups.
-      </action>
-      <action issue="VFS-434" dev="ggregory" type="fix">
-        FileSystemException should reuse IOException's chained exception.
-      </action>
-      <action issue="VFS-433" dev="ggregory" type="fix">
-        [WebDAV] Message "vfs.provider.webdav/propfind.error" is not defined.
-      </action>
-      <action issue="VFS-430" dev="ggregory" type="fix" due-to="antonin.stefanutti">
-        The SoftRefFilesCache class logs clear text password.
-      </action>
-      <action issue="VFS-432" dev="ggregory" type="add">
-        [HTTP][WebDAV] Allow HTTP follow redirect.
-      </action>
-      <action issue="VFS-431" dev="ggregory" type="add">
-        FileSystemOption does not implement toString().
-      </action>
-      <action issue="VFS-429" dev="ggregory" type="fix">
-        Remove extra FileSystem ivar in AbstractFileObject subclasses with generics.
-      </action>
-      <action issue="VFS-427" dev="ggregory" type="fix" due-to="awelynant">
-        [HTTP] NPE on HttpFileObject.getContent().getContentInfo().
-      </action>
-      <action issue="VFS-405" dev="ggregory" type="add" due-to="dwaszak">
-        Get/set the file permissions.
-      </action>
-      <action issue="VFS-457" dev="joehni" type="update">
-        Update test dependencies: sshd-core version 0.7.0 to 0.8.0; mina-core 2.0.4 to 2.0.7; junit 4.11 to 4.12; slf4j-* 1.5.5 to 1.5.11
-      </action>
-      <action issue="VFS-456" dev="joehni" type="update">
-        Use org.bouncycastel:bcprov-jdk16 instead of org.bouncycastle:bcprof-jdk15on since Java 1.6 is required.
-      </action>
-      <action issue="VFS-415" dev="ggregory" type="update">
-        Update VFS requirement to Java 1.6.
-      </action>
-      <action issue="VFS-426" dev="ggregory" type="add" due-to="daniel.bergholm">
-        HTTP URL query string not part of cache key.
-      </action>
-      <action issue="VFS-425" dev="ggregory" type="add">
-        Add API FileObject.isExecutable().
-      </action>
-      <action issue="VFS-421" dev="ggregory" type="add" due-to="bpiwowar">
-        [SFTP] Configure a custom Identity Repository.
-      </action>
-      <action issue="VFS-418" dev="ggregory" type="update">
-        Update to Apache Commons Compress 1.4.1.
-      </action>
-      <action issue="VFS-417" dev="ggregory" type="add">
-        [RAM][Local] Add and implement new API: RandomAccessContent.setLength(long).
-      </action>
-      <action issue="VFS-406" dev="ggregory" type="fix" due-to="mp1">
-        [RAM] resize throws ArrayOOBE when shrinking in size.
-      </action>
-      <action issue="VFS-321" dev="ggregory" type="update" due-to="sebb">
-        AbstractFileObject sometimes uses getFileSystem() and sometimes references "fs" field directly.
-      </action>
-      <action issue="VFS-327" dev="ggregory" type="update" due-to="sebb">
-        UriParser.canonicalizePath possible NPE for filenameParser.
-      </action>
-      <action issue="VFS-353" dev="ggregory" type="fix" due-to="bergander">
-        [FTP] Client should call logout before disconnecting.
-      </action>
-      <action issue="VFS-408" dev="ggregory" type="fix" due-to="anilm2@yahoo.com">
-        CompressedFileFileObject Exception thrown when container file has no extension.
-      </action>
-      <action issue="VFS-400" dev="ggregory" type="add">
-        Add a FileSelector based on regular expressions.
-      </action>
-      <action issue="VFS-258" dev="ggregory" type="fix" due-to="mzawirski">
-        [SFTP][RAM] Unsafe casting to AbstractFileObject subclasses in doRename().
-      </action>
-      <action issue="VFS-254" dev="ggregory" type="add" due-to="mzawirski">
-        Let FileObject and FileContent extend java.io.Closeable.
-      </action>
-      <action issue="VFS-413" dev="ggregory" type="fix" due-to="polivenok">
-        [FTP] No support for FTP servers with non Latin-1 control encoding.
-      </action>
-      <action issue="VFS-252" dev="ggregory" type="add">
-        [SMB] SmbFileObject does not support setLastModifiedTime while jcifs supports it.
-      </action>
-      <action issue="VFS-200" dev="ggregory" type="fix">
-        [SFTP] Failure when files are very large.
-      </action>
-      <action issue="VFS-416" dev="joehni" type="update">
-        [SFTP] Update Jsch to version 0.1.49 from 0.1.47.
-      </action>
-      <action issue="VFS-296" dev="ggregory" type="fix" due-to="andreasp">
-        [FTP] FTP socket timeout setting doesn't work if connect hangs.
-      </action>
-      <action issue="VFS-313" dev="ggregory" type="add" due-to="bdavis@saintandreas.org">
-        [FTP] Configuration does not include option for setting socket timeout.
-      </action>
-      <action issue="VFS-414" dev="ggregory" type="add">
-        [FTP] Add config API to set the file type.
-      </action>
-      <action issue="VFS-182" dev="ggregory" type="add">
-        [FTP] Usage of FTP with heterogeneous FTP server (possibility of using Ascii file type).
-      </action>
-      <action issue="VFS-395" dev="ggregory" type="update">
-        [POM] Remove maven-scm-* dependencies.
-      </action>
-      <action issue="VFS-411" dev="ggregory" type="update">
-        [SFTP] Update Jsch to version 0.1.47 from 0.1.46.
-      </action>
-      <action issue="VFS-410" dev="ggregory" type="fix" due-to="mstockhammer">
-        [SFTP] SftpFileObject getInputStream(long) reads the whole file into memory.
-      </action>
-      <action issue="VFS-409" dev="ggregory" type="update">
-        Update Apache Commons Compress to 1.4 from 1.3.
-      </action>
-      <action issue="VFS-407" dev="ggregory" type="fix" due-to="mp1">
-        [RAM] Reading a RAM FileSystem file fails because it never returns EOF -1.
-      </action>
-      <action issue="VFS-404" dev="ggregory" type="update">
-        [FTP][FTPS] Update Apache Commons Net to 3.1 from 3.0.1.
-      </action>
-      <action issue="VFS-402" dev="ggregory" type="update">
-        [WebDAV] Update Apache Jackrabbit 1.5.2 to 1.6.5.
-      </action>
-      <action issue="VFS-401" dev="ggregory" type="update">
-        Update JSch to 0.1.46 from 0.1.45 for the SFTP provider.
-      </action>
-      <action issue="VFS-392" dev="ggregory" type="update">
-        Build tests WebDAV file system with an embedded WebDAV server (Apache Jackrabbit).
-      </action>
-      <action issue="VFS-391" dev="ggregory" type="update">
-        Build tests URL HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
-      </action>
-      <action issue="VFS-390" dev="ggregory" type="update">
-        Use variable argument list in org.apache.commons.vfs2.util.Messages instead of Object[].
-      </action>
-      <action issue="VFS-389" dev="ggregory" type="update">
-        Use variable argument lists in FileSystemException instead of Object[]s.
-      </action>
-      <action issue="VFS-388" dev="ggregory" type="update">
-        Build tests SFTP file system with an embedded SFTP server (Apache MINA).
-      </action>
-      <action issue="VFS-387" dev="ggregory" type="update">
-        Build tests FTP file system with an embedded FTP server (Apache MINA).
-      </action>
-      <action issue="VFS-386" dev="ggregory" type="update">
-        Build tests HTTP file system with an embedded HTTP server (Apache HttpComponent Core).
-      </action>
-      <action issue="VFS-385" dev="ggregory" type="update">
-        Add HTTP status code to HTTP file provider exception messages when available.
-      </action>
-      <action issue="VFS-384" dev="ggregory" type="update">
-        Update Apache Commons Net to 3.0.1 from 2.2 for FTP and SFTP providers.
-      </action>
-      <action issue="VFS-383" dev="ggregory" type="update">
-        Update JSch to 0.1.45 from 0.1.42 for the SFTP provider.
-      </action>
-      <action issue="VFS-382" dev="ggregory" type="fix">
-        SFTP getChildren() does not fail when called on a file.
-      </action>
-      <action issue="VFS-381" dev="ggregory" type="add">
-        Iterate over a FileObject using the Java "foreach" statement, to provide all descendents of a FileObject.
-      </action>
-      <action issue="VFS-380" dev="ggregory" type="fix">
-        FTP connect.error message used instead of SFTP connect.error message.
-      </action>
-      <action issue="VFS-379" dev="ggregory" type="update">
-        Replace custom BZIP2 code with Apache Commons Compress 1.3.
-      </action>
-      <action issue="VFS-378" dev="ggregory" type="fix">
-        Tar error message are missing from resource file.
-      </action>
-      <action issue="VFS-377" dev="ggregory" type="update">
-        Replace custom TAR code with Apache Commons Compress 1.3.
-      </action>
-      <action issue="VFS-375" dev="ggregory" type="update">
-        Upgrade to Apache Commons Compress 1.3 from 1.2.
-      </action>
-      <action issue="VFS-374" dev="ggregory" type="fix">
-        Incorrect lazy initialization of static field org.apache.commons.vfs2.util.Messages.resources in org.apache.commons.vfs2.util.Messages.findMessage(String)Add FileContent write APIs.
-      </action>
-      <action issue="VFS-373" dev="ggregory" type="add">
-        Add FileContent write APIs.
-      </action>
-      <action issue="VFS-372" dev="ggregory" type="add">
-        Add constructors FileDepthSelector() and FileDepthSelector(int).
-      </action>
-      <action issue="VFS-371" dev="ggregory" type="add">
-        Add FileObject API deleteAll().
-      </action>
-      <action issue="VFS-370" dev="ggregory" type="add">
-        Add a FileExtensionSelector class.
-      </action>
-      <action issue="VFS-367" dev="ggregory" type="add">
-        Add APIs FileObject isFile(), FileObject isFolder(), and FileName isFile().
-      </action>
-      <action issue="VFS-366" dev="ggregory" type="update">
-        Can't sort a List of FileObject's, FileObject to implement Comparable&lt;FileObject&gt;.
-      </action>
-      <action issue="VFS-341" dev="rgoers" type="update" due-to="Rajika Kumarasiri">
-        Enable logging of JSch using the Commons Logging Log object in SftpClientFactory.
-      </action>
-      <action issue="VFS-355" dev="rgoers" type="fix" due-to="Miroslav Pokorny">
-        The read method of RamFileRandomAccessContent's input stream does not return -1 at eof.
-      </action>
-      <action issue="VFS-356" dev="rgoers" type="fix">
-        Throw an IOException if an attempt is made to seek to a position before the start of the file.
-      </action>
-      <action issue="VFS-359" dev="rgoers" type="fix" due-to="Miroslav Pokorny">
-        Don't delete a RamFileObject if it is open.
-      </action>
-      <action issue="VFS-352" dev="rgoers" type="fix">
-        ZipFileSystem now uses an internal Map as a cache for all the files in the zip archive.
-      </action>
-      <action issue="VFS-351" dev="rgoers" type="fix" due-to="John Backstrand">
-        Chain the SftpException in the FileSystemException.
-      </action>
-      <action issue="VFS-361" dev="rgoers" type="update">
-        Upgrade commons collections version to 3.2.1.
-      </action>
-      <action issue="VFS-325" dev="rgoers" type="fix" due-to="Larry Reeve">
-        Allow # character in file names.
-      </action>
-      <action issue="VFS-335" dev="rgoers" type="fix">
-        Use atomic variables in MonitorInputStream.
-      </action>
-      <action issue="VFS-364" dev="rgoers" type="fix">
-        Check the href in the response for just a path in addition to a full uri.
-      </action>
-    </release>
-    <release version="2.0" date="2011-08-24" description="Backwards incompatible update of Commons VFS to Java 5">
-      <action issue="VFS-348" dev="rgoers" type="fix" due-to="Stefan Bodewig">
-        Update the version of commons-net.
-      </action>
-      <action issue="VFS-230" dev="rgoers" type="fix">
-        Documented FileSystem capabilities on the web site.
-      </action>
-      <action issue="VFS-337" dev="rgoers" type="fix">
-        AbstractFileObject and classes that extend from it use AbstractFileName in the constructor and in
-        the createFile method.
-      </action>
-       <action issue="VFS-245" dev="rgoers" type="fix">
-        AbstractFileName is not immutable as it should be. equals(), hashcode() and compareTo() have been modified
-        to return the same results regardless of whether the FileType is changed.
-      </action>
-      <action issue="VFS-334" dev="sebb" type="fix">
-        DefaultFileSystemConfigBuilder.getConfigClass() returns DefaultFileSystemConfigBuilder.class which is not a FileSystem
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-305" due-to="Tom">
-        Add encoding option to FTP provider.
-      </action>
-       <action dev="rgoers" type="fix" issue="VFS-315" due-to="David Hausladen">
-        Fix potential NullPointerException if the DavProperty is null or contains null values.
-      </action>
-       <action dev="rgoers" type="fix" issue="VFS-316" due-to="David Hausladen">
-        Add option for preemptive authentication for HTTP based protocols.
-      </action>
-       <action dev="rgoers" type="fix" issue="VFS-322" due-to="Curtis Boyden">
-        Allow tar files that contain files over 2GB in size.
-      </action>
-       <action dev="rgoers" type="fix" issue="VFS-324" due-to="sebb">
-        Clear the cache in RamFileSystem and the children in RamFileData.
-      </action>
-      <action dev="sebb" type="fix" issue="VFS-319">
-        Typo in FtpsFileSystemConfigBuilder.setFtpsType
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-227" due-to="Sergey Vladimirov">
-        InputStream and RandomAccessContent memory leak in FileContentThreadData
-      </action>
-      <action dev="rgoers" type="update" issue="VFS-263" due-to="Ingo Maas">
-        WebdavFileObject does not implement doSetAttribute()
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-259" due-to="Marek Zawirski">
-        Http and Webdav FIleContentInfoFactory: undress to AbstractFileObject before casting
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-261" due-to="Simon Olofsson">
-        WebDAV upload corrupts binary files
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-276" due-to="Vince Bonfanti">
-        add ProviderTestConfig.getDefaultFileSystemManager() method
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-282" due-to="Alexey">
-        SftpFileProvider and SftpFileSystemConfigBuilder can't change ssh authentication methods
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-269" due-to="Marek Zawirski">
-        HttpFileObject: unsupported content over 2GB length
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-287" due-to="Mircea-Eugen Ionica">
-        LocalFileName objects are not released from AbstractFileSystem.listenerMap when all listeners are removed.
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-216" due-to="Reetu Mutti">
-        The FTP Configuration includes an option to set a timeout for the data connection, but not for the socket
-        timeout. This is a problem, as idle sockets can cause your download to hang forever and never timeout.
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-289" due-to="Kirill Safonov">
-        FTP connection is not released If exception is thrown out of FtpFileObject.doGetOutputStream().
-      </action>
-      <action dev="rgoers" type="fix" issue="VFS-286" due-to="Kirill Safonov">
-        SftpFileObject.doListChildrenResolved() changes the working dir before doing ChannelSftp.ls() call.
-        If ls() throws an exception, the current directory is not reset. All the subsequent operations that rely on the
-        current dir will fail trying to change into nonexistent directory.
-      </action>
-      <action dev="jcarman" type="add" issue="VFS-264" due-to="Scott Bjerstedt">
-        Add FTPS provider.
-      </action>
-      <action dev="rgoers" type="add" issue="VFS-244">
-        Rename HttpRandomAccesContent to HttpRandomAccessContent.
-      </action>
-    </release>
-  </body>
-</document>
diff --git a/trunk/src/changes/release-notes.vm b/trunk/src/changes/release-notes.vm
deleted file mode 100644
index 706d3c0..0000000
--- a/trunk/src/changes/release-notes.vm
+++ /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.

-##

-              ${project.name} ${version}

-                  RELEASE NOTES

-

-The ${developmentTeam} is pleased to announce the release of ${project.name} ${version}

-

-$introduction.replaceAll("(?<!\015)\012", "

-").replaceAll("(?m)^ +","")

-

-## N.B. the available variables are described here:

-## http://maven.apache.org/plugins/maven-changes-plugin/examples/using-a-custom-announcement-template.html

-##

-## Hack to improve layout: replace all pairs of spaces with a single new-line

-$release.description.replaceAll("  ", "

-")

-

-## set up indent sizes. Only change indent1

-#set($props=${project.properties})

-#set($jiralen=$props.get("commons.jira.id").length())

-## indent1 =   POOL-nnnn:

-#set($blanklen=$jiralen+6)## +6 for "-nnnn:"

-## must be at least as long as the longest JIRA id

-#set($blanks="                                  ")

-#set($indent1=$blanks.substring(0,$blanklen))

-## indent2 allows for issue wrapper

-#set($indent2="$indent1   ")

-##

-#macro ( processaction )

-## Use replaceAll to fix up LF-only line ends on Windows.

-#set($action=$actionItem.getAction().replaceAll("\n","

-"))

-## Replace &lt; with < so can embed tag markup

-#set($action=$action.replaceAll("&lt;","<"))

-## use an empty date to mean don't format the entry

-## TODO how to enable leading spaces without compromising html report

-## unfortunately leading spaces are trimmed even from CDATA sections

-#if ($actionItem.getDate() && $actionItem.getDate().length()==0)

-$action

-#else

-## Fix up indentation for multi-line action descriptions

-#set($action=$action.replaceAll("(?m)^  +",$indent2))

-#if ($actionItem.getIssue())

-#set($issue="$actionItem.getIssue():")

-## Pad shorter issue numbers

-#if ($issue.length() < $indent1.length())#set ($issue="$issue ")#end

-#if ($issue.length() < $indent1.length())#set ($issue="$issue ")#end

-#if ($issue.length() < $indent1.length())#set ($issue="$issue ")#end

-#else

-#set($issue=$indent1)

-#end

-#if ($actionItem.getDueTo())

-#set($dueto=" Thanks to $actionItem.getDueTo().")

-#else

-#set($dueto="")

-#end

-o $issue ${action}$dueto

-#end

-#set($action="")

-#set($issue="")

-#set($dueto="")

-#end

-##

-#if ($release.getActions().size() == 0)

-No changes defined in this version.

-#else

-Changes in this version include:

-

-#if ($release.getActions('add').size() !=0)

-New features:

-#foreach($actionItem in $release.getActions('add'))

-#processaction()

-#end 

-

-#end

-##

-#if ($release.getActions('fix').size() !=0)

-Fixed Bugs:

-#foreach($actionItem in $release.getActions('fix'))

-#processaction()

-#end

-

-#end

-##

-#if ($release.getActions('update').size() !=0)

-Changes:

-#foreach($actionItem in $release.getActions('update'))

-#processaction()

-#end

-

-#end

-##

-#if ($release.getActions('remove').size() !=0)

-Removed:

-#foreach($actionItem in $release.getActions('remove'))

-#processaction()

-#end

-#end

-## End of main loop

-#end

-

-Historical list of changes: ${project.url}changes-report.html

-

-For complete information on ${project.name}, including instructions on how to submit bug reports,

-patches, or suggestions for improvement, see the Apache ${project.name} website:

-

-${project.url}

diff --git a/trunk/src/media/vfs-logo-white.xcf b/trunk/src/media/vfs-logo-white.xcf
deleted file mode 100644
index e673acb..0000000
--- a/trunk/src/media/vfs-logo-white.xcf
+++ /dev/null
Binary files differ
diff --git a/trunk/src/site/resources/download_vfs.cgi b/trunk/src/site/resources/download_vfs.cgi
deleted file mode 100755
index 495cde1..0000000
--- a/trunk/src/site/resources/download_vfs.cgi
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-# Just call the standard mirrors.cgi script. It will use download.html
-# as the input template.
-exec /www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file
diff --git a/trunk/src/site/resources/images/vfs-logo-white.png b/trunk/src/site/resources/images/vfs-logo-white.png
deleted file mode 100644
index 0690d05..0000000
--- a/trunk/src/site/resources/images/vfs-logo-white.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 4af4a54..0000000
--- a/trunk/src/site/site.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT 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="Apache&#xA0;Commons&#xA0;VFS">
-
-  <bannerRight>
-    <name>Commons&#xA0;VFS</name>
-    <src>/images/vfs-logo-white.png</src>
-    <href>/index.html</href>
-  </bannerRight>
-
-  <body>
-
-    <menu name="Commons&#xA0;VFS" inherit="top">
-      <item name="Overview"                href="/index.html"/>
-      <item name="Download and Build"      href="/download.html"/>
-      <item name="Using the API"           href="/api.html"/>
-      <item name="API JavaDocs"            href="/apidocs/index.html"/>
-      <item name="File Systems"            href="/filesystems.html"/>
-      <item name="Ant Tasks"               href="/anttasks.html"/>
-      <item name="Wiki"                    href="http://wiki.apache.org/commons/VFS"/>
-    </menu>
-
-    <menu name="VFS Development" inherit="top">
-      <item name="Testing"                 href="/testing.html"/>
-      <item name="Mailing Lists"           href="/mail-lists.html"/>
-      <item name="Issue Tracking"          href="/issue-tracking.html"/>
-      <item name="Source Repository"       href="/source-repository.html"/>
-    </menu>
-
-    <menu name="VFS Modules" inherit="top">
-      <item name="Core" href="commons-vfs2/index.html"/>
-      <item name="Examples" href="commons-vfs2-examples/index.html"/>
-      <item name="Sandbox" href="commons-vfs2-sandbox/index.html"/>
-    </menu>
-
-    <menu ref="reports"/>
-  </body>
-
-</project>
diff --git a/trunk/src/site/xdoc/anttasks.xml b/trunk/src/site/xdoc/anttasks.xml
deleted file mode 100644
index 4d1534f..0000000
--- a/trunk/src/site/xdoc/anttasks.xml
+++ /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.
--->
-<document>
-    <properties>
-        <title>Ant Tasks</title>
-        <author email="adammurdoch@apache.org">Adam Murdoch</author>
-    </properties>
-
-    <body>
-        <section name="Ant Tasks">
-            <p>
-                Commons VFS includes several Ant tasks that can be used
-                to create, delete, copy and move files of any supported type.
-                The tasks are:
-            </p>
-            <ul>
-                <li>
-                    <a href="#V-Copy">
-                        <code>&lt;v-copy&gt;</code>
-                    </a>
-                    .
-                    Copies a set of source folders and files to a destination
-                    folder.
-                </li>
-                <li>
-                    <a href="#V-Delete">
-                        <code>&lt;v-delete&gt;</code>
-                    </a>
-                    .
-                    Deletes a file or folder.
-                </li>
-                <li>
-                    <a href="#V-Mkdir">
-                        <code>&lt;v-mkdir&gt;</code>
-                    </a>
-                    .
-                    Creates a folder.
-                </li>
-                <li>
-                    <a href="#V-Move">
-                        <code>&lt;v-move&gt;</code>
-                    </a>
-                    .
-                    Moves a set of source folders and files to a destination
-                    folder.
-                </li>
-                <li>
-                    <a href="#V-Sync">
-                        <code>&lt;v-sync&gt;</code>
-                    </a>
-                    .
-                    Synchronises a destination folder with a set of source
-                    folder and files.
-                </li>
-            </ul>
-            <p>
-                All file name attributes support relative and absolute local
-                file names, and
-                <a href="filesystems.html">absolute URI</a>
-                .
-                File names are interpreted relative to the Ant project's base
-                directory.
-            </p>
-
-            <subsection name="Using the Tasks">
-                <p>
-                    To use the Ant tasks, copy commons-vfs.jar and its
-                    dependencies into the
-                    <code>$ANT_HOME/lib</code>
-                    directory,
-                    and use the following in your Ant scipt to define the tasks:
-                </p>
-
-                <source><![CDATA[
-<taskdef resource="org/apache/commons/vfs2/tasks/tasks.properties"/>
-                    ]]></source>
-
-                <p>
-                    Alternatively, you can provide an explicit classpath when
-                    you define the tasks:
-                </p>
-
-                <source><![CDATA[
-<taskdef resource="org/apache/commons/vfs2/tasks/tasks.properties">
-    <classpath> ... </classpath>
-</taskdef>
-                    ]]></source>
-
-                <p>
-                    You can also use antlib:
-                    <br/>
-                    <b>Notice: VFS tasks registered that way do not have te "v-" prefix.</b>
-                    If you migrate to antlib simply replace "v-" by e.g. "vfs:" or whatever
-                    namespace you use.
-                </p>
-
-                <source><![CDATA[
-<project ... xmlns:vfs="antlib:org.apache.commons.vfs2.tasks">
-    <target name="dosomething">
-        <vfs:copy .../>
-    </target>
-</project>
-                    ]]></source>
-
-            </subsection>
-        </section>
-
-        <section name="V-Copy">
-            <p>Copies a set of files to a destination folder. Does not copy
-                source files where the destination file exists and is newer than
-                the source file. The copy task takes the following attributes:</p>
-
-            <table>
-                <tr>
-                    <th>Name</th>
-                    <th>Description</th>
-                    <th>Required</th>
-                </tr>
-                <tr>
-                    <td>destdir</td>
-                    <td>The destination folder. This folder is created if it
-                        does not exist.</td>
-                    <td rowspan="2">One only</td>
-                </tr>
-                <tr>
-                    <td>destfile</td>
-                    <td>The destination file. Can only be used if there is a
-                        single source file.</td>
-                </tr>
-                <tr>
-                    <td>srcdir</td>
-                    <td>The source folder. If used the includes and desdir
-                        attributes should be specified.</td>
-                    <td>No</td>
-                </tr>
-                <tr>
-                    <td>includes</td>
-                    <td>A comma or space separated list of files. The files
-                        are resolved in combination with the specified
-                        srcdir attribute.</td>
-                    <td>Only if srcdir is specified.</td>
-                </tr>
-                <tr>
-                    <td>overwrite</td>
-                    <td>Always copy files, ignoring the last-modified time of
-                        the destination file.</td>
-                    <td>No, default is
-                        <code>false</code>
-                        .
-                    </td>
-                </tr>
-                <tr>
-                    <td>preservelastmodified</td>
-                    <td>Set the last-modified time of destination files to
-                        the same value as the source files. May not be supported
-                        by the destination file system.</td>
-                    <td>No, default is
-                        <code>true</code>
-                        .
-                    </td>
-                </tr>
-                <tr>
-                    <td>srcdirisbase</td>
-                    <td>Set whether the source directory should be used as base directory.
-                        If set to true, the subdirectories of the specified directories will be copied as well.</td>
-                    <td>No, default is
-                        <code>false</code>
-                        .
-                    </td>
-                </tr>
-                <tr>
-                    <td>src</td>
-                    <td>A source file or folder to copy. Copies all descendents
-                        of a folder.</td>
-                    <td>No</td>
-                </tr>
-            </table>
-
-            <subsection name="Nested Elements">
-                <p>
-                    <b>
-                        <code>&lt;src&gt;</code>
-                    </b>
-                </p>
-
-                <p>Defines a source file or folder to copy. It takes the
-                    following attributes:</p>
-
-                <table>
-                    <tr>
-                        <th>Name</th>
-                        <th>Description</th>
-                        <th>Required</th>
-                    </tr>
-                    <tr>
-                        <td>file</td>
-                        <td>The source file.</td>
-                        <td>Yes</td>
-                    </tr>
-                </table>
-            </subsection>
-
-        </section>
-
-        <section name="V-Move">
-            <p>Moves a set of files to a destination folder. Has the same
-                attributes and elements as the copy task and following attributes:</p>
-            <table>
-                <tr>
-                    <th>Name</th>
-                    <th>Description</th>
-                    <th>Required</th>
-                </tr>
-                <tr>
-                    <td>tryRename</td>
-                    <td>The destination folder. This folder is created if it
-                        does not exist.</td>
-                    <td>No, default is
-                        <code>false</code>
-                    </td>
-                </tr>
-            </table>
-        </section>
-
-        <section name="V-Sync">
-            <p>Synchronises a destination folder with a set of source files.
-                Has the same attributes and elements as the copy task.</p>
-        </section>
-
-        <section name="V-Delete">
-            <p>Deletes a file or folder. It takes the following attributes:</p>
-
-            <table>
-                <tr>
-                    <th>Name</th>
-                    <th>Description</th>
-                    <th>Required</th>
-                </tr>
-                <tr>
-                    <td>file</td>
-                    <td>The file or folder to delete. All descendents of
-                        the folder are deleted.</td>
-                    <td rowspan="2">One only</td>
-                </tr>
-                <tr>
-                    <td>srcdir</td>
-                    <td>The source folder. If used the includes attribute
-                        should be specified.</td>
-                </tr>
-                <tr>
-                    <td>includes</td>
-                    <td>A comma or space separated list of files. The files
-                        are resolved in combination with the specified
-                        srcdir attribute.</td>
-                    <td>Only if srcdir is specified.</td>
-                </tr>
-            </table>
-        </section>
-
-        <section name="V-Mkdir">
-            <p>Creates a folder. It takes the following attributes:</p>
-
-            <table>
-                <tr>
-                    <th>Name</th>
-                    <th>Description</th>
-                    <th>Required</th>
-                </tr>
-                <tr>
-                    <td>dir</td>
-                    <td>The folder create.</td>
-                    <td>Yes</td>
-                </tr>
-            </table>
-
-        </section>
-    </body>
-</document>
diff --git a/trunk/src/site/xdoc/api.xml b/trunk/src/site/xdoc/api.xml
deleted file mode 100644
index 52f1a37..0000000
--- a/trunk/src/site/xdoc/api.xml
+++ /dev/null
@@ -1,379 +0,0 @@
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-   
-         http://www.apache.org/licenses/LICENSE-2.0
-   
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-    <properties>
-        <title>Using The API</title>
-        <author email="adammurdoch@apache.org">Adam Murdoch</author>
-    </properties>
-
-    <body>
-        <section name="Using The API">
-            <p>
-                The
-                <a href="apidocs/org/apache/commons/vfs2/FileSystemManager.html">FileSystemManager</a>
-                interface provides access to Commons VFS.  Using this interface
-                you can locate files and create file systems.
-                There are a
-                <a href="#Configuring Commons VFS">number of ways</a>
-                to obtain a
-                <code>FileSystemManager</code> instance.
-                The simplest is to use the static
-                <a href="apidocs/org/apache/commons/vfs2/VFS.html#getManager()">VFS.getManager()</a>
-                method, which returns the default Commons VFS implementation.
-            </p>
-
-            <p>
-                Once you have a
-                <code>FileSystemManager</code>, you can use its
-                <code>resolveFile()</code> methods to locate a file by name.
-                For example:
-            </p>
-
-            <source><![CDATA[
-FileSystemManager fsManager = VFS.getManager();
-FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );
-                ]]></source>
-
-            <p>
-                Each file is represented by a
-                <a href="apidocs/org/apache/commons/vfs2/FileObject.html">FileObject</a>
-                instance.  Using this interface you can create or delete the
-                file, list its children, read or write its content, and so on.
-                For example:
-            </p>
-
-            <source><![CDATA[
-// Locate the Jar file
-FileSystemManager fsManager = VFS.getManager();
-FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );
-
-// List the children of the Jar file
-FileObject[] children = jarFile.getChildren();
-System.out.println( "Children of " + jarFile.getName().getURI() );
-for ( int i = 0; i < children.length; i++ )
-{
-    System.out.println( children[ i ].getName().getBaseName() );
-}
-                ]]></source>
-
-            <p>
-                In some cases you might want to explicitely free resources allocated by the filesystem.
-                You can do this by calling
-                <a href="apidocs/org/apache/commons/vfs2/FileSystemManager.html#closeFileSystem">VFS.getManager().closeFileSystem(fs)</a>.
-                If you use VFS as singleton (as described above) you should take care that this will close the filesystem for
-                all threads.<br />
-                In other words, do not close any globally used filesystem like the one for local files.  
-            </p>
-
-            <p>
-                See the
-                <a href="apidocs/org/apache/commons/vfs2/FileObject.html">FileObject</a>
-                Javadocs for more detail.
-            </p>
-
-            <subsection name="Cache">
-                <p>
-                    Commons VFS uses a <a href="apidocs/org/apache/commons/vfs2/cache/SoftRefFilesCache.html">SoftRefFilesCache</a> to release memory if a file is no longer used by the application.
-                </p>
-                <p>
-                    This cache will return the same instance for a file as long as it is "strongly reachable" e.g. you
-                    hold a reference to this object. If the FileObject is no longer reachable, and the jvm needs some memory,
-                    it will be released.
-                </p>
-                <p>
-                    There is also a internal cache of each file object avoid the need to access the network layer. Now its possible
-                    to configure this behviour through the use of <a href="apidocs/org/apache/commons/vfs2/CacheStrategy.html">CacheStrategy</a>.
-                    <br />
-                    Do this on the DefaultFileSystemManager. For example:
-                    <code>
-                        ((DefaultFileSystemManager) VFS.getManager()).setCacheStrategy(CacheStrategy.ON_CALL)
-                    </code>
-                </p>
-            </subsection>
-
-            <subsection name="User Authentication">
-                <p>
-                    You can put the credentials into the url, but the drawback here is, that it is
-                    easily possible to get access to the password.
-                </p>
-                <p>
-                    To solve you can use the
-                    <a href="apidocs/org/apache/commons/vfs2/UserAuthenticator.html">UserAuthenticator</a>
-                </p>
-                <p>
-                    For example:
-                    <code>
-                        StaticUserAuthenticator auth = new StaticUserAuthenticator("domain", "username", "password");
-                        FileSystemOptions opts = new FileSystemOptions();
-                        DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
-
-                        FileObject fo = VFS.getManager().resolveFile("smb://host/anyshare/dir", opts);
-                    </code>
-                </p>
-                <p>
-                    Internally the UserAuthenticator uses char arrays which will be zeroed before it is
-                    freed for garbage collection.Unhappily none of the current libraries use char
-                    arrays and so VFS has to create a string. Thus, the main advantage
-                    of this solution - security - is lost, but hey, thats not VFS fault ;-)
-                </p>
-                <p>
-                    VFS calls <code>UserAuthenticator.requestAuthentication</code> each time it
-                    requires credentials, it depends on the filesystem implementation how often
-                    this might be. For example, with FTP this is on every connection, in SMB/JCIFS
-                    this is for EVERY OBJECT. It is up to you how long you will cache credentials
-                    of if you would like to provide a "save credentials" checkbox.
-                </p>
-            </subsection>
-
-            <subsection name="Examples">
-                <p>
-                    For an example of using the API, take a look at the classes
-                    in the
-                    <a href="apidocs/org/apache/commons/vfs2/example/package-summary.html">example</a>
-                    package.
-                </p>
-            </subsection>
-
-        </section>
-
-        <section name="Configuring Commons VFS">
-            <p>
-                Commons VFS is represented using the
-                <a href="apidocs/org/apache/commons/vfs2/FileSystemManager.html">FileSystemManager</a>
-                interface.  There are a number of ways to create and configure a
-                <code>FileSystemManager</code> instance.
-            </p>
-            <p>
-                The simplest method is to use the static
-                <a href="apidocs/org/apache/commons/vfs2/VFS.html#getManager()">VFS.getManager()</a>
-                method, which returns the default Commons VFS implementation.
-            </p>
-            <p>
-                This method will also automatically scan the classpath for a /META-INF/vfs-providers.xml file
-                (also in jar files).
-                If such a file is found Commons VFS uses it in <u>addition</u> to the default providers.xml.
-                This allows you to start using a new filesystem by simply drop its implementation into the classpath.
-                The configuration file format is described below.<br />
-                <b>Notice:</b> Currently it is not allowed to override a already configured filesystem. Commons VFS throws
-                an exception if there is already a filesystem for a scheme.
-            </p>
-
-            <p>
-                To configure Commons VFS programatically, you can create an
-                instance of
-                <a href="apidocs/org/apache/commons/vfs2/impl/DefaultFileSystemManager.html">DefaultFileSystemManager</a>
-                and configure it manually.  The default constructor
-                <code>DefaultFileSystemManager</code> creates a manager that
-                is completely empty.  You will have to add file providers to it
-                to make it do anything useful.
-            </p>
-            <p>
-                Here are the steps for using
-                <code>DefaultFileSystemManager</code>:
-            </p>
-            <ol>
-                <li>Create a new instance.</li>
-                <li>
-                    Set the logger for the manager and all its components,
-                    using
-                    <code>setLogger()</code>.  This step is
-                    optional, and if skipped, the manager will use the default
-                    logger provided by Commons Logging.
-                </li>
-                <li>
-                    Add file providers, using
-                    <code>addProvider()</code>.
-                </li>
-                <li>
-                    Set the default provider, using
-                    <code>setDefaultProvider()</code>.  This step is optional.
-                    See
-                    <a href="apidocs/org/apache/commons/vfs2/provider/url/UrlFileProvider.html">UrlFileProvider</a>
-                    for a useful default provider.
-                </li>
-                <li>
-                    Set the file replicator, using
-                    <code>setReplicator()</code>.
-                    This step is optional.
-                </li>
-                <li>
-                    Set the temporary file store, using
-                    <code>setTemporaryFileStore()</code>.
-                    This step is optional.
-                </li>
-                <li>
-                    Set the base file using
-                    <code>setBaseFile()</code>.  The
-                    base file is used to resolve relative URI passed to
-                    <code>resolveFile()</code>.  This step is optional.
-                </li>
-                <li>
-                    Initialise the manager using
-                    <code>init()</code>.
-                </li>
-            </ol>
-            <p>
-                You should make sure that you call
-                <code>close()</code> on the
-                manager when you are finished with it.
-            </p>
-
-            <p>
-                The third method for configuring Commons VFS, is to configure
-                it from a file.  Create an instance of
-                <a href="apidocs/org/apache/commons/vfs2/impl/StandardFileSystemManager.html">StandardFileSystemManager</a>,
-                and use its
-                <code>setConfiguration()</code> method to set the
-                location of the configuration file to use.  The configuration
-                file format is described below.
-            </p>
-
-            <p>
-                <code>StandardFileSystemManager</code> is a subclass of
-                <code>DefaultFileSystemManager</code>, so you can also
-                configure it programmatically, as described above.
-            </p>
-            <subsection name="Configuration File">
-                <p>
-                    The configuration file is an XML file.  The root element
-                    of the configuration file should be a
-                    <code>&lt;providers&gt;</code> element.
-                    The
-                    <code>&lt;providers&gt;</code> element may contain:
-                </p>
-                <ul>
-                    <li>Zero or more
-                        <code>&lt;provider&gt;</code> elements.
-                    </li>
-                    <li>An optional
-                        <code>&lt;default-provider&gt;</code> element.
-                    </li>
-                    <li>Zero or more
-                        <code>&lt;extension-map&gt;</code> elements.
-                    </li>
-                    <li>Zero or more
-                        <code>&lt;mime-type-map&gt;</code> elements.
-                    </li>
-                </ul>
-
-                <p>
-                    <b>
-                        <code>&lt;provider&gt;</code>
-                    </b>
-                </p>
-                <p>
-                    The
-                    <code>&lt;provider&gt;</code> element defines a file
-                    provider.   It must have a
-                    <code>class-name</code> attribute,
-                    which specifies the fully-qualified name of the provider
-                    class.  The provider class must be public, and must have a
-                    public constructor with an FileSystemManager argument which
-                    allows the systems to pass the used filesystem manager.
-                </p>
-                <p>
-                    The
-                    <code>&lt;provider&gt;</code> element may contain
-                    zero or more
-                    <code>&lt;scheme&gt;</code> elements,
-                    and zero or more
-                    <code>&lt;if-available&gt;</code> elements.
-                </p>
-                <p>
-                    The
-                    <code>&lt;scheme&gt;</code> element defines a URI scheme
-                    that the provider will handle.  It must have a
-                    <code>name</code> attribute, which specifies the URI scheme.
-                </p>
-                <p>
-                    The
-                    <code>&lt;if-available&gt;</code> elements is used to
-                    disable the provider if certain classes are not present in
-                    the class-path.
-                    It must have a
-                    <code>class-name</code> attribute, which
-                    specifies the fully qualified name of a class to test for.
-                    If the class cannot be found, the provider is not registered.
-                </p>
-
-                <p>
-                    <b>
-                        <code>&lt;default-provider&gt;</code>
-                    </b>
-                </p>
-                <p>
-                    The
-                    <code>&lt;default-provider&gt;</code> element defines
-                    the default provider.  It has the same format as the
-                    <code>&lt;provider&gt;</code> element.
-                </p>
-
-                <p>
-                    <b>
-                        <code>&lt;extension-map&gt;</code>
-                    </b>
-                </p>
-                <p>
-                    The
-                    <code>&lt;extension-map&gt;</code> element defines
-                    a mapping from a file's extension to the provider that
-                    should handle files with that extension.
-                    It must have an
-                    <code>extension</code> attribute, which
-                    specifies the extension, and a
-                    <code>scheme</code> attribute,
-                    which specifies the URI scheme of the provider.
-                </p>
-
-                <p>
-                    <b>
-                        <code>&lt;mime-type-map&gt;</code>
-                    </b>
-                </p>
-                <p>
-                    The
-                    <code>&lt;mime-type-map&gt;</code> element defines
-                    a mapping from a file's MIME type to the provider that
-                    should handle files with that MIME type.
-                    It must have an
-                    <code>mime-type</code> attribute, which
-                    specifies the MIME type, and a
-                    <code>scheme</code> attribute,
-                    which specified the URI scheme of the provider.
-                </p>
-
-                <p>
-                    Below is an example configuration file:
-                </p>
-                <source><![CDATA[
-<providers>
-    <provider class-name="org.apache.commons.vfs2.provider.zip.ZipFileProvider">
-        <scheme name="zip"/>
-    </provider>
-    <extension-map extension="zip" scheme="zip"/>
-    <mime-type-map mime-type="application/zip" scheme="zip"/>
-    <provider class-name="org.apache.commons.vfs2.provider.ftp.FtpFileProvider">
-        <scheme name="ftp"/>
-        <if-available class-name="org.apache.commons.net.ftp.FTPFile"/>
-    </provider>
-    <default-provider class-name="org.apache.commons.vfs2.provider.url.UrlFileProvider"/>
-</providers>
-                    ]]></source>
-            </subsection>
-        </section>
-    </body>
-</document>
diff --git a/trunk/src/site/xdoc/download.xml b/trunk/src/site/xdoc/download.xml
deleted file mode 100644
index b61845c..0000000
--- a/trunk/src/site/xdoc/download.xml
+++ /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.
--->
-<document>
-
-    <properties>
-        <title>Download</title>
-        <author email="dev@commons.apache.org">Apache Commons Developers</author>
-    </properties>
-
-    <body>
-        <section name="Download">
-            <p>
-                The latest release (binaries and source) of Commons VFS can be found
-                <a href="download_vfs.cgi">here</a>.
-            </p>
-            <p>
-                You will also need to download the <a href="commons-vfs2/dependencies.html">dependencies</a> (jars) used by Apache Commons VFS.
-                You can download the jars from the list below; with Apache Maven dependency resolution is automatic.
-            </p>
-            <table>
-                <tr>
-                    <th>Dependency</th>
-                    <th>Required For</th>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://commons.apache.org/logging/">Commons Logging</a>
-                        Version 1.2.
-                    </td>
-                    <td>All</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://commons.apache.org/collections/">Commons Collections</a>
-                        Version 4.0.
-                    </td>
-                    <td>LRU Cache (optional)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://commons.apache.org/compress/">Commons Compress</a>
-                        Version 1.9.
-                    </td>
-                    <td>TAR, Bzip2</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://commons.apache.org/net/">Commons Net</a>
-                        Version 3.3.
-                    </td>
-                    <td>FTP</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://commons.apache.org/httpclient/">Commons Httpclient</a>
-                        Version 3.1.<br/>
-                        Requires <a href="http://commons.apache.org/proper/commons-codec/">Commons Codec</a> Version 1.2.
-                    </td>
-                    <td>WebDAV, HTTP, URI Utils</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://jackrabbit.apache.org/jackrabbit-webdav-library.html">Apache Jackrabbit WebDAV Library</a>
-                        Version 1.6.5.<br/>
-                        Requires <a href="http://jackrabbit.apache.org/jackrabbit-jcr-commons.html">Jackrabbit JCR Commons</a>
-                        Version 1.6.5 and <a href="http://www.slf4j.org">SLF4J</a>
-                        Version 1.5.3 (Api and Impl).
-                    </td>
-                    <td>WebDAV</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://www.jcraft.com/jsch/">JSch</a>
-                        Version 0.1.51.
-                    </td>
-                    <td>SFTP</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://hadoop.apache.org/docs/stable/">Apache Hadoop Common</a>
-                        Version 2.6.0.<br/>
-                        <a href="http://hadoop.apache.org/docs/stable/">Apache Hadoop HDFS Common</a>
-                        Version 2.6.0<br/>
-                        This requires a number of dependencies, use <code>$HADOOP_HOME/bin/hadoop classpath</code> command.
-                    </td>
-                    <td>hdfs</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://jcifs.samba.org/">jCIFS</a>
-                        Version 0.8.3.
-                    </td>
-                    <td>CIFS (VFS sandbox)</td>
-                </tr>
-                <tr>
-                    <td>
-                        <a href="http://java.sun.com/products/javamail/">javamail</a>
-                        Version 1.4.7.
-                    </td>
-                    <td>mime (VFS sandbox)</td>
-                </tr>
-            </table>
-        </section>
-        <section name="Obtaining Commons VFS source">
-            <p>
-                To obtain the Commons VFS source, you can either:
-            </p>
-            <ul>
-                <li>
-                    The primary source repository for the Apache Commons VFS project is the 
-                    <em>Subversion</em> repository. You can use the following command to check out
-                    the latest source version:
-                    <br/>
-                    <code>svn co http://svn.apache.org/repos/asf/commons/proper/vfs/trunk commons-vfs</code><br/>
-                    <br/>
-                    For a certain version please look at
-                    <a href="http://svn.apache.org/repos/asf/commons/proper/vfs/tags">
-                        http://svn.apache.org/repos/asf/commons/proper/vfs/tags</a>
-                </li>
-                <li>
-                    If you prefer <em>Git</em>, you can get the sources from the Apache Git mirror:<br/>
-                    <br/>
-                    <code>git clone git://git.apache.org/commons-vfs.git commons-vfs</code><br/>
-                    <br/>
-                    There is also a guideline for <a href="https://github.com/apache/commons-vfs/blob/trunk/CONTRIBUTING.md">contributing via GitHub</a>.
-                </li>
-                <li>
-                    Obtain the source from the latest release distribution. See the <a href="download_vfs.cgi">downloads</a> page.
-                </li>
-            </ul>
-        </section>
-        <section name="Building Commons VFS">
-            <p>
-                To build Commons VFS, you can use <a href="http://maven.apache.org">Maven</a> 3.0.5 or later.
-                You need to use Java 6 or later (tested with Java 6 - 8). Production builds are done with the
-                <code>-Pjava-1.6</code> profile from Commons Parent (which will compile and test with a JDK
-                from the JAVA_1_6_HOME environment variable).
-            </p><p>
-                Use <code>mvn clean verify</code> to locally build and test the <code>core</code> and 
-                <code>examples</code> modules. This will build the core JAR files in
-                <code>commons-vfs/core/target/commons-vfs2-&lt;version>.jar</code>.
-            </p><p>
-                If you want to build the additional sandbox file systems as well, use
-                <code>mvn -Pinclude-sandbox clean verify</code>. This will also create the sandbox
-                components in <code>commons-vfs/sandbox/target/commons-vfs2-sandbox-&lt;version>.jar</code>.
-            </p><p>
-                See the <a href="commons-vfs2-example/index.html">commons-vfs2-example</a> Module on how 
-                to use VFS Example Shell to verify the result.
-            </p>
-        </section>
-    </body>
-</document>
diff --git a/trunk/src/site/xdoc/download_vfs.xml b/trunk/src/site/xdoc/download_vfs.xml
deleted file mode 100644
index 0bdb73e..0000000
--- a/trunk/src/site/xdoc/download_vfs.xml
+++ /dev/null
@@ -1,182 +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.
--->
-<!--
- +======================================================================+
- |****                                                              ****|
- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
- |****                    DO NOT EDIT DIRECTLY                      ****|
- |****                                                              ****|
- +======================================================================+
- | TEMPLATE FILE: download-page-template.xml                            |
- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
- +======================================================================+
- |                                                                      |
- | 1) Re-generate using: mvn commons:download-page                      |
- |                                                                      |
- | 2) Set the following properties in the component's pom:              |
- |    - commons.componentid (required, alphabetic, lower case)          |
- |    - commons.release.version (required)                              |
- |    - commons.release.name    (required)                              |
- |    - commons.binary.suffix (optional)                                |
- |      (defaults to "-bin", set to "" for pre-maven2 releases)         |
- |    - commons.release.desc    (optional)                              |
- |                                                                      |
- |    - commons.release.2/3.version       (conditional)                 |
- |    - commons.release.2/3.name          (conditional)                 |
- |    - commons.release.2/3.binary.suffix (optional)                    |
- |    - commons.release.2/3.desc          (optional)                    |
- |                                                                      |
- | 3) Example Properties                                                |
- |    (commons.release.name inherited by parent:                        |
- |     ${project.artifactId}-${commons.release.version}                 |
- |                                                                      |
- |  <properties>                                                        |
- |    <commons.componentid>math</commons.componentid>                   |
- |    <commons.release.version>1.2</commons.release.version>            |
- |  </properties>                                                       |
- |                                                                      |
- +======================================================================+
--->
-<document>
-  <properties>
-    <title>Download Apache Commons VFS</title>
-    <author email="dev@commons.apache.org">Apache Commons Documentation Team</author>
-  </properties>
-  <body>
-    <section name="Download Apache Commons VFS">
-    <subsection name="Using a Mirror">
-      <p>
-        We recommend you use a mirror to download our release
-        builds, but you <strong>must</strong> <a href="https://www.apache.org/info/verification.html">verify the integrity</a> of
-        the downloaded files using signatures downloaded from our main
-        distribution directories. Recent releases (48 hours) may not yet
-        be available from all the mirrors.
-      </p>
-
-      <p>
-        You are currently using <b>[preferred]</b>.  If you
-        encounter a problem with this mirror, please select another
-        mirror.  If all mirrors are failing, there are <i>backup</i>
-        mirrors (at the end of the mirrors list) that should be
-        available.
-        <br></br>
-        [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
-      </p>
-
-      <form action="[location]" method="get" id="SelectMirror">
-        <p>
-          Other mirrors:
-          <select name="Preferred">
-          [if-any http]
-            [for http]<option value="[http]">[http]</option>[end]
-          [end]
-          [if-any ftp]
-            [for ftp]<option value="[ftp]">[ftp]</option>[end]
-          [end]
-          [if-any backup]
-            [for backup]<option value="[backup]">[backup] (backup)</option>[end]
-          [end]
-          </select>
-          <input type="submit" value="Change"></input>
-        </p>
-      </form>
-
-      <p>
-        It is essential that you
-        <a href="https://www.apache.org/info/verification.html">verify the integrity</a>
-        of downloaded files, preferably using the <code>PGP</code> signature (<code>*.asc</code> files);
-        failing that using the <code>MD5</code> hash (<code>*.md5</code> checksum files).
-      </p>
-      <p>
-        The <a href="https://www.apache.org/dist/commons/KEYS">KEYS</a>
-        file contains the public PGP keys used by Apache Commons developers
-        to sign releases.
-      </p>
-    </subsection>
-    </section>
-    <section name="Apache Commons VFS 2.1 (requires Java 1.6+)">
-      <subsection name="Binaries">
-        <table>
-          <tr>
-              <td><a href="[preferred]/commons/vfs/binaries/commons-vfs-2.1.tar.gz">commons-vfs-2.1.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/binaries/commons-vfs-2.1.tar.gz.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/binaries/commons-vfs-2.1.tar.gz.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/commons/vfs/binaries/commons-vfs-2.1.zip">commons-vfs-2.1.zip</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/binaries/commons-vfs-2.1.zip.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/binaries/commons-vfs-2.1.zip.asc">pgp</a></td>
-          </tr>
-        </table>
-      </subsection>
-      <subsection name="Source">
-        <table>
-          <tr>
-              <td><a href="[preferred]/commons/vfs/source/commons-vfs-2.1-src.tar.gz">commons-vfs-2.1-src.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/source/commons-vfs-2.1-src.tar.gz.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/source/commons-vfs-2.1-src.tar.gz.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/commons/vfs/source/commons-vfs-2.1-src.zip">commons-vfs-2.1-src.zip</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/source/commons-vfs-2.1-src.zip.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/source/commons-vfs-2.1-src.zip.asc">pgp</a></td>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-    <section name="Apache Commons VFS 2.0 (requires Java 1.5+)">
-      <subsection name="Binaries">
-        <table>
-          <tr>
-              <td><a href="[preferred]/commons/vfs/binaries/commons-vfs-2.0.tar.gz">commons-vfs-2.0.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/binaries/commons-vfs-2.0.tar.gz.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/binaries/commons-vfs-2.0.tar.gz.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/commons/vfs/binaries/commons-vfs-2.0.zip">commons-vfs-2.0.zip</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/binaries/commons-vfs-2.0.zip.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/binaries/commons-vfs-2.0.zip.asc">pgp</a></td>
-          </tr>
-        </table>
-      </subsection>
-      <subsection name="Source">
-        <table>
-          <tr>
-              <td><a href="[preferred]/commons/vfs/source/commons-vfs-2.0-src.tar.gz">commons-vfs-2.0-src.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/source/commons-vfs-2.0-src.tar.gz.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/source/commons-vfs-2.0-src.tar.gz.asc">pgp</a></td>
-          </tr>
-          <tr>
-              <td><a href="[preferred]/commons/vfs/source/commons-vfs-2.0-src.zip">commons-vfs-2.0-src.zip</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/source/commons-vfs-2.0-src.zip.md5">md5</a></td>
-              <td><a href="https://www.apache.org/dist/commons/vfs/source/commons-vfs-2.0-src.zip.asc">pgp</a></td>
-          </tr>
-        </table>
-      </subsection>
-    </section>
-    <section name="Archives">
-        <p>
-          Older releases can be obtained from the archives.
-        </p>
-        <ul>
-          <li class="download"><a href="[preferred]/commons/vfs/">browse download area</a></li>
-          <li><a href="https://archive.apache.org/dist/commons/vfs/">archives...</a></li>
-        </ul>
-    </section>
-  </body>
-</document>
diff --git a/trunk/src/site/xdoc/filesystems.xml b/trunk/src/site/xdoc/filesystems.xml
deleted file mode 100644
index e0d0559..0000000
--- a/trunk/src/site/xdoc/filesystems.xml
+++ /dev/null
@@ -1,854 +0,0 @@
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<document>
-
-    <properties>
-        <title>Supported File Systems</title>
-        <author email="dev@commons.apache.org">Apache Commons Developers</author>
-    </properties>
-
-    <body>
-        <section name="Supported File Systems">
-            <p>Commons VFS directly supports the following file systems with the listed
-               <a href="apidocs/org/apache/commons/vfs2/Capability.html">capabilities</a>:</p>
-          <table>
-            <tr>
-              <th>File System</th>
-              <th>Directory Contents</th>
-              <th>Authentication</th>
-              <th>Read</th>
-              <th>Write</th>
-              <th>Create/Delete</th>
-              <th>Random</th>
-              <th>Version</th>
-              <th>Rename</th>
-            </tr>
-            <tr>
-              <td><a href="#gzip and bzip2">BZIP2</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-            </tr>
-            <tr>
-              <td><a href="#Local Files">File</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Read/Write</td>
-              <td>No</td>
-              <td>Yes</td>
-            </tr>
-            <tr>
-              <td><a href="#FTP">FTP</a></td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Read</td>
-              <td>No</td>
-              <td>Yes</td>
-            </tr>
-            <tr>
-              <td><a href="#FTPS">FTPS</a></td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Read</td>
-              <td>No</td>
-              <td>Yes</td>
-            </tr>
-            <tr>
-              <td><a href="#gzip and bzip2">GZIP</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-            </tr>
-            <tr>
-              <td><a href="#HDFS">HDFS</a></td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>No</td>
-              <td>Read</td>
-              <td>No</td>
-              <td>No</td>
-            </tr>
-            <tr>
-              <td><a href="#HTTP and HTTPS">HTTP</a></td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>No</td>
-              <td>Read</td>
-              <td>No</td>
-              <td>No</td>
-            </tr>
-            <tr>
-              <td><a href="#HTTP and HTTPS">HTTPS</a></td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>No</td>
-              <td>Read</td>
-              <td>No</td>
-              <td>No</td>
-            </tr>
-            <tr>
-              <td><a href="#Zip, Jar and Tar">Jar</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-            </tr>
-            <tr>
-              <td><a href="#ram">RAM</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Read/Write</td>
-              <td>No</td>
-              <td>Yes</td>
-            </tr>
-            <tr>
-              <td><a href="#res">RES</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Read/Write</td>
-              <td>No</td>
-              <td>Yes</td>
-            </tr>
-            <tr>
-              <td><a href="#SFTP">SFTP</a></td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Read</td>
-              <td>No</td>
-              <td>Yes</td>
-            </tr>
-            <tr>
-              <td><a href="#Zip, Jar and Tar">Tar</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-            </tr>
-            <tr>
-              <td><a href="#Temporary Fils">Temp</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Read/Write</td>
-              <td>No</td>
-              <td>Yes</td>
-            </tr>
-            <tr>
-              <td><a href="WebDAV">WebDAV</a></td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Read/Write</td>
-              <td>Yes</td>
-              <td>Yes</td>
-            </tr>
-            <tr>
-              <td><a href="#Zip, Jar and Tar">Zip</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-            </tr>
-          </table>
-        </section>
-
-        <section name="Things from the sandbox">
-          <p>The following file systems are in development:</p>
-          <table>
-            <tr>
-              <th>File System</th>
-              <th>Directory Contents</th>
-              <th>Authentication</th>
-              <th>Read</th>
-              <th>Write</th>
-              <th>Create/Delete</th>
-              <th>Random</th>
-              <th>Version</th>
-              <th>Rename</th>
-            </tr>
-            <tr>
-              <td><a href="#CIFS">CIFS</a></td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Yes</td>
-              <td>Read/Write</td>
-              <td>No</td>
-              <td>Yes</td>
-            </tr>
-            <tr>
-              <td><a href="#mime">mime</a></td>
-              <td>No</td>
-              <td>No</td>
-              <td>Yes</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-              <td>No</td>
-            </tr>
-          </table>
-        </section>
-
-        <section name="Naming">
-
-            <p>All filenames are treated as URIs. One of the consequences of this is you have to encode the '%'
-                character using <code>%25</code>. <br />
-                Depending on the filesystem additional characters are encoded if needed. This is done automatically, but
-                might be reflected in the filename.
-                </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>file:///somedir/some%25file.txt</code>
-                </li>
-            </ul>
-            <p>
-               Many file systems accept a userid and password as part of the url. However, storing
-               a password in clear text in a file is usually unacceptable. To help with that
-               Commons VFS provides a mechanism to encrypt the password. It should be noted though,
-               that this is not completely secure since the password needs to be unencrypted
-               before Commons VFS can use it.
-            </p>
-            <p>
-               To create an encrypted password do:
-            </p>
-            <code> java -cp commons-vfs-2.0.jar org.apache.commons.vfs2.util.EncryptUtil encrypt mypassword
-            </code>
-            <p>
-               where <i>mypassword</i> is the password you want to encrypt. The result of this will be a
-               single line of output containing uppercase hex characters.  For example,
-            </p>
-            <code>
- java -cp commons-vfs-2.0.jar org.apache.commons.vfs2.util.EncryptUtil encrypt WontUBee9
- D7B82198B272F5C93790FEB38A73C7B8
-            </code>
-            <p>
-              Then cut the output returned and paste it into the URL as:
-            </p>
-            <code>
- https://testuser:{D7B82198B272F5C93790FEB38A73C7B8}@myhost.com/svn/repos/vfstest/trunk
-            </code>
-            <p>
-               VFS treats a password enclosed in {} as being encrypted and will decrypt the password
-               before using it.
-            </p>
-        </section>
-
-        <section name="Local Files">
-
-            <p>Provides access to the files on the local physical file system.</p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>[file://]
-                    <i>absolute-path</i>
-                </code>
-            </p>
-
-            <p>
-                Where
-                <code>
-                    <i>absolute-path</i>
-                </code> is a valid absolute
-                file name for the local platform.  UNC names are supported
-                under Windows.
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>file:///home/someuser/somedir</code>
-                </li>
-                <li>
-                    <code>file:///C:/Documents and Settings</code>
-                </li>
-                <li>
-                    <code>file://///somehost/someshare/afile.txt</code>
-                </li>
-                <li>
-                    <code>/home/someuser/somedir</code>
-                </li>
-                <li>
-                    <code>c:\program files\some dir</code>
-                </li>
-                <li>
-                    <code>c:/program files/some dir</code>
-                </li>
-            </ul>
-        </section>
-
-        <section name="Zip, Jar and Tar">
-
-            <p>Provides read-only access to the contents of Zip, Jar and Tar files.</p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>zip://
-                    <i>arch-file-uri</i>[!
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-            <p>
-                <code>jar://
-                    <i>arch-file-uri</i>[!
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-            <p>
-                <code>tar://
-                    <i>arch-file-uri</i>[!
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-            <p>
-                <code>tgz://
-                    <i>arch-file-uri</i>[!
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-            <p>
-                <code>tbz2://
-                    <i>arch-file-uri</i>[!
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-
-            <p>
-                Where
-                <code>arch-file-uri</code> refers to a file of any
-                supported type, including other zip files.  Note: if you would like
-                to use the ! as normal character it must be escaped
-                using <code>%21</code>.<br />
-                <code>tgz</code> and <code>tbz2</code> are convenience for <code>tar:gz</code> and <code>tar:bz2</code>.
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>jar:../lib/classes.jar!/META-INF/manifest.mf</code>
-                </li>
-                <li>
-                    <code>zip:http://somehost/downloads/somefile.zip</code>
-                </li>
-                <li>
-                    <code>jar:zip:outer.zip!/nested.jar!/somedir</code>
-                </li>
-                <li>
-                    <code>jar:zip:outer.zip!/nested.jar!/some%21dir</code>
-                </li>
-                <li>
-                    <code>tar:gz:http://anyhost/dir/mytar.tar.gz!/mytar.tar!/path/in/tar/README.txt</code>
-                </li>
-                <li>
-                    <code>tgz:file://anyhost/dir/mytar.tgz!/somepath/somefile</code>
-                </li>
-            </ul>
-
-        </section>
-
-        <section name="gzip and bzip2">
-
-            <p>Provides read-only access to the contents of gzip and bzip2 files.</p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>gz://
-                    <i>compressed-file-uri</i>
-                </code>
-            </p>
-            <p>
-                <code>bz2://
-                    <i>compressed-file-uri</i>
-                </code>
-            </p>
-
-            <p>
-                Where
-                <code>compressed-file-uri</code> refers to a file of any
-                supported type. There is no need to add a <code>!</code> part to the URI if
-                you read the content of the file you always will get the uncompressed
-                version.
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>gz:/my/gz/file.gz</code>
-                </li>
-            </ul>
-
-        </section>
-
-        <section name="HDFS">
-
-            <p>
-              Provides (read-only) access to files in an Apache Hadoop File System (HDFS).
-              On Windows the <a href="testing.html">integration test</a> is disabled by default, as it
-              requires binaries.
-            </p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>hdfs://
-                    <i>hostname</i>[:
-                    <i>port</i>][
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>hdfs://somehost:8080/downloads/some_dir</code>
-                </li>
-                <li>
-                    <code>hdfs://somehost:8080/downloads/some_file.ext</code>
-                </li>
-            </ul>
-        </section>
-
-        <section name="HTTP and HTTPS">
-
-            <p>Provides access to files on an HTTP server.</p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>http://[
-                    <i>username</i>[:
-                    <i>password</i>]@]
-                    <i>hostname</i>[:
-                    <i>port</i>][
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-            <p>
-                <code>https://[
-                    <i>username</i>[:
-                    <i>password</i>]@]
-                    <i>hostname</i>[:
-                    <i>port</i>][
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-            <p>
-                 <b>File System Options</b>
-                 <ul>
-                   <li><b>proxyHost</b> The proxy host to connect through.</li>
-                   <li><b>proxyPort</b> The proxy port to use.</li>
-                   <li><b>cookies</b> An array of Cookies to add to the request.</li>
-                   <li><b>maxConnectionsPerHost</b> The maximum number of connections allowed to
-                   a specific host and port. The default is 5.</li>
-                   <li><b>maxTotalConnections</b> The maximum number of connections allowed to
-                   all hosts. The default is 50.</li>
-                 </ul>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>http://somehost:8080/downloads/somefile.jar</code>
-                </li>
-                <li>
-                    <code>http://myusername@somehost/index.html</code>
-                </li>
-            </ul>
-        </section>
-
-        <section name="WebDAV">
-
-            <p>Provides access to files on a WebDAV server.</p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>webdav://[
-                    <i>username</i>[:
-                    <i>password</i>]@]
-                    <i>hostname</i>[:
-                    <i>port</i>][
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>File System Options</b>
-                <ul>
-                  <li><b>versioning</b> true if versioning should be enabled</li>
-                  <li><b>creatorName</b> the user name to be identified with changes to a file. If
-                      not set the user name used to authenticate will be used.</li>
-                </ul>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>webdav://somehost:8080/dist</code>
-                </li>
-            </ul>
-        </section>
-
-        <section name="FTP">
-
-            <p>Provides access to the files on an FTP server.</p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>ftp://[
-                    <i>username</i>[:
-                    <i>password</i>]@]
-                    <i>hostname</i>[:
-                    <i>port</i>][
-                    <i>relative-path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>ftp://myusername:mypassword@somehost/pub/downloads/somefile.tgz</code>
-                </li>
-            </ul>
-
-            <p>
-                By default, the path is relative to the user's home directory. This can be changed with:
-            </p>
-            <p>
-                <code>FtpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(options, false);</code>
-            </p>
-
-        </section>
-
-        <section name="FTPS">
-
-            <p>Provides access to the files on an FTP server over SSL.</p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>ftps://[
-                    <i>username</i>[:
-                    <i>password</i>]@]
-                    <i>hostname</i>[:
-                    <i>port</i>][
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>ftps://myusername:mypassword@somehost/pub/downloads/somefile.tgz</code>
-                </li>
-            </ul>
-
-        </section>
-
-        <section name="SFTP">
-
-            <p>
-                Provides access to the files on an SFTP server (that is, an SSH
-                or SCP server).
-            </p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>sftp://[
-                    <i>username</i>[:
-                    <i>password</i>]@]
-                    <i>hostname</i>[:
-                    <i>port</i>][
-                    <i>relative-path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-            <ul>
-                <li>
-                    <code>sftp://myusername:mypassword@somehost/pub/downloads/somefile.tgz</code>
-                </li>
-            </ul>
-
-            <p>
-                By default, the path is relative to the user's home directory. This can be changed with:
-            </p>
-            <p>
-                <code>FtpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(options, false);</code>
-            </p>
-
-        </section>
-
-        <section name="CIFS">
-
-            <p>
-                The CIFS (sandbox) filesystem provides access to a CIFS server, such as
-                a Samba server, or a Windows share.
-            </p>
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>smb://[
-                    <i>username</i>[:
-                    <i>password</i>]@]
-                    <i>hostname</i>[:
-                    <i>port</i>][
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-
-            <ul>
-                <li>
-                    <code>smb://somehost/home</code>
-                </li>
-            </ul>
-
-        </section>
-
-        <section name="Temporary Files">
-
-            <p>
-                Provides access to a temporary file system, or scratchpad,
-                that is deleted when Commons VFS shuts down.  The temporary file
-                system is backed by a local file system.
-            </p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>tmp://[
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-
-            <ul>
-                <li>
-                    <code>tmp://dir/somefile.txt</code>
-                </li>
-            </ul>
-        </section>
-
-        <section name="res">
-
-            <p>
-                This is not really a filesystem, it just tries to lookup a resource using javas <code>ClassLoader.getResource()</code>
-                and creates a VFS url for further processing.
-            </p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>res://[
-                    <i>path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-
-            <ul>
-                <li>
-                    <code>res:path/in/classpath/image.png</code><br/>
-                    might result in
-                    <code>jar:file://my/path/to/images.jar!/path/in/classpath/image.png</code><br/>
-                </li>
-            </ul>
-        </section>
-
-        <section name="ram">
-
-            <p>
-                A filesystem which stores all the data in memory (one byte array for each file content).
-            </p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>ram://[
-                    <i>path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>File System Options</b>
-                <ul>
-                   <li><b>maxsize</b> Maximum filesystem size (total bytes of all file contents).</li>
-                </ul>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-
-            <ul>
-                <li>
-                    <code>ram:///any/path/to/file.txt</code>
-                </li>
-            </ul>
-        </section>
-
-        <section name="mime">
-
-            <p>
-                This (sandbox) filesystem can read mails and its attachements like archives.<br />
-                If a part in the parsed mail has no name, a dummy name will be generated.
-                The dummy name is: _body_part_X where X will be replaced by the part number.
-            </p>
-
-            <p>
-                <b>URI Format</b>
-            </p>
-
-            <p>
-                <code>mime://
-                    <i>mime-file-uri</i>[!
-                    <i>absolute-path</i>]
-                </code>
-            </p>
-
-            <p>
-                <b>Examples</b>
-            </p>
-
-            <ul>
-                <li>
-                    <code>mime:file:///your/path/mail/anymail.mime!/</code>
-                </li>
-                <li>
-                    <code>mime:file:///your/path/mail/anymail.mime!/filename.pdf</code>
-                </li>
-                <li>
-                    <code>mime:file:///your/path/mail/anymail.mime!/_body_part_0</code>
-                </li>
-            </ul>
-        </section>
-
-    </body>
-</document>
diff --git a/trunk/src/site/xdoc/index.xml b/trunk/src/site/xdoc/index.xml
deleted file mode 100644
index b77ccd6..0000000
--- a/trunk/src/site/xdoc/index.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.
--->
-
-<document>
-    <properties>
-        <title>Commons Virtual File System</title>
-        <author email="dev@commons.apache.org">Apache Commons Developers</author>
-    </properties>
-
-    <body>
-        <section name="Commons Virtual File System">
-
-            <p>
-                Commons VFS provides a single API for accessing
-                various different file systems. It presents a uniform view of
-                the files from various different sources, such as the files on
-                local disk, on an HTTP server, or inside a Zip archive.
-            </p>
-
-            <p>Some of the features of Commons VFS are:</p>
-            <ul>
-                <li>
-                    A single consistent API for accessing files of different
-                    types.
-                </li>
-                <li>Support for numerous
-                    <a href="filesystems.html">file system types</a>
-                    .
-                </li>
-                <li>
-                    Caching of file information. Caches information in-JVM,
-                    and optionally can cache remote file information on the
-                    local file system (replicator).
-                </li>
-                <li>Event delivery.</li>
-                <li>
-                    Support for logical file systems made up of files from
-                    various different file systems.
-                </li>
-                <li>
-                    Utilities for integrating Commons VFS into applications,
-                    such as a VFS-aware ClassLoader and URLStreamHandlerFactory.
-                </li>
-                <li>A set of VFS-enabled
-                    <a href="anttasks.html">Ant tasks</a>
-                    .
-                </li>
-            </ul>
-
-        </section>
-
-        <section name="Requirements">
-           <p>
-            Apache Commons VFS 2.1 requires Java 6. Many of the file systems require that optional components be present
-            in order for the protocol to be enabled. See the <a href="download.html">download and build</a> page for
-            information on the optional dependencies.
-          </p>
-          <p>
-           Apache Commons VFS 2.0 can be used in a Java 5 runtime.
-          </p>
-        </section>
-
-        <section name="News">
-          <p>
-            Apache Commons VFS 2.1 is a bugfix release to VFS 2.0. If you meet the requirements you should be able 
-            to replace 2.0 with 2.1 without the need for changes to API consumers. VFS 2.1 has introduced some now 
-            methods for provider interfaces (like <code>FileObject</code>). If you implement a VFS provider and use the
-            corresponding <code>Abstract*</code> or <code>Default*</code> classes, there should be no need to modify
-            the code or recompile the provider.
-            See the <a href="https://archive.apache.org/dist/commons/vfs/RELEASE_NOTES.txt">Release Notes</a> and the
-            <a href="commons-vfs2/clirr-report.html">Clirr Report</a> for details. VFS 2.1 adds a new read-only provider
-            for the Apache Hadoop (HDFS) File system.
-          </p><p>
-            Apache Commons VFS 2.0 adds support for FTPS and WebDav have been added in addition to many bugs
-            being fixed. Version 2.0 is not binary compatible with version 1.0. To insure that both 1.0 and 2.0 can
-            coexist version 2.0 has had its Maven groupId changed to org.apache.commons, its Maven artifact changed
-            to commons-vfs2, and the package names are now org.apache.commons.vfs2. The API changes are fairly minor
-            and will mostly impact provider implementations.
-          </p>
-        </section>
-
-    </body>
-</document>
-
diff --git a/trunk/src/site/xdoc/issue-tracking.xml b/trunk/src/site/xdoc/issue-tracking.xml
deleted file mode 100644
index 93c6fbe..0000000
--- a/trunk/src/site/xdoc/issue-tracking.xml
+++ /dev/null
@@ -1,102 +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.
--->
-<!--
- +======================================================================+
- |****                                                              ****|
- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
- |****                    DO NOT EDIT DIRECTLY                      ****|
- |****                                                              ****|
- +======================================================================+
- | TEMPLATE FILE: issue-tracking-template.xml                           |
- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
- +======================================================================+
- |                                                                      |
- | 1) Re-generate using: mvn commons:jira-page                          |
- |                                                                      |
- | 2) Set the following properties in the component's pom:              |
- |    - commons.jira.id  (required, alphabetic, upper case)             |
- |    - commons.jira.pid (required, numeric)                            |
- |                                                                      |
- | 3) Example Properties                                                |
- |                                                                      |
- |  <properties>                                                        |
- |    <commons.jira.id>MATH</commons.jira.id>                           |
- |    <commons.jira.pid>12310485</commons.jira.pid>                     |
- |  </properties>                                                       |
- |                                                                      |
- +======================================================================+
--->
-<document>
-  <properties>
-    <title>Apache Commons VFS Issue tracking</title>
-    <author email="dev@commons.apache.org">Commons Documentation Team</author>
-  </properties>
-  <body>
-
-    <section name="Apache Commons VFS Issue tracking">
-      <p>
-      Apache Commons VFS uses <a href="http://issues.apache.org/jira/">ASF JIRA</a> for tracking issues.
-      See the <a href="http://issues.apache.org/jira/browse/VFS">Apache Commons VFS JIRA project page</a>.
-      </p>
-
-      <p>
-      To use JIRA you may need to <a href="http://issues.apache.org/jira/secure/Signup!default.jspa">create an account</a>
-      (if you have previously created/updated Commons issues using Bugzilla an account will have been automatically
-      created and you can use the <a href="http://issues.apache.org/jira/secure/ForgotPassword!default.jspa">Forgot Password</a>
-      page to get a new password).
-      </p>
-
-      <p>
-      If you would like to report a bug, or raise an enhancement request with
-      Apache Commons VFS please do the following:
-      <ol>
-        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310495&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=3&amp;status=4">Search existing open bugs</a>.
-            If you find your issue listed then please add a comment with your details.</li>
-        <li><a href="mail-lists.html">Search the mailing list archive(s)</a>.
-            You may find your issue or idea has already been discussed.</li>
-        <li>Decide if your issue is a bug or an enhancement.</li>
-        <li>Submit either a <a href="http://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310495&amp;issuetype=1&amp;priority=4&amp;assignee=-1">bug report</a>
-            or <a href="http://issues.apache.org/jira/secure/CreateIssueDetails!init.jspa?pid=12310495&amp;issuetype=4&amp;priority=4&amp;assignee=-1">enhancement request</a>.</li>
-      </ol>
-      </p>
-
-      <p>
-      Please also remember these points:
-      <ul>
-        <li>the more information you provide, the better we can help you</li>
-        <li>test cases are vital, particularly for any proposed enhancements</li>
-        <li>the developers of Apache Commons VFS are all unpaid volunteers</li>
-      </ul>
-      </p>
-
-      <p>
-      For more information on subversion and creating patches see the
-      <a href="http://www.apache.org/dev/contributors.html">Apache Contributors Guide</a>.
-      </p>
-
-      <p>
-      You may also find these links useful:
-      <ul>
-        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310495&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=1&amp;status=3&amp;status=4">All Open Apache Commons VFS bugs</a></li>
-        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310495&amp;sorter/field=issuekey&amp;sorter/order=DESC&amp;status=5&amp;status=6">All Resolved Apache Commons VFS bugs</a></li>
-        <li><a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;pid=12310495&amp;sorter/field=issuekey&amp;sorter/order=DESC">All Apache Commons VFS bugs</a></li>
-      </ul>
-      </p>
-    </section>
-  </body>
-</document>
diff --git a/trunk/src/site/xdoc/mail-lists.xml b/trunk/src/site/xdoc/mail-lists.xml
deleted file mode 100644
index 4f3ef47..0000000
--- a/trunk/src/site/xdoc/mail-lists.xml
+++ /dev/null
@@ -1,205 +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.
--->
-<!--
- +======================================================================+
- |****                                                              ****|
- |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
- |****                    DO NOT EDIT DIRECTLY                      ****|
- |****                                                              ****|
- +======================================================================+
- | TEMPLATE FILE: mail-lists-template.xml                               |
- | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
- +======================================================================+
- |                                                                      |
- | 1) Re-generate using: mvn commons:mail-page                          |
- |                                                                      |
- | 2) Set the following properties in the component's pom:              |
- |    - commons.componentid (required, alphabetic, lower case)          |
- |                                                                      |
- | 3) Example Properties                                                |
- |                                                                      |
- |  <properties>                                                        |
- |    <commons.componentid>math</commons.componentid>                   |
- |  </properties>                                                       |
- |                                                                      |
- +======================================================================+
--->
-<document>
-  <properties>
-    <title>Apache Commons VFS Mailing Lists</title>
-    <author email="dev@commons.apache.org">Apache Commons Documentation Team</author>
-  </properties>
-  <body>
-
-    <section name="Overview">
-      <p>
-        <a href="index.html">Apache Commons VFS</a> shares mailing lists with all the other
-        <a href="http://commons.apache.org/components.html">Commons Components</a>.
-        To make it easier for people to only read messages related to components they are interested in,
-        the convention in Commons is to prefix the subject line of messages with the component's name,
-        for example:
-        <ul>
-          <li>[vfs] Problem with the ...</li>
-        </ul>
-      </p>
-      <p>
-        Questions related to the usage of Apache Commons VFS should be posted to the
-        <a href="http://mail-archives.apache.org/mod_mbox/commons-user/">User List</a>.
-        <br />
-        The <a href="http://mail-archives.apache.org/mod_mbox/commons-dev/">Developer List</a>
-        is for questions and discussion related to the development of Apache Commons VFS.
-        <br />
-        Please do not cross-post; developers are also subscribed to the user list.
-        <br />
-        You must be subscribed to post to the mailing lists.  Follow the Subscribe links below
-        to subscribe.
-      </p>
-      <p>
-        <strong>Note:</strong> please don't send patches or attachments to any of the mailing lists.
-        Patches are best handled via the <a href="issue-tracking.html">Issue Tracking</a> system.
-        Otherwise, please upload the file to a public server and include the URL in the mail.
-      </p>
-    </section>
-
-    <section name="Apache Commons VFS Mailing Lists">
-      <p>
-        <strong>Please prefix the subject line of any messages for <a href="index.html">Apache Commons VFS</a>
-        with <i>[vfs]</i></strong> - <i>thanks!</i>
-        <br />
-        <br />
-      </p>
-
-      <table>
-        <tr>
-          <th>Name</th>
-          <th>Subscribe</th>
-          <th>Unsubscribe</th>
-          <th>Post</th>
-          <th>Archive</th>
-          <th>Other Archives</th>
-        </tr>
-
-
-        <tr>
-          <td>
-            <strong>Commons User List</strong>
-            <br /><br />
-            Questions on using Apache Commons VFS.
-            <br /><br />
-          </td>
-          <td><a href="mailto:user-subscribe@commons.apache.org">Subscribe</a></td>
-          <td><a href="mailto:user-unsubscribe@commons.apache.org">Unsubscribe</a></td>
-          <td><a href="mailto:user@commons.apache.org?subject=[vfs]">Post</a></td>
-          <td><a href="http://mail-archives.apache.org/mod_mbox/commons-user/">mail-archives.apache.org</a></td>
-          <td><a href="http://markmail.org/list/org.apache.commons.users/">markmail.org</a><br />
-              <a href="http://www.mail-archive.com/user@commons.apache.org/">www.mail-archive.com</a><br />
-              <a href="http://news.gmane.org/gmane.comp.jakarta.commons.devel">news.gmane.org</a>
-          </td>
-        </tr>
-
-
-        <tr>
-          <td>
-            <strong>Commons Developer List</strong>
-            <br /><br />
-            Discussion of development of Apache Commons VFS.
-            <br /><br />
-          </td>
-          <td><a href="mailto:dev-subscribe@commons.apache.org">Subscribe</a></td>
-          <td><a href="mailto:dev-unsubscribe@commons.apache.org">Unsubscribe</a></td>
-          <td><a href="mailto:dev@commons.apache.org?subject=[vfs]">Post</a></td>
-          <td><a href="http://mail-archives.apache.org/mod_mbox/commons-dev/">mail-archives.apache.org</a></td>
-          <td><a href="http://markmail.org/list/org.apache.commons.dev/">markmail.org</a><br />
-              <a href="http://www.mail-archive.com/dev@commons.apache.org/">www.mail-archive.com</a><br />
-              <a href="http://news.gmane.org/gmane.comp.jakarta.commons.devel">news.gmane.org</a>
-          </td>
-        </tr>
-
-
-        <tr>
-          <td>
-            <strong>Commons Issues List</strong>
-            <br /><br />
-            Only for e-mails automatically generated by the <a href="issue-tracking.html">issue tracking</a> system.
-            <br /><br />
-          </td>
-          <td><a href="mailto:issues-subscribe@commons.apache.org">Subscribe</a></td>
-          <td><a href="mailto:issues-unsubscribe@commons.apache.org">Unsubscribe</a></td>
-          <td><i>read only</i></td>
-          <td><a href="http://mail-archives.apache.org/mod_mbox/commons-issues/">mail-archives.apache.org</a></td>
-          <td><a href="http://markmail.org/list/org.apache.commons.issues/">markmail.org</a><br />
-              <a href="http://www.mail-archive.com/issues@commons.apache.org/">www.mail-archive.com</a>
-          </td>
-        </tr>
-
-
-        <tr>
-          <td>
-            <strong>Commons Commits List</strong>
-            <br /><br />
-            Only for e-mails automatically generated by the <a href="source-repository.html">source control</a> sytem.
-            <br /><br />
-          </td>
-          <td><a href="mailto:commits-subscribe@commons.apache.org">Subscribe</a></td>
-          <td><a href="mailto:commits-unsubscribe@commons.apache.org">Unsubscribe</a></td>
-          <td><i>read only</i></td>
-          <td><a href="http://mail-archives.apache.org/mod_mbox/commons-commits/">mail-archives.apache.org</a></td>
-          <td><a href="http://markmail.org/list/org.apache.commons.commits/">markmail.org</a><br />
-              <a href="http://www.mail-archive.com/commits@commons.apache.org/">www.mail-archive.com</a>
-          </td>
-        </tr>
-
-      </table>
-
-    </section>
-    <section name="Apache Mailing Lists">
-      <p>
-        Other mailing lists which you may find useful include:
-      </p>
-
-      <table>
-        <tr>
-          <th>Name</th>
-          <th>Subscribe</th>
-          <th>Unsubscribe</th>
-          <th>Post</th>
-          <th>Archive</th>
-          <th>Other Archives</th>
-        </tr>
-        <tr>
-          <td>
-            <strong>Apache Announce List</strong>
-            <br /><br />
-            General announcements of Apache project releases.
-            <br /><br />
-          </td>
-          <td><a class="externalLink" href="mailto:announce-subscribe@apache.org">Subscribe</a></td>
-          <td><a class="externalLink" href="mailto:announce-unsubscribe@apache.org">Unsubscribe</a></td>
-          <td><i>read only</i></td>
-          <td><a class="externalLink" href="http://mail-archives.apache.org/mod_mbox/www-announce/">mail-archives.apache.org</a></td>
-          <td><a class="externalLink" href="http://markmail.org/list/org.apache.announce/">markmail.org</a><br />
-              <a class="externalLink" href="http://old.nabble.com/Apache-News-and-Announce-f109.html">old.nabble.com</a><br />
-              <a class="externalLink" href="http://www.mail-archive.com/announce@apache.org/">www.mail-archive.com</a><br />
-              <a class="externalLink" href="http://news.gmane.org/gmane.comp.apache.announce">news.gmane.org</a>
-          </td>
-        </tr>
-      </table>
-
-    </section>
-  </body>
-</document>
diff --git a/trunk/src/site/xdoc/testing.xml b/trunk/src/site/xdoc/testing.xml
deleted file mode 100644
index 3903a5d..0000000
--- a/trunk/src/site/xdoc/testing.xml
+++ /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.
--->
-<document>
-    <properties>
-        <title>Testing</title>
-        <author email="dev@commons.apache.org">Apache Commons Developers</author>
-    </properties>
-
-    <body>
-        <section name="VFS Test Suite">
-            <p>
-              Apache Commons VFS comes with a suite of (nearly 2000) tests (in <code>core/src/test</code>). The JUnit framework
-              is used, and executed at build time via the Maven
-              <a href="http://maven.apache.org/surefire/maven-surefire-plugin/">Surefire plugin</a> by the <code>mvn test</code> goal.
-              It you plan to contribute a patch for a bug or feature, make sure to also provide a test
-              which can reproduce the bug or exercise the new feature. Also run the whole test suite against the patched code.
-            </p>
-            <p>
-              The <a href="http://junit.org">JUnit</a> tests will execute unit, compile but also integration tests to test the API and the implementation.
-              The local file provider is tested in a directory of the local file system. Virtual providers (compression and archive)
-              and resource access is based on this test directory as well. For testing the other providers some test servers are started.
-              The following table described the details (for versions have a look in the
-              <a href="commons-vfs2/dependencies.html#test">dependency report</a>):
-            </p>
-<table><tr><th>Provider</th><th>Tested Against</th><th>External</th></tr>
-<tr><td>ftp</td><td><a href="http://mina.apache.org/ftpserver-project/">Apache FtpServer</a></td><td>-Pftp -Dtest.ftp.uri=ftp://test:test@localhost:123</td></tr>
-<tr><td>ftps</td><td><a href="http://mina.apache.org/ftpserver-project/">Apache FtpServer</a></td><td>-Pftps -Dtest.ftps.uri=ftps://test:test@localhost:123</td></tr>
-<tr><td>hdfs</td><td>Apache Hadoop HDFS (<a href="https://wiki.apache.org/hadoop/HowToDevelopUnitTests">MiniDFSCluster</a>)</td><td>-P!no-test-hdfs (see below)</td></tr>
-<tr><td>http</td><td>NHttpServer (local adaption of org.apache.http.examples.nio.NHttpServer)</td><td>-Phttp -Dtest.http.uri=http://localhost:123</td></tr>
-<tr><td>https</td><td>(not tested)</td><td>N/A</td></tr>
-<tr><td>jar</td><td>Local File Provider</td><td>N/A</td></tr>
-<tr><td>local</td><td>Local File system</td><td>N/A</td></tr>
-<tr><td>ram</td><td>In Memory test</td><td>N/A</td></tr>
-<tr><td>res</td><td>Local File Provider / JAR Provider</td><td>N/A</td></tr>
-<tr><td>sftp</td><td><a href="http://mina.apache.org/sshd-project/index.html">Apache SSHD</a></td><td>-Psftp -Dtest.sftp.uri=sftp://testtest@localhost:123</td></tr>
-<tr><td>tmp</td><td>Local File system</td><td>N/A</td></tr>
-<tr><td>url</td><td>NHttpServer (local adaption of org.apache.http.examples.nio.NHttpServer)<br/>Local File system</td><td>-Phttp -Dtest.http.uri=http://localhost:128</td></tr>
-<tr><td>webdav</td><td><a href="http://jackrabbit.apache.org/standalone-server.html">Apache Jackrabbit Standalone Server</a></td><td>-Pwebdav -Dtest.webdav.uri=webdav://admin@localhost:123/repository/default</td></tr>
-<!-- <tr><td>webdavs</td><td>Apache Jackrabbit Standalone</td><td>-Pwebdav -Dtest.webdav.uri=webdav://admin@localhost:123/repository/default</td></tr> -->
-<tr><td>zip</td><td>Local File Provider</td><td>N/A</td></tr>
-<tr><td>smb (sandbox)</td><td>(not tested)</td><td>-Psmb -Dtest.smb.uri=smb://DOMAIN\User:Pass@host/C$/commons-vfs2/core/target/test-classes/test-data</td></tr>
-</table>
-            <p>
-              Some tests are operating-system specific. Some Windows File Name tests are only run on Windows
-              and the HDFS test is skipped in case of Windows (because it requires additional binaries). It is therefore
-              a good idea to run the tests at least on Windows and Linux/Unix before release. The <code>smb</code> provider 
-              from the sandbox is not tested unless you specify a <code>-Dtest.smb.uri</code> and the <code>-Psmb</code> profile.
-            </p>
-        </section>
-        <section name="Running HDFS tests on Windows">
-            <p>
-              The HDFS integration tests use the HDFS MiniCluster. This does not work on Windows without special preparation:
-              you need to build and provide the (2.6.0) native binary (<code>winutils.exe</code>) and library (<code>hadoop.dll</code>) for the
-              MiniCluster used in the test cases. Both files are not part of the Hadoop Commons 2.6.0
-              distribution (<a href="https://issues.apache.org/jira/browse/HADOOP-10051">HADOOP-10051</a>). After you built 
-              a compatible version, put them on your Windows <code>PATH</code> and then run the tests
-              by disabling the <code>no-test-hdfs</code> profile, or by requesting explicitly the excluded tests:
-            </p>
-            <source><![CDATA[
-> set VFS=C:\commons-vfs2-project\core
-> cd %VFS%\core
-> mkdir bin\
-> copy \temp\winutils.exe \temp\hadoop.dll bin\
-> set HADOOP_HOME=%VFS%\core
-> set PATH=%VFS%\core\bin;%PATH%
-> winutils.exe systeminfo
-8518668288,8520572928,4102033408,4544245760,8,1600000,6042074
-> mvn -P!no-test-hdfs clean test     # runs all test and HDFS tests
-> mvn clean test -Dtest=org.apache.commons.vfs2.provider.hdfs.test.HdfsFileProviderTest,org.apache.commons.vfs2.provider.hdfs.test.HdfsFileProviderTestCase
-...
-Tests run: 13, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.006 sec - in org.apache.commons.vfs2.provider.hdfs.test.HdfsFileProviderTest
-Tests run: 77, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 11.728 sec - in org.apache.commons.vfs2.provider.hdfs.test.HdfsFileProviderTestCase]]></source>
-        </section>
-
-        <section name="Running SMB tests against Windows">
-            <p>
-              The SMB provider from the sandbox project cannot be tested automatically. You need to prepare a CIFS/SMB server
-              to test it manually. If you develop on Windows, the following procedure uses the Windows File Sharing and does
-              not require to prepare the data directory (as you can directly point to your workspace):
-            </p>
-            <source><![CDATA[
-> set VFS=C:\commons-vfs2-project
-> cd %VFS%
-> mvn clean install -Pinclude-sandbox -DskipTests  # prepares test data and parent
-> cd %VFS%\sandbox
-> mvn test -Psmb -Dtest.smb.url=smb//Domain\User:Pass@yourhost/C$/commons-vfs2-project/core/target/test-classes/test-data
-...
-Tests run: 82, Failures: 0, Errors: 1, Skipped: 0]]></source>
-            <p>
-              Note: there is a known test failure in this case, see
-              <a href="https://issues.apache.org/jira/browse/VFS-562">VFS-562</a> on the JIRA bug tracker if you want
-              to help.
-            </p>
-        </section>
-
-        <section name="Running tests with external servers">
-            <p>
-              In order to test VFS for compatibility with other implementations (or in case of SMB to
-              test it manually) some of the integration tests can be configured to connect to custom URL.
-              This generally involves preparing the server, selecting a profile and specifying the URL in
-              a system property (see table above).
-            </p>
-
-            <subsection name="Preparing external Servers">
-                <p>
-                  If you want to run the tests against external servers, run <code>mvn install</code>.
-                  This will compile all the source and test source and then run all the tests
-                  for providers that use the local file system.
-                  After running the maven build, the test data can be found in
-                  <code>core/target/test-classes/test-data/</code>.
-                </p>
-                <p>
-                  Each repository/server should contain the following list of files for the tests to
-                  complete successfully.
-                </p>
-                <source><![CDATA[
-code/sealed/AnotherClass.class
-code/ClassToLoad.class
-largefile.tar.gz
-nested.jar
-nested.tar
-nested.tbz2
-nested.tgz
-nested.zip
-read-tests/dir1/file1.txt
-read-tests/dir1/file2.txt
-read-tests/dir1/file3.txt
-read-tests/dir1/subdir1/file1.txt
-read-tests/dir1/subdir1/file2.txt
-read-tests/dir1/subdir1/file3.txt
-read-tests/dir1/subdir2/file1.txt
-read-tests/dir1/subdir2/file2.txt
-read-tests/dir1/subdir2/file3.txt
-read-tests/dir1/subdir3/file1.txt
-read-tests/dir1/subdir3/file2.txt
-read-tests/dir1/subdir3/file3.txt
-read-tests/empty.txt
-read-tests/file1.txt
-read-tests/file space.txt
-read-tests/file%.txt
-test-hash-#test.txt
-test.jar
-test.mf
-test.policy
-test.tar
-test.tbz2
-test.tgz
-test.zip
-write-tests/]]></source>
-                <p>
-                  The Apache Commons Wiki contains a list of configuration examples for external servers.
-                  Please consider contributing if you have set up a specific scenario:
-                  <a href="https://wiki.apache.org/commons/VfsTestServers">https://wiki.apache.org/commons/VfsTestServers</a>.
-                </p>
-            </subsection>
-        </section>
-    </body>
-</document>