Package ghidra.framework.store.local
Class IndexedLocalFileSystem
java.lang.Object
ghidra.framework.store.local.LocalFileSystem
ghidra.framework.store.local.IndexedLocalFileSystem
- All Implemented Interfaces:
FileSystem
- Direct Known Subclasses:
IndexedV1LocalFileSystem
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).-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
BadStorageNameException
invalid storage name encountered.static class
IndexReadException
occurs when an error occurs while reading/processing the filesystem indexstatic class
IndexReadException
occurs when an error occurs while reading/processing the filesystem indexNested classes/interfaces inherited from class ghidra.framework.store.local.LocalFileSystem
LocalFileSystem.ItemStorage
-
Field Summary
Modifier and TypeFieldDescriptionprotected static final String
protected static final String
static final int
Fields inherited from class ghidra.framework.store.local.LocalFileSystem
eventManager, HIDDEN_DIR_PREFIX, HIDDEN_DIR_PREFIX_CHAR, HIDDEN_ITEM_PREFIX, isVersioned, readOnly, root
Fields inherited from interface ghidra.framework.store.FileSystem
SEPARATOR, SEPARATOR_CHAR
-
Constructor Summary
ModifierConstructorDescriptionprotected
IndexedLocalFileSystem
(String rootPath) Construct existing indexed filesystem with an empty index. -
Method Summary
Modifier and TypeMethodDescriptionprotected LocalFileSystem.ItemStorage
allocateItemStorage
(String folderPath, String itemName) Allocate a new storage locationvoid
createFolder
(String parentPath, String folderName) Creates a new subfolder within the specified parent folder.protected void
deallocateItemStorage
(String folderPath, String itemName) Deallocate item storagevoid
deleteFolder
(String folderPath) Delete the specified folder.void
dispose()
Cleanup and release resourcesprotected LocalFileSystem.ItemStorage
findItemStorage
(String folderPath, String itemName) Find an existing storage locationboolean
folderExists
(String folderPath) Returns true if the folder specified by the path exists.String[]
getFolderNames
(String folderPath) Return a list of subfolders (by name) that are stored within the specified folder path.int
int
Returns the number of folder items contained within this file-system.String[]
getItemNames
(String folderPath, boolean includeHiddenFiles) int
static boolean
hasIndexedStructure
(String rootPath) Determine if the specified directory contains a likely indexed filesystem.static boolean
Determine if the specified directory corresponds to an indexed filesystem.protected void
itemDeleted
(String folderPath, String itemName) Notify the filesystem that the property file and associated data files for an item have been removed from the filesystem.void
moveFolder
(String parentPath, String folderName, String newParentPath) Move the specified folder to the path specified by newFolderPath.void
Moves the specified item to a new folder.static int
readIndexVersion
(String rootPath) static boolean
Completely rebuild filesystem index using item information contained within indexed property files.void
renameFolder
(String parentPath, String folderName, String newFolderName) Renames the specified folder to a new name.Methods inherited from class ghidra.framework.store.local.LocalFileSystem
addFileSystemListener, checkDisposed, cleanupAfterConstruction, createDatabase, createDatabase, createDataFile, createFile, createTemporaryDatabase, deleteEmptyVersionedFolders, escapeHiddenDirPrefixChars, fileExists, fileIdChanged, getItem, getItem, getItemNames, getItems, getLocalFileSystem, getName, getParentPath, getPath, getUserName, isHiddenDirName, isOnline, isReadOnly, isRefreshRequired, isShared, isValidNameCharacter, isVersioned, log, migrationInProgress, removeFileSystemListener, setAssociatedRepositoryLogger, setValidationRequired, testValidName, unescapeHiddenDirPrefixChars
-
Field Details
-
LATEST_INDEX_VERSION
public static final int LATEST_INDEX_VERSION- See Also:
-
INDEX_ITEM_INDENT
- See Also:
-
INDEX_ITEM_SEPARATOR
- See Also:
-
-
Constructor Details
-
IndexedLocalFileSystem
Construct existing indexed filesystem with an empty index. This can be used to prepare for rebuilding the filesystem index.- Parameters:
rootPath
-- Throws:
IOException
-
-
Method Details
-
getMaxNameLength
public int getMaxNameLength()- Specified by:
getMaxNameLength
in classLocalFileSystem
- Returns:
- the maximum name length permitted for folders or items.
-
dispose
public void dispose()Description copied from interface:FileSystem
Cleanup and release resources- Specified by:
dispose
in interfaceFileSystem
- Overrides:
dispose
in classLocalFileSystem
-
getIndexImplementationVersion
public int getIndexImplementationVersion() -
readIndexVersion
- Throws:
IOException
-
findItemStorage
protected LocalFileSystem.ItemStorage findItemStorage(String folderPath, String itemName) throws FileNotFoundException Find an existing storage location- Specified by:
findItemStorage
in classLocalFileSystem
- Parameters:
folderPath
-itemName
-- Returns:
- storage location. A non-null value does not guarantee that the associated item actually exists.
- Throws:
FileNotFoundException
-
allocateItemStorage
protected LocalFileSystem.ItemStorage allocateItemStorage(String folderPath, String itemName) throws IOException, InvalidNameException Allocate a new storage location- Specified by:
allocateItemStorage
in classLocalFileSystem
- Parameters:
folderPath
-itemName
-- Returns:
- storage location
- Throws:
DuplicateFileException
- if item path has previously been allocatedIOException
- if invalid path/item name specifiedInvalidNameException
- if folderPath or itemName contains invalid characters
-
deallocateItemStorage
Deallocate item storage- Specified by:
deallocateItemStorage
in classLocalFileSystem
- Parameters:
folderPath
-itemName
-- Throws:
IOException
-
itemDeleted
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 classLocalFileSystem
- Parameters:
folderPath
-itemName
-- Throws:
IOException
-
getItemNames
- Specified by:
getItemNames
in classLocalFileSystem
- Throws:
IOException
-
getItemCount
Description copied from interface:FileSystem
Returns the number of folder items contained within this file-system.- Throws:
IOException
-
getFolderNames
Description copied from interface:FileSystem
Return a list of subfolders (by name) that are stored within the specified folder path.- Throws:
IOException
- if IO error occurs.
-
createFolder
public void createFolder(String parentPath, String folderName) throws InvalidNameException, IOException Description copied from interface:FileSystem
Creates a new subfolder within the specified parent folder.- Parameters:
parentPath
- folder path of parentfolderName
- name of new subfolder- Throws:
InvalidNameException
- if the name does not have all alphanumericsIOException
- thrown if an IO error occurs.
-
deleteFolder
Description copied from interface:FileSystem
Delete the specified folder.- Parameters:
folderPath
- path of folder to be deleted- Throws:
IOException
- if error occurred during delete.
-
moveItem
public void moveItem(String folderPath, String name, String newFolderPath, String newName) throws IOException, InvalidNameException Description copied from interface:FileSystem
Moves the specified item to a new folder.- Specified by:
moveItem
in interfaceFileSystem
- Overrides:
moveItem
in classLocalFileSystem
- 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:
IOException
- if an IO error occurs.InvalidNameException
- if the newName is invalid
-
moveFolder
public void moveFolder(String parentPath, String folderName, String newParentPath) throws InvalidNameException, 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.IOException
- if an IO error occurs.
-
renameFolder
public void renameFolder(String parentPath, String folderName, String newFolderName) throws InvalidNameException, 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.IOException
- if an IO error occurs.
-
folderExists
Description copied from interface:FileSystem
Returns true if the folder specified by the path exists.- Specified by:
folderExists
in interfaceFileSystem
- Specified by:
folderExists
in classLocalFileSystem
- Parameters:
folderPath
- the name of the folder to check for existence.- Returns:
- true if the folder exists.
-
isIndexed
Determine if the specified directory corresponds to an indexed filesystem.- Parameters:
rootPath
- filesystem root- Returns:
- true if filesystem contains an index (not mangled)
-
hasIndexedStructure
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
Completely rebuild filesystem index using item information contained within indexed property files. Empty folders will be lost.- Parameters:
rootDir
-- Throws:
IOException
-