You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by im...@apache.org on 2005/06/19 09:25:20 UTC
svn commit: r191323 [1/2] - in /jakarta/commons/proper/vfs/trunk: ./
src/java/org/apache/commons/vfs/ src/java/org/apache/commons/vfs/impl/
src/java/org/apache/commons/vfs/provider/
src/java/org/apache/commons/vfs/provider/ftp/
src/java/org/apache/commons/vfs/provider/http/
src/java/org/apache/commons/vfs/provider/jar/
src/java/org/apache/commons/vfs/provider/local/
src/java/org/apache/commons/vfs/provider/sftp/
src/java/org/apache/commons/vfs/provider/smb/
src/java/org/apache/commons/vfs/provider/tar/
src/java/org/apache/commons/vfs/provider/temp/
src/java/org/apache/commons/vfs/provider/url/
src/java/org/apache/commons/vfs/provider/webdav/
src/java/org/apache/commons/vfs/provider/zip/ src/test-data/
src/test-data/basedir/ src/test/org/apache/commons/vfs/
src/test/org/apache/commons/vfs/provider/smb/test/
src/test/org/apache/commons/vfs/provider/test/
src/test/org/apache/commons/vfs/test/ src/utils/ xdocs/
Author: imario
Date: Sun Jun 19 00:25:16 2005
New Revision: 191323
URL: http://svn.apache.org/viewcvs?rev=191323&view=rev
Log:
*) Again refactored the filename parsing stuff. Still room for improvements/cleanup but we are on the way.
Now VFS only escapes parts of the uri which are internally used. That is:
% - generally
! - sometimes e.g. archive base filesystems (jar/tar)
? - for http/webdav filesystems for special handling of the query string
*) FileObject.findFiles now returns null if the base file do not exist.
Submitted By: tcurdt -at- apache.org
*) SftpFileSystem now correctly handles files with space in its name
*) Moved on to commons-net 1.4 but still backward compatible to 1.2
*) src/utils: unix script to recreated the archive files used by some tests
Added:
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileName.java (with props)
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/HostFileNameParser.java (with props)
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileName.java (with props)
jakarta/commons/proper/vfs/trunk/src/test-data/basedir/file space.txt (with props)
jakarta/commons/proper/vfs/trunk/src/utils/
jakarta/commons/proper/vfs/trunk/src/utils/create_archives.sh (with props)
Removed:
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/BasicFileName.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/url/UrlFileName.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/webdav/WebdavFileNameParser.java
Modified:
jakarta/commons/proper/vfs/trunk/build.xml
jakarta/commons/proper/vfs/trunk/project.xml
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/FileName.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultFileSystemManager.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultVfsComponentContext.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/StandardFileSystemManager.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileName.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileObject.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileSystem.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractLayeredFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractOriginatingFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/GenericFileName.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileName.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/UriParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/VfsComponentContext.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileObject.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/jar/JarFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/DefaultLocalFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/GenericFileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileName.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileSystem.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/WindowsFileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileName.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileNameParser.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileSystem.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/tar/TarFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/temp/TemporaryFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/url/UrlFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/webdav/WebdavFileObject.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/webdav/WebdavFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/zip/ZipFileProvider.java
jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/zip/ZipFileSystem.java
jakarta/commons/proper/vfs/trunk/src/test-data/nested.jar
jakarta/commons/proper/vfs/trunk/src/test-data/nested.tar
jakarta/commons/proper/vfs/trunk/src/test-data/nested.tbz2
jakarta/commons/proper/vfs/trunk/src/test-data/nested.tgz
jakarta/commons/proper/vfs/trunk/src/test-data/nested.zip
jakarta/commons/proper/vfs/trunk/src/test-data/test.jar
jakarta/commons/proper/vfs/trunk/src/test-data/test.tar
jakarta/commons/proper/vfs/trunk/src/test-data/test.tbz2
jakarta/commons/proper/vfs/trunk/src/test-data/test.tgz
jakarta/commons/proper/vfs/trunk/src/test-data/test.zip
jakarta/commons/proper/vfs/trunk/src/test/org/apache/commons/vfs/RunTest.java
jakarta/commons/proper/vfs/trunk/src/test/org/apache/commons/vfs/provider/smb/test/FileNameTestCase.java
jakarta/commons/proper/vfs/trunk/src/test/org/apache/commons/vfs/provider/test/GenericFileNameTestCase.java
jakarta/commons/proper/vfs/trunk/src/test/org/apache/commons/vfs/test/AbstractProviderTestCase.java
jakarta/commons/proper/vfs/trunk/src/test/org/apache/commons/vfs/test/NamingTests.java
jakarta/commons/proper/vfs/trunk/xdocs/todo.xml
Modified: jakarta/commons/proper/vfs/trunk/build.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/build.xml?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/build.xml (original)
+++ jakarta/commons/proper/vfs/trunk/build.xml Sun Jun 19 00:25:16 2005
@@ -185,7 +185,7 @@
</get>
<get dest="${libdir}/junit-3.8.1.jar" usetimestamp="true" ignoreerrors="true" src="http://www.ibiblio.org/maven/junit/jars/junit-3.8.1.jar">
</get>
- <get dest="${libdir}/commons-net-1.2.1.jar" usetimestamp="true" ignoreerrors="true" src="http://www.ibiblio.org/maven/commons-net/jars/commons-net-1.2.1.jar">
+ <get dest="${libdir}/commons-net-1.4.0.jar" usetimestamp="true" ignoreerrors="true" src="http://www.ibiblio.org/maven/commons-net/jars/commons-net-1.4.0.jar">
</get>
<get dest="${libdir}/commons-logging-1.0.4.jar" usetimestamp="true" ignoreerrors="true" src="http://www.ibiblio.org/maven/commons-logging/jars/commons-logging-1.0.4.jar">
</get>
Modified: jakarta/commons/proper/vfs/trunk/project.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/project.xml?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/project.xml (original)
+++ jakarta/commons/proper/vfs/trunk/project.xml Sun Jun 19 00:25:16 2005
@@ -97,7 +97,7 @@
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
- <version>1.2.1</version>
+ <version>1.4.0</version>
</dependency>
<dependency>
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/FileName.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/FileName.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/FileName.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/FileName.java Sun Jun 19 00:25:16 2005
@@ -110,6 +110,11 @@
String getRootURI();
/**
+ * find the root of the filesystem
+ */
+ public FileName getRoot();
+
+ /**
* Returns the file name of the parent of this file. The root of a
* file system has no parent.
*
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/Resources.properties Sun Jun 19 00:25:16 2005
@@ -81,7 +81,7 @@
# AbstractFileSystem
vfs.provider/files-cache-missing.error=No files-cache implementation set.
-vfs.provider/mismatched-fs-for-name.error=Incorrect file system URI for in name "{0}", was expecting "{1}".
+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.
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultFileSystemManager.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultFileSystemManager.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultFileSystemManager.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultFileSystemManager.java Sun Jun 19 00:25:16 2005
@@ -555,13 +555,13 @@
/**
* Resolves a name, relative to the root.
*
- * @param root the base filename
+ * @param base the base filename
* @param name the name
* @param scope the {@link NameScope}
* @return
* @throws FileSystemException
*/
- public FileName resolveName(final FileName root,
+ public FileName resolveName(final FileName base,
final String name,
final NameScope scope)
throws FileSystemException
@@ -576,7 +576,7 @@
{
// Supplied path is not absolute
buffer.insert(0, FileName.SEPARATOR_CHAR);
- buffer.insert(0, root.getPath());
+ buffer.insert(0, base.getPath());
}
//// UriParser.canonicalizePath(buffer, 0, name.length());
@@ -586,13 +586,27 @@
// Check the name is ok
final String resolvedPath = buffer.toString();
- if (!AbstractFileName.checkName(root.getPath(), resolvedPath, scope))
+ if (!AbstractFileName.checkName(base.getPath(), resolvedPath, scope))
{
throw new FileSystemException("vfs.provider/invalid-descendent-name.error", name);
}
- // todo: pass this down to the fileProvider
- return ((AbstractFileName) root).createName(resolvedPath);
+ String scheme = base.getScheme();
+ final FileProvider provider = (FileProvider) 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);
+ String fullPath = base.getRootURI() + resolvedPath;
+
+ return provider.parseUri(base, fullPath);
+ }
+
+ // todo: avoid fallback to this point
+ // this happens if we have a virtual filesystem (no provider for scheme)
+ return ((AbstractFileName) base).createName(null, resolvedPath);
}
public FileName resolveURI(String uri) throws FileSystemException
@@ -612,7 +626,7 @@
final FileProvider provider = (FileProvider) providers.get(scheme);
if (provider != null)
{
- return provider.parseUri(scheme, uri);
+ return provider.parseUri(null, uri);
}
// Otherwise, assume a local file
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultVfsComponentContext.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultVfsComponentContext.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultVfsComponentContext.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/DefaultVfsComponentContext.java Sun Jun 19 00:25:16 2005
@@ -15,11 +15,11 @@
*/
package org.apache.commons.vfs.impl;
+import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemManager;
import org.apache.commons.vfs.FileSystemOptions;
-import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.provider.FileReplicator;
import org.apache.commons.vfs.provider.TemporaryFileStore;
import org.apache.commons.vfs.provider.VfsComponentContext;
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/StandardFileSystemManager.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/StandardFileSystemManager.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/StandardFileSystemManager.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/StandardFileSystemManager.java Sun Jun 19 00:25:16 2005
@@ -27,15 +27,15 @@
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
-import java.net.URL;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.MalformedURLException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.StringTokenizer;
-import java.util.jar.JarFile;
import java.util.jar.JarEntry;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
+import java.util.jar.JarFile;
/**
* A {@link org.apache.commons.vfs.FileSystemManager} that configures itself
Added: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileName.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileName.java?rev=191323&view=auto
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileName.java (added)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileName.java Sun Jun 19 00:25:16 2005
@@ -0,0 +1,43 @@
+/*
+ * 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.vfs.impl;
+
+import org.apache.commons.vfs.FileName;
+import org.apache.commons.vfs.provider.AbstractFileName;
+
+/**
+ * A simple Filename to hold the scheme for to be created virtual filesytsem.
+ *
+ * @author imario@apache.org
+ * @version $Revision$ $Date$
+ */
+public class VirtualFileName extends AbstractFileName
+{
+ public VirtualFileName(final String rootUri, final String scheme, final String absPath)
+ {
+ super(rootUri, scheme, absPath);
+ }
+
+ public FileName createName(String rootURI, String absPath)
+ {
+ return new VirtualFileName(rootURI, getScheme(), absPath);
+ }
+
+ protected void appendRootUri(StringBuffer buffer)
+ {
+ buffer.append(getScheme());
+ }
+}
Propchange: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileName.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileName.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileName.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/impl/VirtualFileProvider.java Sun Jun 19 00:25:16 2005
@@ -19,7 +19,6 @@
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.provider.AbstractVfsContainer;
-import org.apache.commons.vfs.provider.BasicFileName;
/**
@@ -38,7 +37,9 @@
throws FileSystemException
{
final FileName rootName =
- new BasicFileName(rootFile.getName(), FileName.ROOT_PATH);
+ getContext().getFileSystemManager().resolveName(rootFile.getName(), FileName.ROOT_PATH);
+ // final FileName rootName =
+ // new BasicFileName(rootFile.getName(), FileName.ROOT_PATH);
final VirtualFileSystem fs = new VirtualFileSystem(rootName, null);
addComponent(fs);
fs.addJunction(FileName.ROOT_PATH, rootFile);
@@ -51,7 +52,9 @@
public FileObject createFileSystem(final String rootUri) throws FileSystemException
{
final FileName rootName =
- new BasicFileName(rootUri, FileName.ROOT_PATH);
+ new VirtualFileName(null, rootUri, FileName.ROOT_PATH);
+ // final FileName rootName =
+ // new BasicFileName(rootUri, FileName.ROOT_PATH);
final VirtualFileSystem fs = new VirtualFileSystem(rootName, null);
addComponent(fs);
return fs.getRoot();
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileName.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileName.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileName.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileName.java Sun Jun 19 00:25:16 2005
@@ -34,13 +34,16 @@
// Cached stuff
private String uri;
private String baseName;
- private String rootUri;
+ // will be set by BasicFileName too
+ protected String rootUri;
private String extension;
private String decodedAbsPath;
- public AbstractFileName(final String scheme,
+ public AbstractFileName(final String rootUri,
+ final String scheme,
final String absPath)
{
+ this.rootUri = rootUri;
this.scheme = scheme;
if (absPath != null && absPath.length() > 0)
{
@@ -106,7 +109,7 @@
/**
* Factory method for creating name instances.
*/
- public abstract FileName createName(String absPath);
+ public abstract FileName createName(String rootURI, String absPath);
/**
* Builds the root URI for this file name. Note that the root URI must not
@@ -175,7 +178,21 @@
{
parentPath = getPath().substring(0, idx);
}
- return createName(parentPath);
+ return createName(getRootURI(), parentPath);
+ }
+
+ /**
+ * find the root of the filesystem
+ */
+ public FileName getRoot()
+ {
+ FileName root = this;
+ while (root.getParent() != null)
+ {
+ root = root.getParent();
+ }
+
+ return root;
}
/**
@@ -193,12 +210,17 @@
{
if (uri == null)
{
- final StringBuffer buffer = new StringBuffer();
- appendRootUri(buffer);
- buffer.append(getPath());
- uri = buffer.toString();
+ uri = createURI();
}
return uri;
+ }
+
+ protected String createURI()
+ {
+ final StringBuffer buffer = new StringBuffer();
+ appendRootUri(buffer);
+ buffer.append(getPath());
+ return buffer.toString();
}
/**
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileObject.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileObject.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileObject.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileObject.java Sun Jun 19 00:25:16 2005
@@ -953,9 +953,16 @@
/**
* Finds the set of matching descendents of this file, in depthwise
* order.
+ *
+ * @return list of files or null if the base file (this object) do not exist
*/
public FileObject[] findFiles(final FileSelector selector) throws FileSystemException
{
+ if (!exists())
+ {
+ return null;
+ }
+
final ArrayList list = new ArrayList();
findFiles(selector, true, list);
return (FileObject[]) list.toArray(new FileObject[list.size()]);
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileProvider.java Sun Jun 19 00:25:16 2005
@@ -15,12 +15,12 @@
*/
package org.apache.commons.vfs.provider;
+import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystem;
import org.apache.commons.vfs.FileSystemConfigBuilder;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
-import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.provider.local.GenericFileNameParser;
import java.util.Iterator;
@@ -153,14 +153,14 @@
/**
* Parses an absolute URI.
*
- * @param schme
+ * @param base The base file - if null the <code>uri</code> needs to be absolute
* @param uri The URI to parse.
*/
- public FileName parseUri(String schme, String uri) throws FileSystemException
+ public FileName parseUri(FileName base, String uri) throws FileSystemException
{
if (getFileNameParser() != null)
{
- return getFileNameParser().parseUri(getContext(), uri);
+ return getFileNameParser().parseUri(getContext(), base, uri);
}
throw new FileSystemException("vfs.provider/filename-parser-missing.error");
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileSystem.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileSystem.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileSystem.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractFileSystem.java Sun Jun 19 00:25:16 2005
@@ -260,7 +260,9 @@
{
if (!rootName.getRootURI().equals(name.getRootURI()))
{
- throw new FileSystemException("vfs.provider/mismatched-fs-for-name.error", new Object[]{name, rootName});
+ throw new FileSystemException("vfs.provider/mismatched-fs-for-name.error",
+ new Object[]{
+ name, rootName, name.getRootURI()});
}
// imario@apache.org ==> use getFileFromCache
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractLayeredFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractLayeredFileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractLayeredFileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractLayeredFileProvider.java Sun Jun 19 00:25:16 2005
@@ -46,7 +46,7 @@
final FileSystemOptions properties) throws FileSystemException
{
// Split the URI up into its parts
- final LayeredFileName name = (LayeredFileName) parseUri(baseFile!=null?baseFile.getName().getScheme():null, uri);
+ final LayeredFileName name = (LayeredFileName) parseUri(baseFile!=null?baseFile.getName():null, uri);
// Make the URI canonical
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractOriginatingFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractOriginatingFileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractOriginatingFileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/AbstractOriginatingFileProvider.java Sun Jun 19 00:25:16 2005
@@ -50,7 +50,7 @@
final FileName name;
try
{
- name = parseUri(baseFile!=null?baseFile.getName().getScheme():null, uri);
+ name = parseUri(baseFile!=null?baseFile.getName():null, uri);
}
catch (FileSystemException exc)
{
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileNameParser.java Sun Jun 19 00:25:16 2005
@@ -32,9 +32,10 @@
/**
* parses a String into a filename
+ * @param base
* @param filename
* @return
* @throws org.apache.commons.vfs.FileSystemException
*/
- public FileName parseUri(final VfsComponentContext context, final String filename) throws FileSystemException;
+ public FileName parseUri(final VfsComponentContext context, final FileName base, final String filename) throws FileSystemException;
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/FileProvider.java Sun Jun 19 00:25:16 2005
@@ -15,11 +15,11 @@
*/
package org.apache.commons.vfs.provider;
+import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemConfigBuilder;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
-import org.apache.commons.vfs.FileName;
import java.util.Collection;
@@ -68,5 +68,5 @@
*/
public Collection getCapabilities();
- public FileName parseUri(String schme, String uri) throws FileSystemException;
+ public FileName parseUri(FileName root, String uri) throws FileSystemException;
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/GenericFileName.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/GenericFileName.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/GenericFileName.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/GenericFileName.java Sun Jun 19 00:25:16 2005
@@ -25,8 +25,7 @@
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
* @version $Revision$ $Date$
*/
-public class GenericFileName
- extends AbstractFileName
+public class GenericFileName extends AbstractFileName
{
private final String userName;
private final String hostName;
@@ -36,7 +35,8 @@
private static final char[] USERNAME_RESERVED = {':', '@'};
private static final char[] PASSWORD_RESERVED = {'@'};
- protected GenericFileName(final String scheme,
+ protected GenericFileName(final String rootUri,
+ final String scheme,
final String hostName,
final int port,
final int defaultPort,
@@ -44,7 +44,7 @@
final String password,
final String path)
{
- super(scheme, path);
+ super(rootUri, scheme, path);
this.hostName = hostName;
this.defaultPort = defaultPort;
this.password = password;
@@ -99,12 +99,10 @@
return defaultPort;
}
- /**
- * Factory method for creating name instances.
- */
- public FileName createName(final String absPath)
+ public FileName createName(String rootURI, String absPath)
{
- return new GenericFileName(getScheme(),
+ return new GenericFileName(rootURI,
+ getScheme(),
hostName,
port,
defaultPort,
Added: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/HostFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/HostFileNameParser.java?rev=191323&view=auto
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/HostFileNameParser.java (added)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/HostFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -0,0 +1,250 @@
+/*
+ * 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.vfs.provider;
+
+import org.apache.commons.vfs.FileName;
+import org.apache.commons.vfs.FileSystemException;
+
+/**
+ * Implementation for any url based filesystem.<br />
+ * Parses the url into user/password/host/port/path<br />
+ * Does not handle a query string (after ?)
+ *
+ * @see URLFileNameParser URLFileNameParser for the implementation which also handles the query string too
+ * @author imario@apache.org
+ * @version $Revision$ $Date$
+ */
+public class HostFileNameParser extends AbstractFileNameParser
+{
+ private final int defaultPort;
+
+ public HostFileNameParser(final int defaultPort)
+ {
+ this.defaultPort = defaultPort;
+ }
+
+ public int getDefaultPort()
+ {
+ return defaultPort;
+ }
+
+ public boolean encodeCharacter(char ch)
+ {
+ return super.encodeCharacter(ch);
+ }
+
+ public FileName parseUri(final VfsComponentContext context, FileName base, final String filename) throws FileSystemException
+ {
+ // FTP URI are generic URI (as per RFC 2396)
+ final StringBuffer name = new StringBuffer();
+
+ // Extract the scheme and authority parts
+ final Authority auth = extractToPath(filename, name);
+
+ // Decode and normalise the file name
+ final String path = normalizePath(name);
+
+ return new GenericFileName(
+ base!=null?base.getRootURI():null,
+ auth.scheme,
+ auth.hostName,
+ auth.port,
+ defaultPort,
+ auth.userName,
+ auth.password,
+ path);
+ }
+
+ protected String normalizePath(final StringBuffer name)
+ throws FileSystemException
+ {
+ UriParser.canonicalizePath(name, 0, name.length(), this);
+ UriParser.normalisePath(name);
+ final String path = name.toString();
+ return path;
+ }
+
+ /**
+ * 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.
+ */
+ protected Authority extractToPath(final String uri,
+ final StringBuffer 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)
+ {
+ 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);
+
+ // 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. The scheme:// part has been removed
+ * already.
+ */
+ protected String extractUserInfo(final StringBuffer 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
+ 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. The scheme://userinfo@ part has
+ * been removed.
+ */
+ protected String extractHostName(final StringBuffer 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. The scheme://userinfo@hostname
+ * part has been removed.
+ *
+ * @return The port, or -1 if the URI does not contain a port.
+ */
+ protected int extractPort(final StringBuffer 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, userinfo, port)
+ */
+ protected static class Authority
+ {
+ public String scheme;
+ public String hostName;
+ public String userName;
+ public String password;
+ public int port;
+ }
+}
Propchange: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/HostFileNameParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/HostFileNameParser.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/HostFileNameParser.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileName.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileName.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileName.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileName.java Sun Jun 19 00:25:16 2005
@@ -15,7 +15,6 @@
*/
package org.apache.commons.vfs.provider;
-import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileName;
/**
@@ -32,7 +31,7 @@
final FileName outerUri,
final String path)
{
- super(scheme, path);
+ super(null, scheme, path);
this.outerUri = outerUri;
}
@@ -44,7 +43,7 @@
return outerUri;
}
- public FileName createName(String path)
+ public FileName createName(String rootURI, String path)
{
return new LayeredFileName(getScheme(), getOuterName(), path);
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/LayeredFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -37,7 +37,7 @@
return super.encodeCharacter(ch) || ch == '!';
}
- public FileName parseUri(final VfsComponentContext context, final String filename) throws FileSystemException
+ public FileName parseUri(final VfsComponentContext context, FileName base, final String filename) throws FileSystemException
{
final StringBuffer name = new StringBuffer();
Added: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileName.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileName.java?rev=191323&view=auto
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileName.java (added)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileName.java Sun Jun 19 00:25:16 2005
@@ -0,0 +1,97 @@
+package org.apache.commons.vfs.provider;
+
+import org.apache.commons.httpclient.URIException;
+import org.apache.commons.httpclient.util.URIUtil;
+import org.apache.commons.vfs.FileName;
+import org.apache.commons.vfs.FileSystemException;
+
+public class URLFileName extends GenericFileName
+{
+ private final String queryString;
+
+ public URLFileName(final String rootUri,
+ final String scheme,
+ final String hostName,
+ final int port,
+ final int defaultPort,
+ final String userName,
+ final String password,
+ final String path,
+ final String queryString)
+ {
+ super(rootUri, scheme, hostName, port, defaultPort, userName, password, path);
+ this.queryString = queryString;
+ }
+
+ /**
+ * get the query string
+ * @return
+ */
+ public String getQueryString()
+ {
+ return queryString;
+ }
+
+ /**
+ * get the path and query string e.g. /path/servlet?param1=true
+ * @return
+ */
+ public String getPathQuery()
+ {
+ StringBuffer sb = new StringBuffer(250);
+ sb.append(getPath());
+ sb.append("?");
+ sb.append(getQueryString());
+
+ return sb.toString();
+ }
+
+ /**
+ * get the path encoded suitable for url like filesystem e.g. (http, webdav)
+ */
+ public String getPathQueryEncoded() throws URIException, FileSystemException
+ {
+ if (getQueryString() == null)
+ {
+ return URIUtil.encodePath(getPathDecoded());
+ }
+
+ StringBuffer sb = new StringBuffer(250);
+ sb.append(URIUtil.encodePath(getPathDecoded()));
+ sb.append("?");
+ sb.append(getQueryString());
+ return sb.toString();
+ }
+
+ public FileName createName(final String rootURI, final String absPath)
+ {
+ return new URLFileName(getRootURI(),
+ getScheme(),
+ getHostName(),
+ getPort(),
+ getDefaultPort(),
+ getUserName(),
+ getPassword(),
+ absPath,
+ getQueryString());
+ }
+
+ /**
+ * append query string to the uri
+ * @return
+ */
+ protected String createURI()
+ {
+ if (getQueryString() != null)
+ {
+ StringBuffer sb = new StringBuffer(250);
+ sb.append(super.createURI());
+ sb.append("?");
+ sb.append(getQueryString());
+
+ return sb.toString();
+ }
+
+ return super.createURI();
+ }
+}
Propchange: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileName.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileName.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileName.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/URLFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -19,25 +19,25 @@
import org.apache.commons.vfs.FileSystemException;
/**
- * Implementation for the webdav filesystem.
- * < p/>
- * Additionally encodes every character below space (' ')
+ * Implementation for any url based filesystem.<br />
+ * Parses the url into user/password/host/port/path/queryString<br />
+ *
+ * @author imario@apache.org
+ * @version $Revision$ $Date$
*/
-public class URLFileNameParser extends AbstractFileNameParser
+public class URLFileNameParser extends HostFileNameParser
{
- private final int defaultPort;
-
public URLFileNameParser(final int defaultPort)
{
- this.defaultPort = defaultPort;
+ super(defaultPort);
}
- public int getDefaultPort()
+ public boolean encodeCharacter(char ch)
{
- return defaultPort;
+ return super.encodeCharacter(ch) || ch == '?';
}
- public FileName parseUri(final VfsComponentContext context, final String filename) throws FileSystemException
+ public FileName parseUri(final VfsComponentContext context, FileName base, final String filename) throws FileSystemException
{
// FTP URI are generic URI (as per RFC 2396)
final StringBuffer name = new StringBuffer();
@@ -45,189 +45,21 @@
// Extract the scheme and authority parts
final Authority auth = extractToPath(filename, name);
+ // Extract the queryString
+ String queryString = UriParser.extractQueryString(name);
+
// Decode and normalise the file name
- UriParser.canonicalizePath(name, 0, name.length(), this);
- UriParser.normalisePath(name);
- final String path = name.toString();
+ final String path = normalizePath(name);
- return new GenericFileName(
+ return new URLFileName(
+ base!=null?base.getRootURI():null,
auth.scheme,
auth.hostName,
auth.port,
- defaultPort,
+ getDefaultPort(),
auth.userName,
auth.password,
- path);
- }
-
- /**
- * 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.
- */
- protected Authority extractToPath(final String uri,
- final StringBuffer 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)
- {
- 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);
-
- // 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. The scheme:// part has been removed
- * already.
- */
- protected String extractUserInfo(final StringBuffer 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
- 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. The scheme://userinfo@ part has
- * been removed.
- */
- protected String extractHostName(final StringBuffer 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. The scheme://userinfo@hostname
- * part has been removed.
- *
- * @return The port, or -1 if the URI does not contain a port.
- */
- protected int extractPort(final StringBuffer 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, userinfo, port)
- */
- protected static class Authority
- {
- public String scheme;
- public String hostName;
- public String userName;
- public String password;
- public int port;
+ path,
+ queryString);
}
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/UriParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/UriParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/UriParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/UriParser.java Sun Jun 19 00:25:16 2005
@@ -422,7 +422,7 @@
}
char value = (char) (dig1 << 4 | dig2);
- boolean match = (ch == '%') || (fileNameParser != null && fileNameParser.encodeCharacter(ch));
+ boolean match = (value == '%') || (fileNameParser != null && fileNameParser.encodeCharacter(value));
if (match)
{
@@ -449,5 +449,20 @@
index += 2;
}
}
+ }
+
+ public static String extractQueryString(StringBuffer name)
+ {
+ for (int pos = 0; pos < name.length(); pos++)
+ {
+ if (name.charAt(pos) == '?')
+ {
+ String queryString = name.substring(pos+1);
+ name.delete(pos, name.length());
+ return queryString;
+ }
+ }
+
+ return null;
}
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/VfsComponentContext.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/VfsComponentContext.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/VfsComponentContext.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/VfsComponentContext.java Sun Jun 19 00:25:16 2005
@@ -15,11 +15,11 @@
*/
package org.apache.commons.vfs.provider;
+import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemManager;
import org.apache.commons.vfs.FileSystemOptions;
-import org.apache.commons.vfs.FileName;
import java.io.File;
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -16,27 +16,18 @@
package org.apache.commons.vfs.provider.ftp;
import org.apache.commons.vfs.provider.FileNameParser;
-import org.apache.commons.vfs.provider.URLFileNameParser;
-import org.apache.commons.vfs.provider.http.HttpFileNameParser;
-import org.apache.commons.vfs.provider.webdav.WebdavFileNameParser;
+import org.apache.commons.vfs.provider.HostFileNameParser;
/**
- * Implementation for the webdav filesystem.
- * < p/>
- * Additionally encodes every character below space (' ')
+ * Implementation for ftp. set default port to 21
*/
-public class FtpFileNameParser extends URLFileNameParser
+public class FtpFileNameParser extends HostFileNameParser
{
private final static FtpFileNameParser INSTANCE = new FtpFileNameParser();
public FtpFileNameParser()
{
super(21);
- }
-
- public boolean encodeCharacter(char ch)
- {
- return super.encodeCharacter(ch) || ch < ' ';
}
public static FileNameParser getInstance()
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/ftp/FtpRandomAccessContent.java Sun Jun 19 00:25:16 2005
@@ -17,13 +17,12 @@
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.provider.AbstractRandomAccessContent;
-import org.apache.commons.vfs.util.MonitorInputStream;
import org.apache.commons.vfs.util.RandomAccessMode;
import java.io.DataInputStream;
+import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.FilterInputStream;
class FtpRandomAccessContent extends AbstractRandomAccessContent
{
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -19,9 +19,7 @@
import org.apache.commons.vfs.provider.URLFileNameParser;
/**
- * Implementation for the webdav filesystem.
- * < p/>
- * Additionally encodes every character below space (' ')
+ * Implementation for http. set default port to 80
*/
public class HttpFileNameParser extends URLFileNameParser
{
@@ -30,11 +28,6 @@
public HttpFileNameParser()
{
super(80);
- }
-
- public boolean encodeCharacter(char ch)
- {
- return super.encodeCharacter(ch) || ch < ' ';
}
public static FileNameParser getInstance()
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileObject.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileObject.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileObject.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpFileObject.java Sun Jun 19 00:25:16 2005
@@ -18,15 +18,18 @@
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.DateParser;
+import org.apache.commons.httpclient.util.URIUtil;
import org.apache.commons.vfs.FileContentInfoFactory;
import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileType;
import org.apache.commons.vfs.RandomAccessContent;
import org.apache.commons.vfs.provider.AbstractFileObject;
+import org.apache.commons.vfs.provider.URLFileName;
import org.apache.commons.vfs.util.MonitorInputStream;
import org.apache.commons.vfs.util.RandomAccessMode;
@@ -162,11 +165,18 @@
/**
* Prepares a Method object.
*/
- void setupMethod(final HttpMethod method)
+ void setupMethod(final HttpMethod method) throws FileSystemException, URIException
{
- method.setPath(getName().getPath());
+ String pathEncoded = ((URLFileName) getName()).getPathQueryEncoded();
+ method.setPath(pathEncoded);
method.setFollowRedirects(true);
method.setRequestHeader("User-Agent", "Jakarta-Commons-VFS");
+ }
+
+ protected String encodePath(final String decodedPath) throws URIException
+ {
+ String pathEncoded = URIUtil.encodePath(decodedPath);
+ return pathEncoded;
}
/**
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/http/HttpRandomAccesContent.java Sun Jun 19 00:25:16 2005
@@ -22,9 +22,9 @@
import org.apache.commons.vfs.util.RandomAccessMode;
import java.io.DataInputStream;
+import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.FilterInputStream;
import java.net.HttpURLConnection;
class HttpRandomAccesContent extends AbstractRandomAccessContent
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/jar/JarFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/jar/JarFileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/jar/JarFileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/jar/JarFileProvider.java Sun Jun 19 00:25:16 2005
@@ -21,8 +21,8 @@
import org.apache.commons.vfs.FileSystem;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
-import org.apache.commons.vfs.provider.zip.ZipFileProvider;
import org.apache.commons.vfs.provider.LayeredFileName;
+import org.apache.commons.vfs.provider.zip.ZipFileProvider;
import java.util.ArrayList;
import java.util.Arrays;
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/DefaultLocalFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/DefaultLocalFileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/DefaultLocalFileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/DefaultLocalFileProvider.java Sun Jun 19 00:25:16 2005
@@ -90,7 +90,7 @@
StringBuffer uri = new StringBuffer(name.length() + 5);
uri.append("file:");
uri.append(name);
- FileName filename = parseUri("file", uri.toString());
+ FileName filename = parseUri(null, uri.toString());
return findFile(filename, null);
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/GenericFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/GenericFileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/GenericFileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/GenericFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -15,8 +15,8 @@
*/
package org.apache.commons.vfs.provider.local;
-import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileName;
+import org.apache.commons.vfs.FileSystemException;
/**
* A general-purpose file name parser.
@@ -62,8 +62,8 @@
* here the rootFilename can only be "/" (see above) put this "/" is also in the pathname
* so its of no value for the LocalFileName instance
*/
- protected FileName createFileName(String scheme, final String rootFile, final String path)
+ protected FileName createFileName(String rootURI, String scheme, final String rootFile, final String path)
{
- return new LocalFileName(scheme, "", path);
+ return new LocalFileName(rootURI, scheme, "", path);
}
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileName.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileName.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileName.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileName.java Sun Jun 19 00:25:16 2005
@@ -16,10 +16,7 @@
package org.apache.commons.vfs.provider.local;
import org.apache.commons.vfs.FileName;
-import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.provider.AbstractFileName;
-import org.apache.commons.vfs.provider.UriParser;
-import org.apache.commons.vfs.provider.FileNameParser;
/**
* A local file URI.
@@ -27,16 +24,16 @@
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a>
* @version $Revision$ $Date$
*/
-public class LocalFileName
- extends AbstractFileName
+public class LocalFileName extends AbstractFileName
{
private final String rootFile;
- protected LocalFileName(final String scheme,
+ protected LocalFileName(final String rootUri,
+ final String scheme,
final String rootFile,
final String path)
{
- super(scheme, path);
+ super(rootUri, scheme, path);
this.rootFile = rootFile;
}
@@ -51,9 +48,9 @@
/**
* Factory method for creating name instances.
*/
- public FileName createName(final String path)
+ public FileName createName(final String rootURI, final String path)
{
- return new LocalFileName(getScheme(), rootFile, path);
+ return new LocalFileName(rootURI, getScheme(), rootFile, path);
}
/**
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -56,7 +56,7 @@
throws FileSystemException;
- public FileName parseUri(final VfsComponentContext context, final String filename) throws FileSystemException
+ public FileName parseUri(final VfsComponentContext context, FileName base, final String filename) throws FileSystemException
{
final StringBuffer name = new StringBuffer();
@@ -78,8 +78,12 @@
UriParser.normalisePath(name);
final String path = name.toString();
- return createFileName(scheme, rootFile, path);
+ return createFileName(
+ base!=null?base.getRootURI():null,
+ scheme,
+ rootFile,
+ path);
}
- protected abstract FileName createFileName(String scheme, final String rootFile, final String path);
+ protected abstract FileName createFileName(String rootURI, String scheme, final String rootFile, final String path);
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileRandomAccessContent.java Sun Jun 19 00:25:16 2005
@@ -19,12 +19,12 @@
import org.apache.commons.vfs.provider.AbstractRandomAccessContent;
import org.apache.commons.vfs.util.RandomAccessMode;
+import java.io.EOFException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
-import java.io.RandomAccessFile;
import java.io.InputStream;
-import java.io.EOFException;
+import java.io.RandomAccessFile;
/**
* RandomAccess for local files
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileSystem.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileSystem.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileSystem.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/LocalFileSystem.java Sun Jun 19 00:25:16 2005
@@ -21,7 +21,6 @@
import org.apache.commons.vfs.FileSystem;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.provider.AbstractFileSystem;
-import org.apache.commons.vfs.provider.UriParser;
import java.io.File;
import java.io.FilePermission;
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/WindowsFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/WindowsFileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/WindowsFileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/local/WindowsFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -15,8 +15,8 @@
*/
package org.apache.commons.vfs.provider.local;
-import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileName;
+import org.apache.commons.vfs.FileSystemException;
/**
* A parser for Windows file names.
@@ -37,9 +37,9 @@
return extractWindowsRootPrefix(uri, name);
}
- protected FileName createFileName(String scheme, final String rootFile, final String path)
+ protected FileName createFileName(String rootURI, String scheme, final String rootFile, final String path)
{
- return new LocalFileName(scheme, rootFile, path);
+ return new LocalFileName(rootURI, scheme, rootFile, path);
}
/**
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -17,14 +17,10 @@
import org.apache.commons.vfs.provider.FileNameParser;
import org.apache.commons.vfs.provider.URLFileNameParser;
-import org.apache.commons.vfs.provider.ftp.FtpFileNameParser;
-import org.apache.commons.vfs.provider.http.HttpFileNameParser;
-import org.apache.commons.vfs.provider.webdav.WebdavFileNameParser;
+
/**
- * Implementation for the webdav filesystem.
- * < p/>
- * Additionally encodes every character below space (' ')
+ * Implementation for sftp. set default port to 22
*/
public class SftpFileNameParser extends URLFileNameParser
{
@@ -34,12 +30,7 @@
{
super(22);
}
-
- public boolean encodeCharacter(char ch)
- {
- return super.encodeCharacter(ch) || ch < ' ';
- }
-
+
public static FileNameParser getInstance()
{
return INSTANCE;
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/sftp/SftpFileObject.java Sun Jun 19 00:25:16 2005
@@ -35,7 +35,6 @@
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
-import java.util.StringTokenizer;
import java.util.Vector;
/**
@@ -243,13 +242,30 @@
{
// Each entry is in unix ls format <perms> <?> <user> <group> <size> <date> <name>
final String stat = (String) iterator.next();
- final StringTokenizer tokens = new StringTokenizer(stat);
- // TODO - check there are the correct number of tokens
- // TODO - handle names with spaces in 'em
- for (int i = 0; i < 8; tokens.nextToken(), i++)
+
+ // parse entry ==> 2005-06-19 imario@apache.org
+ // we can get rid of it as soon as jsch releases the next version
+ // which allows access to the raw stat object.
+ boolean trigger = true;
+ int state = 0;
+ StringBuffer nameBuf = new StringBuffer(stat.length());
+ for (int i = 0; i<stat.length(); i++)
{
+ char c = stat.charAt(i);
+ if (state == 16)
+ {
+ nameBuf.append(c);
+ continue;
+ }
+ if ((c != ' ' && trigger) || (c == ' ' && !trigger))
+ {
+ state++;
+ trigger=!trigger;
+ }
}
- final String name = tokens.nextToken();
+ // <==
+
+ final String name = nameBuf.toString();
if (name.equals(".") || name.equals(".."))
{
continue;
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileName.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileName.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileName.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileName.java Sun Jun 19 00:25:16 2005
@@ -16,11 +16,7 @@
package org.apache.commons.vfs.provider.smb;
import org.apache.commons.vfs.FileName;
-import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.provider.GenericFileName;
-import org.apache.commons.vfs.provider.UriParser;
-import org.apache.commons.vfs.provider.AbstractFileProvider;
-import org.apache.commons.vfs.provider.FileNameParser;
/**
* An SMB URI. Adds a share name to the generic URI.
@@ -35,15 +31,17 @@
private final String share;
- protected SmbFileName(final String scheme,
- final String hostName,
- final int port,
- final String userName,
- final String password,
- final String share,
- final String path)
+ protected SmbFileName(
+ final String rootUri,
+ final String scheme,
+ final String hostName,
+ final int port,
+ final String userName,
+ final String password,
+ final String share,
+ final String path)
{
- super(scheme, hostName, port, DEFAULT_PORT, userName, password, path);
+ super(rootUri, scheme, hostName, port, DEFAULT_PORT, userName, password, path);
this.share = share;
}
@@ -68,9 +66,10 @@
/**
* Factory method for creating name instances.
*/
- public FileName createName(final String path)
+ public FileName createName(final String rootURI, final String path)
{
- return new SmbFileName(getScheme(),
+ return new SmbFileName(getRootURI(),
+ getScheme(),
getHostName(),
getPort(),
getUserName(),
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileNameParser.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileNameParser.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileNameParser.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileNameParser.java Sun Jun 19 00:25:16 2005
@@ -23,9 +23,7 @@
import org.apache.commons.vfs.provider.VfsComponentContext;
/**
- * Implementation for the webdav filesystem.
- * < p/>
- * Additionally encodes every character below space (' ')
+ * Implementation for sftp. set default port to 139
*/
public class SmbFileNameParser extends URLFileNameParser
{
@@ -41,7 +39,7 @@
return INSTANCE;
}
- public FileName parseUri(final VfsComponentContext context, final String filename) throws FileSystemException
+ public FileName parseUri(final VfsComponentContext context, FileName base, final String filename) throws FileSystemException
{
final StringBuffer name = new StringBuffer();
@@ -64,7 +62,9 @@
UriParser.normalisePath(name);
final String path = name.toString();
- return new SmbFileName(auth.scheme,
+ return new SmbFileName(
+ base!=null?base.getRootURI():null,
+ auth.scheme,
auth.hostName,
auth.port,
auth.userName,
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileSystem.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileSystem.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileSystem.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/smb/SmbFileSystem.java Sun Jun 19 00:25:16 2005
@@ -18,8 +18,8 @@
import org.apache.commons.vfs.FileName;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystem;
-import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.FileSystemException;
+import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.provider.AbstractFileSystem;
import java.util.Collection;
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/tar/TarFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/tar/TarFileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/tar/TarFileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/tar/TarFileProvider.java Sun Jun 19 00:25:16 2005
@@ -23,7 +23,6 @@
import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.provider.AbstractLayeredFileProvider;
import org.apache.commons.vfs.provider.FileProvider;
-import org.apache.commons.vfs.provider.UriParser;
import org.apache.commons.vfs.provider.LayeredFileName;
import java.util.Arrays;
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/temp/TemporaryFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/temp/TemporaryFileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/temp/TemporaryFileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/temp/TemporaryFileProvider.java Sun Jun 19 00:25:16 2005
@@ -21,7 +21,6 @@
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.provider.AbstractFileProvider;
-import org.apache.commons.vfs.provider.BasicFileName;
import org.apache.commons.vfs.provider.FileProvider;
import org.apache.commons.vfs.provider.UriParser;
import org.apache.commons.vfs.provider.local.DefaultLocalFileProvider;
@@ -106,7 +105,9 @@
rootFile = getContext().getTemporaryFileStore().allocateFile("tempfs");
}
final FileName rootName =
- new BasicFileName(scheme, scheme + ":", FileName.ROOT_PATH);
+ getContext().parseURI(scheme + ":" + FileName.ROOT_PATH);
+ // final FileName rootName =
+ // new LocalFileName(scheme, scheme + ":", FileName.ROOT_PATH);
filesystem = new LocalFileSystem(rootName, rootFile.getAbsolutePath());
addFileSystem(this, filesystem);
}
Modified: jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/url/UrlFileProvider.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/url/UrlFileProvider.java?rev=191323&r1=191322&r2=191323&view=diff
==============================================================================
--- jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/url/UrlFileProvider.java (original)
+++ jakarta/commons/proper/vfs/trunk/src/java/org/apache/commons/vfs/provider/url/UrlFileProvider.java Sun Jun 19 00:25:16 2005
@@ -23,7 +23,6 @@
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.provider.AbstractFileProvider;
-import org.apache.commons.vfs.provider.BasicFileName;
import java.net.MalformedURLException;
import java.net.URL;
@@ -70,7 +69,9 @@
if (fs == null)
{
final FileName rootName =
- new BasicFileName(rootUrl, FileName.ROOT_PATH);
+ getContext().parseURI(rootUrl.getProtocol() + ":" + FileName.ROOT_PATH);
+ // final FileName rootName =
+ // new BasicFileName(rootUrl, FileName.ROOT_PATH);
fs = new UrlFileSystem(rootName, fileSystemOptions);
addFileSystem(key, fs);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org