Class IndexedLocalFileSystem

  • All Implemented Interfaces:
    FileSystem
    Direct Known Subclasses:
    IndexedV1LocalFileSystem

    public class IndexedLocalFileSystem
    extends LocalFileSystem
    IndexedLocalFileSystem implements a case-sensitive indexed filesystem which uses a shallow storage hierarchy with no restriction on file name or path length. This filesystem is identified by the existence of an index file (~index.dat) and recovery journal (~index.jrn).
    • Field Detail

      • INDEX_ITEM_INDENT

        protected static final java.lang.String INDEX_ITEM_INDENT
        See Also:
        Constant Field Values
      • INDEX_ITEM_SEPARATOR

        protected static final java.lang.String INDEX_ITEM_SEPARATOR
        See Also:
        Constant Field Values
    • Constructor Detail

      • IndexedLocalFileSystem

        protected IndexedLocalFileSystem​(java.lang.String rootPath)
                                  throws java.io.IOException
        Construct existing indexed filesystem with an empty index. This can be used to prepare for rebuilding the filesystem index.
        Parameters:
        rootPath -
        Throws:
        java.io.IOException
    • Method Detail

      • getIndexImplementationVersion

        public int getIndexImplementationVersion()
      • readIndexVersion

        public static int readIndexVersion​(java.lang.String rootPath)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • findItemStorage

        protected LocalFileSystem.ItemStorage findItemStorage​(java.lang.String folderPath,
                                                              java.lang.String itemName)
                                                       throws java.io.FileNotFoundException
        Find an existing storage location
        Specified by:
        findItemStorage in class LocalFileSystem
        Parameters:
        folderPath -
        itemName -
        Returns:
        storage location. A non-null value does not guarantee that the associated item actually exists.
        Throws:
        java.io.FileNotFoundException
      • deallocateItemStorage

        protected void deallocateItemStorage​(java.lang.String folderPath,
                                             java.lang.String itemName)
                                      throws java.io.IOException
        Deallocate item storage
        Specified by:
        deallocateItemStorage in class LocalFileSystem
        Parameters:
        folderPath -
        itemName -
        Throws:
        java.io.IOException
      • itemDeleted

        protected void itemDeleted​(java.lang.String folderPath,
                                   java.lang.String itemName)
                            throws java.io.IOException
        Description copied from class: LocalFileSystem
        Notify the filesystem that the property file and associated data files for an item have been removed from the filesystem.
        Overrides:
        itemDeleted in class LocalFileSystem
        Throws:
        java.io.IOException
      • getItemNames

        protected java.lang.String[] getItemNames​(java.lang.String folderPath,
                                                  boolean includeHiddenFiles)
                                           throws java.io.IOException
        Specified by:
        getItemNames in class LocalFileSystem
        Throws:
        java.io.IOException
      • getItemCount

        public int getItemCount()
                         throws java.io.IOException
        Description copied from interface: FileSystem
        Returns the number of folder items contained within this file-system.
        Throws:
        java.io.IOException
      • getFolderNames

        public java.lang.String[] getFolderNames​(java.lang.String folderPath)
                                          throws java.io.IOException
        Description copied from interface: FileSystem
        Return a list of subfolders (by name) that are stored within the specified folder path.
        Throws:
        java.io.FileNotFoundException - if folder path does not exist.
        java.io.IOException - if IO error occurs.
      • createFolder

        public void createFolder​(java.lang.String parentPath,
                                 java.lang.String folderName)
                          throws InvalidNameException,
                                 java.io.IOException
        Description copied from interface: FileSystem
        Creates a new subfolder within the specified parent folder.
        Parameters:
        parentPath - folder path of parent
        folderName - name of new subfolder
        Throws:
        InvalidNameException - if the name does not have all alphanumerics
        DuplicateFileException - if a folder exists with this name
        java.io.IOException - thrown if an IO error occurs.
      • deleteFolder

        public void deleteFolder​(java.lang.String folderPath)
                          throws java.io.IOException
        Description copied from interface: FileSystem
        Delete the specified folder.
        Parameters:
        folderPath - path of folder to be deleted
        Throws:
        FolderNotEmptyException - Thrown if the folder is not empty.
        java.io.FileNotFoundException - if there is no folder with the given path name.
        java.io.IOException - if error occured during delete.
      • moveItem

        public void moveItem​(java.lang.String folderPath,
                             java.lang.String name,
                             java.lang.String newFolderPath,
                             java.lang.String newName)
                      throws java.io.IOException,
                             InvalidNameException
        Description copied from interface: FileSystem
        Moves the specified item to a new folder.
        Specified by:
        moveItem in interface FileSystem
        Overrides:
        moveItem in class LocalFileSystem
        Parameters:
        folderPath - path of folder containing the item.
        name - name of the item to be moved.
        newFolderPath - path of folder where item is to be moved.
        Throws:
        java.io.FileNotFoundException - if the item does not exist.
        DuplicateFileException - if item with the same name exists within the new parent folder.
        FileInUseException - if the item is in-use or checked-out
        java.io.IOException - if an IO error occurs.
        InvalidNameException - if the newName is invalid
      • moveFolder

        public void moveFolder​(java.lang.String parentPath,
                               java.lang.String folderName,
                               java.lang.String newParentPath)
                        throws InvalidNameException,
                               java.io.IOException
        Description copied from interface: FileSystem
        Move the specified folder to the path specified by newFolderPath. The moved folder must not be an ancestor of the new Parent.
        Parameters:
        parentPath - path of parent folder that the moving folder currently resides in.
        folderName - name of the folder within the parentPath to be moved.
        newParentPath - path to where the folder is to be moved.
        Throws:
        InvalidNameException - if the new FolderPath contains an illegal file name.
        java.io.FileNotFoundException - if the moved folder does not exist.
        DuplicateFileException - if folder with the same name exists within the new parent folder
        FileInUseException - if any file within this folder or its decendents are in-use or checked-out
        java.io.IOException - if an IO error occurs.
      • renameFolder

        public void renameFolder​(java.lang.String parentPath,
                                 java.lang.String folderName,
                                 java.lang.String newFolderName)
                          throws InvalidNameException,
                                 java.io.IOException
        Description copied from interface: FileSystem
        Renames the specified folder to a new name.
        Parameters:
        parentPath - the parent folder of the folder to be renamed.
        folderName - the current name of the folder to be renamed.
        newFolderName - the name the folder to be renamed to.
        Throws:
        InvalidNameException - if the new FolderName contains an illegal file name.
        java.io.FileNotFoundException - if the folder to be renamed does not exist.
        DuplicateFileException - if folder with the new name already exists.
        FileInUseException - if any file within this folder or its decendents are in-use or checked-out
        java.io.IOException - if an IO error occurs.
      • folderExists

        public boolean folderExists​(java.lang.String folderPath)
        Description copied from interface: FileSystem
        Returns true if the folder specified by the path exists.
        Specified by:
        folderExists in interface FileSystem
        Specified by:
        folderExists in class LocalFileSystem
        Parameters:
        folderPath - the name of the folder to check for existence.
        Returns:
        true if the folder exists.
      • isIndexed

        public static boolean isIndexed​(java.lang.String rootPath)
        Determine if the specified directory corresponds to an indexed filesystem.
        Parameters:
        rootPath - filesystem root
        Returns:
        true if filesystem contains an index (not mangled)
      • hasIndexedStructure

        public static boolean hasIndexedStructure​(java.lang.String rootPath)
        Determine if the specified directory contains a likely indexed filesystem.
        Parameters:
        rootPath - filesystem root
        Returns:
        true if filesystem appears to be indexed (not mangled)
      • rebuild

        public static boolean rebuild​(java.io.File rootDir)
                               throws java.io.IOException
        Completely rebuild filesystem index using item information contained within indexed property files. Empty folders will be lost.
        Parameters:
        rootDir -
        Throws:
        java.io.IOException