Package ghidra.formats.gfilesystem
Class AbstractFileExtractorTask
- java.lang.Object
-
- ghidra.util.task.Task
-
- ghidra.formats.gfilesystem.AbstractFileExtractorTask
-
- All Implemented Interfaces:
MonitoredRunnable
- Direct Known Subclasses:
GFileSystemExtractAllTask
public abstract class AbstractFileExtractorTask extends Task
Common base class for tasks that need to extract files from a GFileSystem location.
-
-
Field Summary
Fields Modifier and Type Field Description protected GFileSystem
fs
protected java.io.File
rootOutputDirectory
-
Fields inherited from class ghidra.util.task.Task
taskMonitor, waitForTaskCompleted
-
-
Constructor Summary
Constructors Constructor Description AbstractFileExtractorTask(java.lang.String title, boolean canCancel, boolean hasProgress, boolean isModal, java.io.File rootOutputDir)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
extractFile(GFile srcFile, java.io.File outputFile, TaskMonitor monitor)
protected java.io.InputStream
getSourceFileInputStream(GFile file, TaskMonitor monitor)
long
getTotalBytesExportedCount()
Return the number of bytes that were exported.int
getTotalDirsExportedCount()
Return the number of directories that were exported.int
getTotalFilesExportedCount()
Return the number of files that were exported.protected boolean
handleUnexpectedException(GFile file, java.lang.Exception e)
Allows custom handling of exceptions that occur during file extraction.protected java.lang.String
mapSourceFilenameToDest(GFile srcFile)
Maps the untrusted, potentially hostile, filename of the source file to a name that is suitable to be used to create a file on the user's local file system.protected void
processDirectory(GFile srcGFileDirectory, java.io.File destDirectory, TaskMonitor monitor)
Extract the contents of a directory in aGFileSystem
into a local file system directory.protected void
processFile(GFile srcFile, java.io.File destFSFile, TaskMonitor monitor)
protected void
startExtract(GFileSystem fs, GFile srcDir, TaskMonitor monitor)
Starts the file extraction process.-
Methods inherited from class ghidra.util.task.Task
addTaskListener, canCancel, cancel, getStatusTextAlignment, getTaskTitle, getWaitForTaskCompleted, hasProgress, isCancelled, isModal, monitoredRun, notifyTaskListeners, run, setHasProgress
-
-
-
-
Field Detail
-
fs
protected GFileSystem fs
-
rootOutputDirectory
protected java.io.File rootOutputDirectory
-
-
Constructor Detail
-
AbstractFileExtractorTask
public AbstractFileExtractorTask(java.lang.String title, boolean canCancel, boolean hasProgress, boolean isModal, java.io.File rootOutputDir)
- Parameters:
title
- SeeTask(String, boolean, boolean, boolean)
canCancel
- SeeTask(String, boolean, boolean, boolean)
hasProgress
- SeeTask(String, boolean, boolean, boolean)
isModal
- SeeTask(String, boolean, boolean, boolean)
rootOutputDir
- base directory where files will be extracted to
-
-
Method Detail
-
startExtract
protected void startExtract(GFileSystem fs, GFile srcDir, TaskMonitor monitor) throws CancelledException, java.io.IOException
Starts the file extraction process.- Parameters:
fs
- theGFileSystem
that holds the filessrcDir
- the starting directory to extract, ifnull
, start at root of file systemmonitor
-TaskMonitor
that will be updated with progress and checked for cancel- Throws:
CancelledException
- if the extraction is cancelled.java.io.IOException
- if an exception occurs extracting the files.
-
processDirectory
protected void processDirectory(GFile srcGFileDirectory, java.io.File destDirectory, TaskMonitor monitor) throws java.io.IOException, CancelledException
Extract the contents of a directory in aGFileSystem
into a local file system directory.The destination directory is created if not present.
- Parameters:
srcGFileDirectory
- if null, directory is filesystem rootdestDirectory
- destination / output directorymonitor
-TaskMonitor
to watch and update with progress- Throws:
java.io.IOException
- if IO problem.CancelledException
-
processFile
protected void processFile(GFile srcFile, java.io.File destFSFile, TaskMonitor monitor) throws java.io.IOException, CancelledException
- Throws:
java.io.IOException
CancelledException
-
mapSourceFilenameToDest
protected java.lang.String mapSourceFilenameToDest(GFile srcFile) throws java.io.IOException
Maps the untrusted, potentially hostile, filename of the source file to a name that is suitable to be used to create a file on the user's local file system.NOTE: This base implementation converts relative directory names to spelled-out versions of that directory, eg. "." becomes "dot".
If you wish to modify this behavior, override this method and return different mappings.
- Parameters:
srcFile
- source file- Returns:
- String name of the source file, possibly modified to be safer
- Throws:
java.io.IOException
- thrown if name is not mappable and the extract process should stop
-
handleUnexpectedException
protected boolean handleUnexpectedException(GFile file, java.lang.Exception e)
Allows custom handling of exceptions that occur during file extraction.Return true if the exception should be ignored by the file extraction process, otherwise return false if it should be propagated up the call stack.
- Parameters:
file
- file that was being extracted when the exception happenede
- the exception- Returns:
- true if the exception should be suppressed, false if the exception should be thrown
-
extractFile
protected void extractFile(GFile srcFile, java.io.File outputFile, TaskMonitor monitor) throws CancelledException
- Throws:
CancelledException
-
getSourceFileInputStream
protected java.io.InputStream getSourceFileInputStream(GFile file, TaskMonitor monitor) throws CancelledException, java.io.IOException
- Throws:
CancelledException
java.io.IOException
-
getTotalFilesExportedCount
public int getTotalFilesExportedCount()
Return the number of files that were exported.- Returns:
- the number of files that were exported
-
getTotalDirsExportedCount
public int getTotalDirsExportedCount()
Return the number of directories that were exported.- Returns:
- the number of directories that were exported
-
getTotalBytesExportedCount
public long getTotalBytesExportedCount()
Return the number of bytes that were exported.- Returns:
- the number of bytes that were exported
-
-