23 package org.sleuthkit.autopsy.casemodule.services;
25 import java.io.Closeable;
26 import java.io.IOException;
27 import java.util.ArrayList;
28 import java.util.Collection;
29 import java.util.List;
30 import java.util.logging.Level;
31 import org.openide.util.NbBundle;
46 import org.apache.commons.lang3.StringUtils;
102 if (null == caseDb) {
116 String types = StringUtils.join(mimeTypes,
"', '");
117 return "mime_type IN ('" + types +
"')";
133 if (null == caseDb) {
136 List<AbstractFile> result =
new ArrayList<>();
138 for (
Content dataSource : dataSources) {
139 result.addAll(
findFiles(dataSource, fileName));
159 if (null == caseDb) {
162 List<AbstractFile> result =
new ArrayList<>();
164 for (
Content dataSource : dataSources) {
165 result.addAll(
findFiles(dataSource, fileName, parentName));
185 if (null == caseDb) {
188 List<AbstractFile> result =
new ArrayList<>();
190 for (
Content dataSource : dataSources) {
191 result.addAll(
findFiles(dataSource, fileName, parent));
211 if (null == caseDb) {
214 return caseDb.
findFiles(dataSource, fileName);
234 if (null == caseDb) {
237 return caseDb.
findFiles(dataSource, fileName, parentName);
257 if (null == caseDb) {
260 return findFiles(dataSource, fileName, parent.getName());
280 if (null == caseDb) {
283 return caseDb.
openFiles(dataSource, filePath);
318 long ctime,
long crtime,
long atime,
long mtime,
321 String rederiveDetails, String toolName, String toolVersion, String otherDetails,
323 if (null == caseDb) {
324 throw new TskCoreException(
"File manager has been closed");
327 ctime, crtime, atime, mtime,
328 isFile, parentFile, rederiveDetails, toolName, toolVersion, otherDetails, encodingType);
343 if (null == caseDb) {
392 if (null == caseDb) {
393 throw new TskCoreException(
"File manager has been closed");
398 String rootDirectoryName = rootVirtualDirectoryName;
399 if (rootDirectoryName.isEmpty()) {
410 List<AbstractFile> filesAdded =
new ArrayList<>();
411 for (java.io.File localFile : localFiles) {
413 if (null != fileAdded) {
414 filesAdded.add(fileAdded);
416 throw new TskCoreException(NbBundle.getMessage(
this.getClass(),
"FileManager.addLocalFilesDirs.exception.cantAdd.msg", localFile.getAbsolutePath()));
430 }
catch (TskCoreException ex) {
434 }
catch (TskCoreException ex2) {
435 LOGGER.log(Level.SEVERE, String.format(
"Failed to rollback transaction after exception: %s", ex.getMessage()), ex2);
456 int localFileDataSourcesCounter = 0;
461 ++localFileDataSourcesCounter;
465 }
catch (TskCoreException ex) {
466 throw new TskCoreException(
"Error querying for existing local file data sources with defualt names", ex);
483 List<java.io.File> localFiles =
new ArrayList<>();
484 for (String path : localFilePaths) {
485 java.io.File localFile =
new java.io.File(path);
486 if (!localFile.exists() || !localFile.canRead()) {
487 throw new TskDataException(String.format(
"File at %s does not exist or cannot be read", localFile.getAbsolutePath()));
489 localFiles.add(localFile);
515 if (localFile.isDirectory()) {
520 progressUpdater.fileAdded(virtualDirectory);
525 final java.io.File[] childFiles = localFile.
listFiles();
526 if (childFiles != null && childFiles.length > 0) {
527 for (java.io.File childFile : childFiles) {
528 addLocalFile(trans, virtualDirectory, childFile, progressUpdater);
532 return virtualDirectory;
534 return caseDb.
addLocalFile(localFile.getName(), localFile.getAbsolutePath(), localFile.length(),
536 localFile.isFile(), encodingType, parentDirectory, trans);
546 public synchronized void close() throws IOException {
570 if (null == caseDb) {
571 throw new TskCoreException(
"File manager has been closed");
576 throw new TskCoreException(ex.getLocalizedMessage(), ex);
599 public synchronized LayoutFile addCarvedFile(String fileName,
long fileSize,
long parentObjId, List<TskFileRange> layout)
throws TskCoreException {
600 if (null == caseDb) {
601 throw new TskCoreException(
"File manager has been closed");
607 return layoutFiles.get(0);
626 public synchronized List<LayoutFile>
addCarvedFiles(List<org.sleuthkit.datamodel.CarvedFileContainer> filesToAdd)
throws TskCoreException {
627 if (null == caseDb) {
628 throw new TskCoreException(
"File manager has been closed");
667 long ctime,
long crtime,
long atime,
long mtime,
670 String rederiveDetails, String toolName, String toolVersion, String otherDetails)
throws TskCoreException {
671 return addDerivedFile(fileName, localPath, size, ctime, crtime, atime, mtime, isFile, parentFile,
synchronized List< AbstractFile > findFiles(String fileName, String parentName)
synchronized void close()
static String createFileTypeInCondition(Collection< String > mimeTypes)
CaseDbTransaction beginTransaction()
VirtualDirectory getRootDirectory()
synchronized VirtualDirectory addLocalFilesDirs(List< String > localFilePaths, FileAddProgressUpdater progressUpdater)
static final Logger LOGGER
synchronized LayoutFile addCarvedFile(String fileName, long fileSize, long parentObjId, List< TskFileRange > layout)
List< AbstractFile > openFiles(Content dataSource, String filePath)
Content getContentById(long id)
void fileAdded(AbstractFile newFile)
List< VirtualDirectory > getVirtualDirectoryRoots()
AbstractFile addLocalFile(CaseDbTransaction trans, VirtualDirectory parentDirectory, java.io.File localFile, TskData.EncodingType encodingType, FileAddProgressUpdater progressUpdater)
DerivedFile addDerivedFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, AbstractFile parentFile, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
synchronized List< AbstractFile > findFiles(Content dataSource, String fileName)
synchronized DerivedFile addDerivedFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, AbstractFile parentFile, String rederiveDetails, String toolName, String toolVersion, String otherDetails)
synchronized List< AbstractFile > findFilesByMimeType(Collection< String > mimeTypes)
synchronized List< LayoutFile > addCarvedFiles(List< org.sleuthkit.datamodel.CarvedFileContainer > filesToAdd)
final List< LayoutFile > addCarvedFiles(CarvingResult carvingResult)
synchronized List< AbstractFile > openFiles(Content dataSource, String filePath)
List< AbstractFile > listFiles()
List< AbstractFile > findFiles(Content dataSource, String fileName)
synchronized LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootVirtualDirectoryName, String timeZone, List< String > localFilePaths, FileAddProgressUpdater progressUpdater)
static synchronized String generateFilesDataSourceName(SleuthkitCase caseDb)
List< Content > getRootObjects()
synchronized List< AbstractFile > findFilesByMimeType(Content dataSource, Collection< String > mimeTypes)
LocalFile addLocalFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, TskData.EncodingType encodingType, AbstractFile parent)
void fireModuleContentEvent(ModuleContentEvent moduleContentEvent)
synchronized DerivedFile addDerivedFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, AbstractFile parentFile, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
synchronized List< AbstractFile > findFiles(String fileName)
List< AbstractFile > findAllFilesWhere(String sqlWhereClause)
synchronized static Logger getLogger(String name)
synchronized List< LayoutFile > addCarvedFiles(CarvingResult carvingResult)
FileManager(SleuthkitCase caseDb)
VirtualDirectory addVirtualDirectory(long parentId, String directoryName)
static final String LOGICAL_FILE_SET_PREFIX
synchronized List< AbstractFile > findFiles(Content dataSource, String fileName, AbstractFile parent)
synchronized List< AbstractFile > findFiles(String fileName, AbstractFile parent)
List< java.io.File > getFilesAndDirectories(List< String > localFilePaths)
LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootDirectoryName, String timeZone, CaseDbTransaction transaction)
AbstractFile addLocalFile(CaseDbTransaction trans, VirtualDirectory parentDirectory, java.io.File localFile, FileAddProgressUpdater progressUpdater)
synchronized List< AbstractFile > findFiles(Content dataSource, String fileName, String parentName)
static synchronized IngestServices getInstance()