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 2007/05/14 20:24:36 UTC
svn commit: r537936 - in
/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs:
cache/DefaultFilesCache.java cache/SoftRefFilesCache.java
provider/AbstractFileName.java
Author: imario
Date: Mon May 14 11:24:35 2007
New Revision: 537936
URL: http://svn.apache.org/viewvc?view=rev&rev=537936
Log:
VFS-145 + VFS-157: Use HashMap for caches and cache calculated hashCode in FileName - Thanks to Adam Heath for the patch!
Modified:
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/DefaultFilesCache.java
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java
jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/AbstractFileName.java
Modified: jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/DefaultFilesCache.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/DefaultFilesCache.java?view=diff&rev=537936&r1=537935&r2=537936
==============================================================================
--- jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/DefaultFilesCache.java (original)
+++ jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/DefaultFilesCache.java Mon May 14 11:24:35 2007
@@ -22,7 +22,6 @@
import java.util.HashMap;
import java.util.Map;
-import java.util.TreeMap;
/**
* A {@link org.apache.commons.vfs.FilesCache} implementation.<br>
@@ -58,7 +57,7 @@
Map files = (Map) filesystemCache.get(filesystem);
if (files == null)
{
- files = new TreeMap();
+ files = new HashMap();
filesystemCache.put(filesystem, files);
}
Modified: jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java?view=diff&rev=537936&r1=537935&r2=537936
==============================================================================
--- jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java (original)
+++ jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/cache/SoftRefFilesCache.java Mon May 14 11:24:35 2007
@@ -16,14 +16,6 @@
*/
package org.apache.commons.vfs.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.TreeMap;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.vfs.FileName;
@@ -33,6 +25,13 @@
import org.apache.commons.vfs.impl.DefaultFileSystemManager;
import org.apache.commons.vfs.util.Messages;
+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;
+
/**
* 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
@@ -289,7 +288,7 @@
Map files = (Map) filesystemCache.get(filesystem);
if (files == null)
{
- files = new TreeMap();
+ files = new HashMap();
filesystemCache.put(filesystem, files);
}
Modified: jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/AbstractFileName.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/AbstractFileName.java?view=diff&rev=537936&r1=537935&r2=537936
==============================================================================
--- jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/AbstractFileName.java (original)
+++ jakarta/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/AbstractFileName.java Mon May 14 11:24:35 2007
@@ -29,479 +29,487 @@
* @version $Revision$ $Date$
*/
public abstract class AbstractFileName
- implements FileName
+ 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;
-
- public AbstractFileName(final String scheme,
- final String absPath, 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;
- }
- }
-
- /**
- * Returns the hashcode for this name.
- */
- public int hashCode()
- {
- return (getRootURI().hashCode() ^ getPath().hashCode());
- }
-
- /**
- * Determines if this object is equal to another.
- */
- public boolean equals(final Object obj)
- {
+ 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 boolean calculateHashCode = true;
+ private int calculatedHashCode;
+
+ public AbstractFileName(final String scheme,
+ final String absPath, 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;
+ }
+ }
+
+ /**
+ * Returns the hashcode for this name.
+ */
+ public int hashCode()
+ {
+ if (calculateHashCode)
+ {
+ calculatedHashCode = (getRootURI().hashCode() ^ getPath().hashCode());
+ calculateHashCode = false;
+ }
+ return calculatedHashCode;
+ }
+
+ /**
+ * Determines if this object is equal to another.
+ */
+ public boolean equals(final Object obj)
+ {
if (!(obj instanceof AbstractFileName))
{
return false;
}
final AbstractFileName name = (AbstractFileName) obj;
- return (getRootURI().equals(name.getRootURI()) && getPath().equals(name.getPath()));
- }
+ return (getRootURI().equals(name.getRootURI()) && getPath().equals(name.getPath()));
+ }
+
+ /**
+ * Implement Comparable
+ *
+ * @param obj another abstractfilename
+ */
+ public int compareTo(Object obj)
+ {
+ final AbstractFileName name = (AbstractFileName) obj;
+ int ret = getRootURI().compareTo(name.getRootURI());
+ if (ret != 0)
+ {
+ return ret;
+ }
+
+ // return absPath.compareTo(name.absPath);
+ try
+ {
+ return getPathDecoded().compareTo(name.getPathDecoded());
+ }
+ catch (FileSystemException e)
+ {
+ throw new RuntimeException(e.getMessage());
+ }
+ }
+
+ /**
+ * Returns the URI of the file.
+ */
+ public String toString()
+ {
+ return getURI();
+ }
+
+ /**
+ * Factory method for creating name instances.
+ */
+ 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.
+ */
+ protected abstract void appendRootUri(StringBuffer buffer, boolean addPassword);
+
+ /**
+ * Returns the base name of the file.
+ */
+ 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.
+ */
+ public String getPath()
+ {
+ if (VFS.isUriStyle())
+ {
+ return absPath + getUriTrailer();
+ }
+ return absPath;
+ }
+
+ protected String getUriTrailer()
+ {
+ return getType().hasChildren() ? "/" : "";
+ }
+
+ public String getPathDecoded() throws FileSystemException
+ {
+ if (decodedAbsPath == null)
+ {
+ decodedAbsPath = UriParser.decode(getPath());
+ }
+
+ return decodedAbsPath;
+ }
+
+ /**
+ * Returns the name of the parent of the file.
+ */
+ 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
+ */
+ public FileName getRoot()
+ {
+ FileName root = this;
+ while (root.getParent() != null)
+ {
+ root = root.getParent();
+ }
+
+ return root;
+ }
+
+ /**
+ * Returns the URI scheme of this file.
+ */
+ public String getScheme()
+ {
+ return scheme;
+ }
+
+ /**
+ * Returns the absolute URI of the file.
+ */
+ public String getURI()
+ {
+ if (uri == null)
+ {
+ uri = createURI();
+ }
+ return uri;
+ }
+
+ protected String createURI()
+ {
+ final StringBuffer buffer = new StringBuffer();
+ appendRootUri(buffer, true);
+ buffer.append(getPath());
+ return buffer.toString();
+ }
+
+ /**
+ * Converts a file name to a relative name, relative to this file name.
+ */
+ 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 StringBuffer buffer = new StringBuffer();
+ 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.
+ */
+ public String getRootURI()
+ {
+ if (rootUri == null)
+ {
+ final StringBuffer buffer = new StringBuffer();
+ appendRootUri(buffer, true);
+ buffer.append(SEPARATOR_CHAR);
+ rootUri = buffer.toString().intern();
+ }
+ return rootUri;
+ }
+
+ /**
+ * Returns the depth of this file name, within its file system.
+ */
+ 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.
+ */
+ 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.
+ */
+ 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.
+ */
+ public boolean isDescendent(final FileName descendent)
+ {
+ return isDescendent(descendent, NameScope.DESCENDENT);
+ }
+
+ /**
+ * Determines if another file name is a descendent of this file name.
+ */
+ public boolean isDescendent(final FileName descendent,
+ final NameScope scope)
+ {
+ if (!descendent.getRootURI().equals(getRootURI()))
+ {
+ return false;
+ }
+ return checkName(getPath(), descendent.getPath(), scope);
+ }
+
+ /**
+ * Returns the requested or current type of this name. <br />
+ * <p/>
+ * The "requested" type is the one determined during resolving the name. <br/>
+ * In this case the name is a {@link FileType#FOLDER} if it ends with an "/" else
+ * it will be a {@link FileType#FILE}<br/>
+ * </p>
+ * <p/>
+ * Once attached it will be changed to reflect the real type of this resource.
+ * </p>
+ *
+ * @return {@link FileType#FOLDER} or {@link FileType#FILE}
+ */
+ 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}
+ */
+ void setType(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.
+ */
+ 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;
+ }
- /**
- * Implement Comparable
- *
- * @param obj another abstractfilename
- */
- public int compareTo(Object obj)
- {
- final AbstractFileName name = (AbstractFileName) obj;
- int ret = getRootURI().compareTo(name.getRootURI());
- if (ret != 0)
- {
- return ret;
- }
-
- // return absPath.compareTo(name.absPath);
- try
- {
- return getPathDecoded().compareTo(name.getPathDecoded());
- }
- catch (FileSystemException e)
- {
- throw new RuntimeException(e.getMessage());
- }
- }
-
- /**
- * Returns the URI of the file.
- */
- public String toString()
- {
- return getURI();
- }
-
- /**
- * Factory method for creating name instances.
- */
- 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.
- */
- protected abstract void appendRootUri(StringBuffer buffer, boolean addPassword);
-
- /**
- * Returns the base name of the file.
- */
- 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.
- */
- public String getPath()
- {
- if (VFS.isUriStyle())
- {
- return absPath + getUriTrailer();
- }
- return absPath;
- }
-
- protected String getUriTrailer()
- {
- return getType().hasChildren() ? "/" : "";
- }
-
- public String getPathDecoded() throws FileSystemException
- {
- if (decodedAbsPath == null)
- {
- decodedAbsPath = UriParser.decode(getPath());
- }
-
- return decodedAbsPath;
- }
-
- /**
- * Returns the name of the parent of the file.
- */
- 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
- */
- public FileName getRoot()
- {
- FileName root = this;
- while (root.getParent() != null)
- {
- root = root.getParent();
- }
-
- return root;
- }
-
- /**
- * Returns the URI scheme of this file.
- */
- public String getScheme()
- {
- return scheme;
- }
-
- /**
- * Returns the absolute URI of the file.
- */
- public String getURI()
- {
- if (uri == null)
- {
- uri = createURI();
- }
- return uri;
- }
-
- protected String createURI()
- {
- final StringBuffer buffer = new StringBuffer();
- appendRootUri(buffer, true);
- buffer.append(getPath());
- return buffer.toString();
- }
-
- /**
- * Converts a file name to a relative name, relative to this file name.
- */
- 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 StringBuffer buffer = new StringBuffer();
- 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.
- */
- public String getRootURI()
- {
- if (rootUri == null)
- {
- final StringBuffer buffer = new StringBuffer();
- appendRootUri(buffer, true);
- buffer.append(SEPARATOR_CHAR);
- rootUri = buffer.toString().intern();
- }
- return rootUri;
- }
-
- /**
- * Returns the depth of this file name, within its file system.
- */
- 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.
- */
- 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.
- */
- 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.
- */
- public boolean isDescendent(final FileName descendent)
- {
- return isDescendent(descendent, NameScope.DESCENDENT);
- }
-
- /**
- * Determines if another file name is a descendent of this file name.
- */
- public boolean isDescendent(final FileName descendent,
- final NameScope scope)
- {
- if (!descendent.getRootURI().equals(getRootURI()))
- {
- return false;
- }
- return checkName(getPath(), descendent.getPath(), scope);
- }
-
- /**
- * Returns the requested or current type of this name. <br />
- * <p/>
- * The "requested" type is the one determined during resolving the name. <br/>
- * In this case the name is a {@link FileType#FOLDER} if it ends with an "/" else
- * it will be a {@link FileType#FILE}<br/>
- * </p>
- * <p/>
- * Once attached it will be changed to reflect the real type of this resource.
- * </p>
- *
- * @return {@link FileType#FOLDER} or {@link FileType#FILE}
- */
- 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}
- */
- void setType(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.
- */
- 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;
- }
-
- /**
- * returns a "friendly path", this is a path without a password.
- */
- public String getFriendlyURI()
- {
- final StringBuffer buffer = new StringBuffer();
- appendRootUri(buffer, false);
- buffer.append(getPath());
- return buffer.toString();
- }
+ /**
+ * returns a "friendly path", this is a path without a password.
+ */
+ public String getFriendlyURI()
+ {
+ final StringBuffer buffer = new StringBuffer();
+ appendRootUri(buffer, false);
+ buffer.append(getPath());
+ return buffer.toString();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org