Class AbstractFileObject

java.lang.Object
org.apache.commons.vfs.provider.AbstractFileObject
All Implemented Interfaces:
FileObject
Direct Known Subclasses:
CompressedFileFileObject, DelegateFileObject, FtpFileObject, HttpFileObject, LocalFile, RamFileObject, SftpFileObject, TarFileObject, UrlFileObject, ZipFileObject

public abstract class AbstractFileObject extends Object implements FileObject
A partial file object implementation.
Version:
$Revision: 484648 $ $Date: 2006-12-08 17:18:36 +0100 (Fri, 08 Dec 2006) $
Author:
Adam Murdoch, Gary D. Gregory
  • Constructor Details

  • Method Details

    • doAttach

      protected void doAttach() throws Exception
      Attaches this file object to its file resource. This method is called before any of the doBlah() or onBlah() methods. Sub-classes can use this method to perform lazy initialisation.

      This implementation does nothing.

      Throws:
      Exception
    • doDetach

      protected void doDetach() throws Exception
      Detaches this file object from its file resource.

      Called when this file is closed. Note that the file object may be reused later, so should be able to be reattached.

      This implementation does nothing.

      Throws:
      Exception
    • doGetType

      protected abstract FileType doGetType() throws Exception
      Determines the type of this file. Must not return null. The return value of this method is cached, so the implementation can be expensive.
      Throws:
      Exception
    • doIsHidden

      protected boolean doIsHidden() throws Exception
      Determines if this file is hidden. Is only called if doGetType() does not return FileType.IMAGINARY.

      This implementation always returns false.

      Throws:
      Exception
    • doIsReadable

      protected boolean doIsReadable() throws Exception
      Determines if this file can be read. Is only called if doGetType() does not return FileType.IMAGINARY.

      This implementation always returns true.

      Throws:
      Exception
    • doIsWriteable

      protected boolean doIsWriteable() throws Exception
      Determines if this file can be written to. Is only called if doGetType() does not return FileType.IMAGINARY.

      This implementation always returns true.

      Throws:
      Exception
    • doListChildren

      protected abstract String[] doListChildren() throws Exception
      Lists the children of this file. Is only called if doGetType() returns FileType.FOLDER. The return value of this method is cached, so the implementation can be expensive.
      Throws:
      Exception
    • doListChildrenResolved

      protected FileObject[] doListChildrenResolved() throws Exception
      Lists the children of this file. Is only called if doGetType() returns FileType.FOLDER. The return value of this method is cached, so the implementation can be expensive.
      Other than doListChildren you could return FileObject's to e.g. reinitialize the type of the file.
      (Introduced for Webdav: "permission denied on resource" during getType())
      Throws:
      Exception
    • doDelete

      protected void doDelete() throws Exception
      Deletes the file. Is only called when:

      This implementation throws an exception.

      Throws:
      Exception
    • doRename

      protected void doRename(FileObject newfile) throws Exception
      Renames the file. Is only called when:

      This implementation throws an exception.

      Throws:
      Exception
    • doCreateFolder

      protected void doCreateFolder() throws Exception
      Creates this file as a folder. Is only called when:

      This implementation throws an exception.

      Throws:
      Exception
    • onChildrenChanged

      protected void onChildrenChanged(FileName child, FileType newType) throws Exception
      Called when the children of this file change. Allows subclasses to refresh any cached information about the children of this file.

      This implementation does nothing.

      Throws:
      Exception
    • onChange

      protected void onChange() throws Exception
      Called when the type or content of this file changes.

      This implementation does nothing.

      Throws:
      Exception
    • doGetLastModifiedTime

      protected long doGetLastModifiedTime() throws Exception
      Returns the last modified time of this file. Is only called if doGetType() does not return FileType.IMAGINARY.

      This implementation throws an exception.

      Throws:
      Exception
    • doSetLastModifiedTime

      protected void doSetLastModifiedTime(long modtime) throws Exception
      Sets the last modified time of this file. Is only called if doGetType() does not return FileType.IMAGINARY.

      This implementation throws an exception.

      Throws:
      Exception
    • doGetAttributes

      protected Map doGetAttributes() throws Exception
      Returns the attributes of this file. Is only called if doGetType() does not return FileType.IMAGINARY.

      This implementation always returns an empty map.

      Throws:
      Exception
    • doSetAttribute

      protected void doSetAttribute(String atttrName, Object value) throws Exception
      Sets an attribute of this file. Is only called if doGetType() does not return FileType.IMAGINARY.

      This implementation throws an exception.

      Throws:
      Exception
    • doGetCertificates

      protected Certificate[] doGetCertificates() throws Exception
      Returns the certificates used to sign this file. Is only called if doGetType() does not return FileType.IMAGINARY.

      This implementation always returns null.

      Throws:
      Exception
    • doGetContentSize

      protected abstract long doGetContentSize() throws Exception
      Returns the size of the file content (in bytes). Is only called if doGetType() returns FileType.FILE.
      Throws:
      Exception
    • doGetInputStream

      protected abstract InputStream doGetInputStream() throws Exception
      Creates an input stream to read the file content from. Is only called if doGetType() returns FileType.FILE.

      It is guaranteed that there are no open output streams for this file when this method is called.

      The returned stream does not have to be buffered.

      Throws:
      Exception
    • doGetRandomAccessContent

      protected RandomAccessContent doGetRandomAccessContent(RandomAccessMode mode) throws Exception
      Creates access to the file for random i/o. Is only called if doGetType() returns FileType.FILE.

      It is guaranteed that there are no open output streams for this file when this method is called.

      Throws:
      Exception
    • doGetOutputStream

      protected OutputStream doGetOutputStream(boolean bAppend) throws Exception
      Creates an output stream to write the file content to. Is only called if:

      It is guaranteed that there are no open stream (input or output) for this file when this method is called.

      The returned stream does not have to be buffered.

      This implementation throws an exception.

      Throws:
      Exception
    • toString

      public String toString()
      Returns the URI of the file.
      Overrides:
      toString in class Object
    • getName

      public FileName getName()
      Returns the name of the file.
      Specified by:
      getName in interface FileObject
    • getFileSystem

      public FileSystem getFileSystem()
      Returns the file system this file belongs to.
      Specified by:
      getFileSystem in interface FileObject
      Returns:
      The file system.
    • getURL

      public URL getURL() throws FileSystemException
      Returns a URL representation of the file.
      Specified by:
      getURL in interface FileObject
      Throws:
      FileSystemException
    • exists

      public boolean exists() throws FileSystemException
      Determines if the file exists.
      Specified by:
      exists in interface FileObject
      Returns:
      true if this file exists, false if not.
      Throws:
      FileSystemException - On error determining if this file exists.
    • getType

      public FileType getType() throws FileSystemException
      Returns the file's type.
      Specified by:
      getType in interface FileObject
      Returns:
      One of the FileType constants. Never returns null.
      Throws:
      FileSystemException - On error determining the file's type.
    • isHidden

      public boolean isHidden() throws FileSystemException
      Determines if this file can be read.
      Specified by:
      isHidden in interface FileObject
      Returns:
      true if this file is hidden, false if not.
      Throws:
      FileSystemException - On error determining if this file exists.
    • isReadable

      public boolean isReadable() throws FileSystemException
      Determines if this file can be read.
      Specified by:
      isReadable in interface FileObject
      Returns:
      true if this file is readable, false if not.
      Throws:
      FileSystemException - On error determining if this file exists.
    • isWriteable

      public boolean isWriteable() throws FileSystemException
      Determines if this file can be written to.
      Specified by:
      isWriteable in interface FileObject
      Returns:
      true if this file is writeable, false if not.
      Throws:
      FileSystemException - On error determining if this file exists.
    • getParent

      public FileObject getParent() throws FileSystemException
      Returns the parent of the file.
      Specified by:
      getParent in interface FileObject
      Returns:
      The folder that contains this file. Returns null if this file is the root of a file system.
      Throws:
      FileSystemException - On error finding the file's parent.
    • getChildren

      public FileObject[] getChildren() throws FileSystemException
      Returns the children of the file.
      Specified by:
      getChildren in interface FileObject
      Returns:
      An array containing the children of this file. The array is unordered. If the file does not have any children, a zero-length array is returned. This method never returns null.
      Throws:
      FileSystemException - If this file does not exist, or is not a folder, or on error listing this file's children.
    • getChild

      public FileObject getChild(String name) throws FileSystemException
      Returns a child of this file.
      Specified by:
      getChild in interface FileObject
      Parameters:
      name - The name of the child.
      Returns:
      The child, or null if there is no such child.
      Throws:
      FileSystemException - If this file does not exist, or is not a folder, or on error determining this file's children.
    • resolveFile

      public FileObject resolveFile(String name, NameScope scope) throws FileSystemException
      Returns a child by name.
      Specified by:
      resolveFile in interface FileObject
      Parameters:
      name - The name to resolve.
      Returns:
      The file.
      Throws:
      FileSystemException - On error parsing the path, or on error finding the file.
    • resolveFile

      public FileObject resolveFile(String path) throws FileSystemException
      Finds a file, relative to this file.
      Specified by:
      resolveFile in interface FileObject
      Parameters:
      path - The path of the file to locate. Can either be a relative path, which is resolved relative to this file, or an absolute path, which is resolved relative to the file system that contains this file.
      Returns:
      The file.
      Throws:
      FileSystemException - On error parsing the path, or on error finding the file.
    • delete

      public boolean delete() throws FileSystemException
      Deletes this file.
      Specified by:
      delete in interface FileObject
      Returns:
      true if this object has been deleted
      Throws:
      FileSystemException - If this file is a non-empty folder, or if this file is read-only, or on error deleteing this file.
    • delete

      public int delete(FileSelector selector) throws FileSystemException
      Deletes this file, and all children.
      Specified by:
      delete in interface FileObject
      Parameters:
      selector - The selector to use to select which files to delete.
      Returns:
      the number of deleted files
      Throws:
      FileSystemException - If this file or one of its descendents is read-only, or on error deleting this file or one of its descendents.
    • createFile

      public void createFile() throws FileSystemException
      Creates this file, if it does not exist.
      Specified by:
      createFile in interface FileObject
      Throws:
      FileSystemException - If the file already exists with the wrong type, or the parent folder is read-only, or on error creating this file or one of its ancestors.
    • createFolder

      public void createFolder() throws FileSystemException
      Creates this folder, if it does not exist. Also creates any ancestor files which do not exist.
      Specified by:
      createFolder in interface FileObject
      Throws:
      FileSystemException - If the folder already exists with the wrong type, or the parent folder is read-only, or on error creating this folder or one of its ancestors.
    • copyFrom

      public void copyFrom(FileObject file, FileSelector selector) throws FileSystemException
      Copies another file to this file.
      Specified by:
      copyFrom in interface FileObject
      Parameters:
      file - The source file to copy.
      selector - The selector to use to select which files to copy.
      Throws:
      FileSystemException - If this file is read-only, or if the source file does not exist, or on error copying the file.
    • moveTo

      public void moveTo(FileObject destFile) throws FileSystemException
      Moves (rename) the file to another one
      Specified by:
      moveTo in interface FileObject
      Parameters:
      destFile - the New filename.
      Throws:
      FileSystemException - If this file is read-only, or if the source file does not exist, or on error copying the file.
    • isSameFile

      protected boolean isSameFile(FileObject destFile) throws FileSystemException
      Checks if this fileObject is the same file as destFile just with a different name.
      E.g. for case insensitive filesystems like windows.
      Throws:
      FileSystemException
    • doIsSameFile

      protected boolean doIsSameFile(FileObject destFile) throws FileSystemException
      Checks if this fileObject is the same file as destFile just with a different name.
      E.g. for case insensitive filesystems like windows.
      Throws:
      FileSystemException
    • canRenameTo

      public boolean canRenameTo(FileObject newfile)
      Queries the object if a simple rename to the filename of newfile is possible.
      Specified by:
      canRenameTo in interface FileObject
      Parameters:
      newfile - the new filename
      Returns:
      true if rename is possible
    • findFiles

      public FileObject[] findFiles(FileSelector selector) throws FileSystemException
      Finds the set of matching descendents of this file, in depthwise order.
      Specified by:
      findFiles in interface FileObject
      Parameters:
      selector - The selector to use to select matching files.
      Returns:
      list of files or null if the base file (this object) do not exist
      Throws:
      FileSystemException
    • getContent

      public FileContent getContent() throws FileSystemException
      Returns the file's content.
      Specified by:
      getContent in interface FileObject
      Returns:
      This file's content.
      Throws:
      FileSystemException - On error getting this file's content.
    • refresh

      public void refresh() throws FileSystemException
      This will prepare the fileObject to get resynchronized with the underlaying filesystem if required
      Specified by:
      refresh in interface FileObject
      Throws:
      FileSystemException
    • close

      public void close() throws FileSystemException
      Closes this file, and its content.
      Specified by:
      close in interface FileObject
      Throws:
      FileSystemException - On error closing the file.
      See Also:
    • getInputStream

      public InputStream getInputStream() throws FileSystemException
      Returns an input stream to use to read the content of the file.
      Throws:
      FileSystemException
    • getRandomAccessContent

      public RandomAccessContent getRandomAccessContent(RandomAccessMode mode) throws FileSystemException
      Returns an input/output stream to use to read and write the content of the file in and random manner.
      Throws:
      FileSystemException
    • getOutputStream

      public OutputStream getOutputStream() throws FileSystemException
      Prepares this file for writing. Makes sure it is either a file, or its parent folder exists. Returns an output stream to use to write the content of the file to.
      Throws:
      FileSystemException
    • getOutputStream

      public OutputStream getOutputStream(boolean bAppend) throws FileSystemException
      Prepares this file for writing. Makes sure it is either a file, or its parent folder exists. Returns an output stream to use to write the content of the file to.
      Parameters:
      bAppend - true when append to the file.
      Note: If the underlaying filesystem do not support this, it wont work.
      Throws:
      FileSystemException
    • endOutput

      protected void endOutput() throws Exception
      Called when the ouput stream for this file is closed.
      Throws:
      Exception
    • handleCreate

      protected void handleCreate(FileType newType) throws Exception
      Called when this file is created. Updates cached info and notifies the parent and file system.
      Throws:
      Exception
    • handleDelete

      protected void handleDelete() throws Exception
      Called when this file is deleted. Updates cached info and notifies subclasses, parent and file system.
      Throws:
      Exception
    • handleChanged

      protected void handleChanged() throws Exception
      Called when this file is changed.
      This will only happen if you monitor the file using FileMonitor.
      Throws:
      Exception
    • childrenChanged

      protected void childrenChanged() throws Exception
      Notifies the file that its children have changed.
      Throws:
      Exception
    • childrenChanged

      protected void childrenChanged(FileName childName, FileType newType) throws Exception
      Notifies the file that its children have changed.
      Throws:
      Exception
    • findFiles

      public void findFiles(FileSelector selector, boolean depthwise, List selected) throws FileSystemException
      Traverses the descendents of this file, and builds a list of selected files.
      Specified by:
      findFiles in interface FileObject
      Parameters:
      selector - the selector used to determine if the file should be selected
      depthwise - controls the ordering in the list. e.g. deepest first
      selected - container for selected files. list needs not to be empty.
      Throws:
      FileSystemException
    • isContentOpen

      public boolean isContentOpen()
      Check if the content stream is open
      Specified by:
      isContentOpen in interface FileObject
      Returns:
      true if this is the case
    • isAttached

      public boolean isAttached()
      Check if the internal state is "attached"
      Specified by:
      isAttached in interface FileObject
      Returns:
      true if this is the case
    • getFileContentInfoFactory

      protected FileContentInfoFactory getFileContentInfoFactory()
      create the filecontentinfo implementation
    • injectType

      protected void injectType(FileType fileType)
    • holdObject

      public void holdObject(Object strongRef)
      This method is meant to add a object where this object holds a strong reference then. E.g. a archive-filesystem creates a list of all childs and they shouldnt get garbage collected until the container is garbage collected
      Parameters:
      strongRef -
    • notifyAllStreamsClosed

      protected void notifyAllStreamsClosed()
      will be called after this file-object closed all its streams.
    • getFileOperations

      public FileOperations getFileOperations() throws FileSystemException
      Specified by:
      getFileOperations in interface FileObject
      Returns:
      FileOperations interface that provides access to the operations API.
      Throws:
      FileSystemException
    • finalize

      protected void finalize() throws Throwable
      Overrides:
      finalize in class Object
      Throws:
      Throwable