24 package org.sleuthkit.autopsy.casemodule.services;
 
   26 import java.io.Closeable;
 
   27 import java.io.IOException;
 
   28 import java.nio.file.Files;
 
   29 import java.nio.file.attribute.BasicFileAttributes;
 
   30 import java.util.ArrayList;
 
   31 import java.util.Collection;
 
   32 import java.util.List;
 
   33 import java.util.logging.Level;
 
   34 import org.openide.util.NbBundle;
 
   52 import org.apache.commons.lang3.StringUtils;
 
  146         String types = StringUtils.join(mimeTypes, 
"', '");
 
  147         return "mime_type IN ('" + types + 
"')";
 
  160         return "data_source_obj_id = " + dataSourceObjectID + 
" AND parent_path LIKE '" + parentPath + 
"%'";
 
  176         List<AbstractFile> result = 
new ArrayList<>();
 
  178         for (
Content dataSource : dataSources) {
 
  179             result.addAll(
findFiles(dataSource, fileName));
 
  201         List<AbstractFile> result = 
new ArrayList<>();
 
  203         for (
Content dataSource : dataSources) {
 
  204             result.addAll(
findFiles(dataSource, fileName, parentSubString));
 
  242         return caseDb.
findFiles(dataSource, fileName);
 
  264         return caseDb.
findFiles(dataSource, fileName, parentSubString);
 
  285         return caseDb.
openFiles(dataSource, filePath);
 
  320             long ctime, 
long crtime, 
long atime, 
long mtime,
 
  323             String rederiveDetails, String toolName, String toolVersion, String otherDetails,
 
  326                 ctime, crtime, atime, mtime,
 
  327                 isFile, parentObj, rederiveDetails, toolName, toolVersion, otherDetails, encodingType);
 
  362             long ctime, 
long crtime, 
long atime, 
long mtime,
 
  363             boolean isFile, String mimeType,
 
  364             String rederiveDetails, String toolName, String toolVersion, String otherDetails,
 
  367                 ctime, crtime, atime, mtime,
 
  368                 isFile, mimeType, rederiveDetails, toolName, toolVersion, otherDetails, encodingType);
 
  429         return addLocalFilesDataSource(deviceId, rootVirtualDirectoryName, timeZone, null, localFilePaths, 
false, 
false, 
false, progressUpdater);
 
  461         return addLocalFilesDataSource(deviceId, rootVirtualDirectoryName, timeZone, host, localFilePaths, 
false, 
false, 
false, progressUpdater);
 
  497             List<String> localFilePaths, 
