Class AbstractFileObject<AFS extends AbstractFileSystem>

    • Method Detail

      • 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
      • childrenChanged

        protected void childrenChanged​(FileName childName,
                                       FileType newType)
                                throws java.lang.Exception
        Notifies the file that its children have changed.
        Parameters:
        childName - The name of the child.
        newType - The type of the child.
        Throws:
        java.lang.Exception - if an error occurs.
      • compareTo

        public int compareTo​(FileObject file)
        Compares two FileObjects (ignores case).
        Specified by:
        compareTo in interface java.lang.Comparable<AFS extends AbstractFileSystem>
        Parameters:
        file - the object to compare.
        Returns:
        a negative integer, zero, or a positive integer when this object is less than, equal to, or greater than the given object.
      • doAttach

        protected void doAttach()
                         throws java.lang.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:
        java.lang.Exception - if an error occurs.
      • doCreateFolder

        protected void doCreateFolder()
                               throws java.lang.Exception
        Creates this file as a folder. Is only called when: This implementation throws an exception.
        Throws:
        java.lang.Exception - if an error occurs.
      • doDelete

        protected void doDelete()
                         throws java.lang.Exception
        Deletes the file. Is only called when: This implementation throws an exception.
        Throws:
        java.lang.Exception - if an error occurs.
      • doDetach

        protected void doDetach()
                         throws java.lang.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:
        java.lang.Exception - if an error occurs.
      • doGetAttributes

        protected java.util.Map<java.lang.String,​java.lang.Object> doGetAttributes()
                                                                                  throws java.lang.Exception
        Returns the attributes of this file. Is only called if doGetType() does not return FileType.IMAGINARY.

        This implementation always returns an empty map.

        Returns:
        The attributes of the file.
        Throws:
        java.lang.Exception - if an error occurs.
      • doGetCertificates

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

        This implementation always returns null.

        Returns:
        The certificates used to sign the file.
        Throws:
        java.lang.Exception - if an error occurs.
      • doGetContentSize

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

        protected abstract java.io.InputStream doGetInputStream()
                                                         throws java.lang.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.

        Returns:
        An InputStream to read the file content.
        Throws:
        java.lang.Exception - if an error occurs.
      • doGetLastModifiedTime

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

        This implementation throws an exception.

        Returns:
        The last modification time.
        Throws:
        java.lang.Exception - if an error occurs.
      • doGetOutputStream

        protected java.io.OutputStream doGetOutputStream​(boolean bAppend)
                                                  throws java.lang.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.

        Parameters:
        bAppend - true if the file should be appended to, false if it should be overwritten.
        Returns:
        An OutputStream to write to the file.
        Throws:
        java.lang.Exception - if an error occurs.
      • doGetRandomAccessContent

        protected RandomAccessContent doGetRandomAccessContent​(RandomAccessMode mode)
                                                        throws java.lang.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.

        Parameters:
        mode - The mode to access the file.
        Returns:
        The RandomAccessContext.
        Throws:
        java.lang.Exception - if an error occurs.
      • doGetType

        protected abstract FileType doGetType()
                                       throws java.lang.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.
        Returns:
        the type of the file.
        Throws:
        java.lang.Exception - if an error occurs.
      • doIsExecutable

        protected boolean doIsExecutable()
                                  throws java.lang.Exception
        Determines if this file is executable. Is only called if doGetType() does not return FileType.IMAGINARY.

        This implementation always returns false.

        Returns:
        true if the file is executable, false otherwise.
        Throws:
        java.lang.Exception - if an error occurs.
      • doIsHidden

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

        This implementation always returns false.

        Returns:
        true if the file is hidden, false otherwise.
        Throws:
        java.lang.Exception - if an error occurs.
      • doIsReadable

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

        This implementation always returns true.

        Returns:
        true if the file is readable, false otherwise.
        Throws:
        java.lang.Exception - if an error occurs.
      • 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.
        Parameters:
        destFile - The file to compare to.
        Returns:
        true if the FileObjects are the same.
        Throws:
        FileSystemException - if an error occurs.
      • doIsWriteable

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

        This implementation always returns true.

        Returns:
        true if the file is writable.
        Throws:
        java.lang.Exception - if an error occurs.
      • doListChildren

        protected abstract java.lang.String[] doListChildren()
                                                      throws java.lang.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.
        Returns:
        a possible empty String array if the file is a directory or null or an exception if the file is not a directory or can't be read.
        Throws:
        java.lang.Exception - if an error occurs.
      • doListChildrenResolved

        protected FileObject[] doListChildrenResolved()
                                               throws java.lang.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())

        Returns:
        The children of this FileObject.
        Throws:
        java.lang.Exception - if an error occurs.
      • doRemoveAttribute

        protected void doRemoveAttribute​(java.lang.String attrName)
                                  throws java.lang.Exception
        Removes an attribute of this file.

        Is only called if doGetType() does not return FileType.IMAGINARY.

        This implementation throws an exception.

        Parameters:
        attrName - The name of the attribute to remove.
        Throws:
        java.lang.Exception - if an error occurs.
        Since:
        2.0
      • doRename

        protected void doRename​(FileObject newFile)
                         throws java.lang.Exception
        Renames the file.

        Is only called when:

        This implementation throws an exception.

        Parameters:
        newFile - A FileObject with the new file name.
        Throws:
        java.lang.Exception - if an error occurs.
      • doSetAttribute

        protected void doSetAttribute​(java.lang.String attrName,
                                      java.lang.Object value)
                               throws java.lang.Exception
        Sets an attribute of this file.

        Is only called if doGetType() does not return FileType.IMAGINARY.

        This implementation throws an exception.

        Parameters:
        attrName - The attribute name.
        value - The value to be associated with the attribute name.
        Throws:
        java.lang.Exception - if an error occurs.
      • doSetExecutable

        protected boolean doSetExecutable​(boolean executable,
                                          boolean ownerOnly)
                                   throws java.lang.Exception
        Make the file executable.

        Only called if doGetType() does not return FileType.IMAGINARY.

        This implementation returns false.

        Parameters:
        executable - True to allow access, false to disallow.
        ownerOnly - If true, the permission applies only to the owner; otherwise, it applies to everybody.
        Returns:
        true if the operation succeeded.
        Throws:
        java.lang.Exception - Any Exception thrown is wrapped in FileSystemException.
        Since:
        2.1
        See Also:
        setExecutable(boolean, boolean)
      • doSetLastModifiedTime

        protected boolean doSetLastModifiedTime​(long modtime)
                                         throws java.lang.Exception
        Sets the last modified time of this file.

        Is only called if doGetType() does not return FileType.IMAGINARY.

        This implementation throws an exception.

        Parameters:
        modtime - The last modification time.
        Returns:
        true if the time was set.
        Throws:
        java.lang.Exception - Any Exception thrown is wrapped in FileSystemException.
      • doSetReadable

        protected boolean doSetReadable​(boolean readable,
                                        boolean ownerOnly)
                                 throws java.lang.Exception
        Make the file or folder readable.

        Only called if doGetType() does not return FileType.IMAGINARY.

        This implementation returns false.

        Parameters:
        readable - True to allow access, false to disallow
        ownerOnly - If true, the permission applies only to the owner; otherwise, it applies to everybody.
        Returns:
        true if the operation succeeded
        Throws:
        java.lang.Exception - Any Exception thrown is wrapped in FileSystemException.
        Since:
        2.1
        See Also:
        setReadable(boolean, boolean)
      • doSetWritable

        protected boolean doSetWritable​(boolean writable,
                                        boolean ownerOnly)
                                 throws java.lang.Exception
        Make the file or folder writeable.

        Only called if doGetType() does not return FileType.IMAGINARY.

        Parameters:
        writable - True to allow access, false to disallow
        ownerOnly - If true, the permission applies only to the owner; otherwise, it applies to everybody.
        Returns:
        true if the operation succeeded
        Throws:
        java.lang.Exception - Any Exception thrown is wrapped in FileSystemException.
        Since:
        2.1
        See Also:
        setWritable(boolean, boolean)
      • endOutput

        protected void endOutput()
                          throws java.lang.Exception
        Called when the output stream for this file is closed.
        Throws:
        java.lang.Exception - if an error occurs.
      • finalize

        protected void finalize()
                         throws java.lang.Throwable
        Overrides:
        finalize in class java.lang.Object
        Throws:
        java.lang.Throwable
      • findFiles

        public void findFiles​(FileSelector selector,
                              boolean depthwise,
                              java.util.List<FileObject> selected)
                       throws FileSystemException
        Traverses the descendants of this file, and builds a list of selected files.
        Specified by:
        findFiles in interface FileObject
        Parameters:
        selector - The FileSelector.
        depthwise - if true files are added after their descendants, before otherwise.
        selected - A List of the located FileObjects.
        Throws:
        FileSystemException - if an error occurs.
      • getAbstractFileSystem

        protected AFS getAbstractFileSystem()
        Returns the file system this file belongs to.
        Returns:
        The FileSystem this file is associated with.
      • getPublicURIString

        public java.lang.String getPublicURIString()
        Returns the receiver as a URI String for public display, like, without a password.
        Specified by:
        getPublicURIString in interface FileObject
        Returns:
        A URI String without a password, never null.
      • getOutputStream

        public java.io.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.
        Returns:
        An OutputStream where the new contents of the file can be written.
        Throws:
        FileSystemException - if an error occurs.
      • getOutputStream

        public java.io.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 underlying filesystem does not support appending, a FileSystemException is thrown.
        Returns:
        An OutputStream where the new contents of the file can be written.
        Throws:
        FileSystemException - if an error occurs; for example:
        bAppend is true, and the underlying FileSystem does not support it
      • handleChanged

        protected void handleChanged()
                              throws java.lang.Exception
        Called when this file is changed.

        This will only happen if you monitor the file using FileMonitor.

        Throws:
        java.lang.Exception - if an error occurs.
      • handleCreate

        protected void handleCreate​(FileType newType)
                             throws java.lang.Exception
        Called when this file is created. Updates cached info and notifies the parent and file system.
        Parameters:
        newType - The type of the file.
        Throws:
        java.lang.Exception - if an error occurs.
      • handleDelete

        protected void handleDelete()
                             throws java.lang.Exception
        Called when this file is deleted. Updates cached info and notifies subclasses, parent and file system.
        Throws:
        java.lang.Exception - if an error occurs.
      • holdObject

        public void holdObject​(java.lang.Object strongRef)
        This method is meant to add an object where this object holds a strong reference then. E.g. a archive-filesystem creates a list of all children and they shouldn't get garbage collected until the container is garbage collected
        Parameters:
        strongRef - The Object to add.
      • isAttached

        public boolean isAttached()
        Check if the internal state is "attached".
        Specified by:
        isAttached in interface FileObject
        Returns:
        true if this is the case
      • 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.
        Parameters:
        destFile - The file to compare to.
        Returns:
        true if the FileObjects are the same.
        Throws:
        FileSystemException - if an error occurs.
      • iterator

        public java.util.Iterator<FileObjectiterator()
        Returns an iterator over a set of all FileObject in this file object.
        Specified by:
        iterator in interface java.lang.Iterable<AFS extends AbstractFileSystem>
        Returns:
        an Iterator.
      • listFiles

        public java.util.List<FileObjectlistFiles​(FileSelector selector)
                                             throws FileSystemException
        Lists the set of matching descendants of this file, in depthwise order.
        Parameters:
        selector - The FileSelector.
        Returns:
        list of files or null if the base file (this object) do not exist or the selector is null
        Throws:
        FileSystemException - if an error occurs.
      • notifyAllStreamsClosed

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

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

        This implementation does nothing.

        Throws:
        java.lang.Exception - if an error occurs.
      • onChildrenChanged

        protected void onChildrenChanged​(FileName child,
                                         FileType newType)
                                  throws java.lang.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.

        Parameters:
        child - The name of the child that changed.
        newType - The type of the file.
        Throws:
        java.lang.Exception - if an error occurs.
      • resolveFile

        public FileObject resolveFile​(java.lang.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 FileObject.
        Throws:
        FileSystemException - if an error occurs.
      • setExecutable

        public boolean setExecutable​(boolean readable,
                                     boolean ownerOnly)
                              throws FileSystemException
        Description copied from interface: FileObject
        Sets the owner's (or everybody's) write permission.
        Specified by:
        setExecutable in interface FileObject
        Parameters:
        readable - True to allow read access, false to disallow.
        ownerOnly - If true, the permission applies only to the owner; otherwise, it applies to everybody.
        Returns:
        true if the operation succeeded.
        Throws:
        FileSystemException - On error determining if this file exists.
      • setReadable

        public boolean setReadable​(boolean readable,
                                   boolean ownerOnly)
                            throws FileSystemException
        Description copied from interface: FileObject
        Sets the owner's (or everybody's) read permission.
        Specified by:
        setReadable in interface FileObject
        Parameters:
        readable - True to allow read access, false to disallow
        ownerOnly - If true, the permission applies only to the owner; otherwise, it applies to everybody.
        Returns:
        true if the operation succeeded
        Throws:
        FileSystemException - On error determining if this file exists.
      • setWritable

        public boolean setWritable​(boolean readable,
                                   boolean ownerOnly)
                            throws FileSystemException
        Description copied from interface: FileObject
        Sets the owner's (or everybody's) write permission.
        Specified by:
        setWritable in interface FileObject
        Parameters:
        readable - True to allow read access, false to disallow
        ownerOnly - If true, the permission applies only to the owner; otherwise, it applies to everybody.
        Returns:
        true if the operation succeeded
        Throws:
        FileSystemException - On error determining if this file exists.
      • toString

        public java.lang.String toString()
        Returns the URI as a String.
        Overrides:
        toString in class java.lang.Object
        Returns:
        Returns the URI as a String.