boolean createTimestamp, 
boolean accessTimestamp, 
boolean modifiedTimestamp, 
FileAddProgressUpdater progressUpdater) 
throws TskCoreException, 
TskDataException {
 
  501             String rootDirectoryName = rootVirtualDirectoryName;
 
  502             if (rootDirectoryName.isEmpty()) {
 
  512             List<AbstractFile> filesAdded = 
new ArrayList<>();
 
  513             for (java.io.File localFile : localFiles) {
 
  515                 if (null != fileAdded) {
 
  516                     filesAdded.add(fileAdded);
 
  518                     throw new TskCoreException(NbBundle.getMessage(
this.getClass(), 
"FileManager.addLocalFilesDirs.exception.cantAdd.msg", localFile.getAbsolutePath()));
 
  537                 } 
catch (TskCoreException ex) {
 
  538                     LOGGER.log(Level.SEVERE, 
"Failed to rollback transaction after exception", ex);
 
  558         int localFileDataSourcesCounter = 0;
 
  563                     ++localFileDataSourcesCounter;
 
  567         } 
catch (TskCoreException ex) {
 
  568             throw new TskCoreException(
"Error querying for existing local file data sources with defualt names", ex);
 
  585         List<java.io.File> localFiles = 
new ArrayList<>();
 
  586         for (String path : localFilePaths) {
 
  587             java.io.File localFile = 
new java.io.File(path);
 
  588             if (!localFile.exists() || !localFile.canRead()) {
 
  589                 throw new TskDataException(String.format(
"File at %s does not exist or cannot be read", localFile.getAbsolutePath()));
 
  591             localFiles.add(localFile);
 
  618         if (localFile.isDirectory()) {
 
  623             progressUpdater.fileAdded(localDirectory);
 
  628             final java.io.File[] childFiles = localFile.
listFiles();
 
  629             if (childFiles != null && childFiles.length > 0) {
 
  630                 for (java.io.File childFile : childFiles) {
 
  631                     addLocalFile(trans, localDirectory, childFile, createTime, accessTime, modifiedTime, encodingType, progressUpdater);
 
  635             return localDirectory;
 
  637             long createTimestamp = 0;
 
  638             long modifiedTimestamp = 0;
 
  639             long accessTimestamp = 0;
 
  641                 BasicFileAttributes attrs;
 
  642                 attrs = Files.readAttributes(localFile.toPath(), BasicFileAttributes.class);
 
  644                   createTimestamp = (attrs.creationTime().toMillis()/1000);
 
  647                   modifiedTimestamp = (attrs.lastModifiedTime().toMillis()/1000);
 
  650                   accessTimestamp = (attrs.lastAccessTime().toMillis()/1000);
 
  652                 return caseDb.
addLocalFile(localFile.getName(), localFile.getAbsolutePath(), localFile.length(),
 
  653                     0, createTimestamp, accessTimestamp, modifiedTimestamp,
 
  654                     localFile.isFile(), encodingType, parentDirectory, trans);
 
  655             } 
catch (IOException ex) {
 
  656                 return caseDb.
addLocalFile(localFile.getName(), localFile.getAbsolutePath(), localFile.length(),
 
  658                     localFile.isFile(), encodingType, parentDirectory, trans);                
 
  671     public void close() throws IOException {
 
  701             throw new TskCoreException(ex.getLocalizedMessage(), ex);
 
  724     public LayoutFile addCarvedFile(String fileName, 
long fileSize, 
long parentObjId, List<TskFileRange> layout) 
throws TskCoreException {
 
  729         return layoutFiles.get(0);
 
  748     public List<LayoutFile> 
addCarvedFiles(List<org.sleuthkit.datamodel.CarvedFileContainer> filesToAdd) 
throws TskCoreException {
 
  786             long ctime, 
long crtime, 
long atime, 
long mtime,
 
  789             String rederiveDetails, String toolName, String toolVersion, String otherDetails) 
throws TskCoreException {
 
  790         return addDerivedFile(fileName, localPath, size, ctime, crtime, atime, mtime, isFile, parentFile,
 
static String createFileTypeInCondition(Collection< String > mimeTypes)
CaseDbTransaction beginTransaction()
List< LayoutFile > addCarvedFiles(CarvingResult carvingResult)
VirtualDirectory getRootDirectory()
List< AbstractFile > openFiles(Content dataSource, String filePath)
List< AbstractFile > findFilesByMimeType(Collection< String > mimeTypes)
DerivedFile updateDerivedFile(DerivedFile derivedFile, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, String mimeType, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootVirtualDirectoryName, String timeZone, Host host, List< String > localFilePaths, boolean createTimestamp, boolean accessTimestamp, boolean modifiedTimestamp, FileAddProgressUpdater progressUpdater)
List< AbstractFile > findFiles(String fileName)
LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootVirtualDirectoryName, String timeZone, List< String > localFilePaths, FileAddProgressUpdater progressUpdater)
List< LayoutFile > addCarvedFiles(List< org.sleuthkit.datamodel.CarvedFileContainer > filesToAdd)
static final Logger LOGGER
List< AbstractFile > openFiles(Content dataSource, String filePath)
Content getContentById(long id)
LayoutFile addCarvedFile(String fileName, long fileSize, long parentObjId, List< TskFileRange > layout)
void fileAdded(AbstractFile newFile)
List< VirtualDirectory > getVirtualDirectoryRoots()
List< AbstractFile > findFiles(Content dataSource, String fileName, String parentSubString)
VirtualDirectory addLocalFilesDirs(List< String > localFilePaths, FileAddProgressUpdater progressUpdater)
List< AbstractFile > findFilesByMimeType(Content dataSource, Collection< String > mimeTypes)
List< AbstractFile > findFilesExactName(long parentId, String name)
AbstractFile addLocalFile(CaseDbTransaction trans, SpecialDirectory parentDirectory, java.io.File localFile, FileAddProgressUpdater progressUpdater)
final List< LayoutFile > addCarvedFiles(CarvingResult carvingResult)
DerivedFile addDerivedFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, Content parentObj, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
List< AbstractFile > listFiles()
List< AbstractFile > findFiles(Content dataSource, String fileName, AbstractFile parent)
List< AbstractFile > findFiles(Content dataSource, String fileName)
List< AbstractFile > findFilesInFolder(String fileName, AbstractFile parentFile)
AbstractFile addLocalFile(CaseDbTransaction trans, SpecialDirectory parentDirectory, java.io.File localFile, boolean createTime, boolean accessTime, boolean modifiedTime, TskData.EncodingType encodingType, FileAddProgressUpdater progressUpdater)
LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootVirtualDirectoryName, String timeZone, Host host, List< String > localFilePaths, FileAddProgressUpdater progressUpdater)
static String createParentPathCondition(long dataSourceObjectID, String parentPath)
DerivedFile updateDerivedFile(DerivedFile derivedFile, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, String mimeType, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
final SleuthkitCase caseDb
List< AbstractFile > findFiles(String fileName, String parentSubString)
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)
List< Content > getRootObjects()
static String generateFilesDataSourceName(SleuthkitCase caseDb)
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)
List< AbstractFile > findFiles(Content dataSource, String fileName)
List< AbstractFile > findFilesExactName(long parentId, String name)
List< AbstractFile > findFiles(String fileName, AbstractFile parent)
List< AbstractFile > findAllFilesWhere(String sqlWhereClause)
synchronized static Logger getLogger(String name)
FileManager(SleuthkitCase caseDb)
List< AbstractFile > findFilesByParentPath(long dataSourceObjectID, String parentPath)
static final String LOGICAL_FILE_SET_PREFIX
List< java.io.File > getFilesAndDirectories(List< String > localFilePaths)
LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootDirectoryName, String timeZone, CaseDbTransaction transaction)
DerivedFile addDerivedFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, Content parentObj, String rederiveDetails, String toolName, String toolVersion, String otherDetails, TskData.EncodingType encodingType)
FileManager getFileManager()
static synchronized IngestServices getInstance()
LocalDirectory addLocalDirectory(long parentId, String directoryName)