mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-14 17:06:16 +00:00
Adding local directory type
This commit is contained in:
parent
43f103b5ad
commit
c17c76a20f
@ -36,6 +36,7 @@ import org.sleuthkit.datamodel.AbstractFile;
|
|||||||
import org.sleuthkit.datamodel.Content;
|
import org.sleuthkit.datamodel.Content;
|
||||||
import org.sleuthkit.datamodel.DerivedFile;
|
import org.sleuthkit.datamodel.DerivedFile;
|
||||||
import org.sleuthkit.datamodel.LayoutFile;
|
import org.sleuthkit.datamodel.LayoutFile;
|
||||||
|
import org.sleuthkit.datamodel.LocalDirectory;
|
||||||
import org.sleuthkit.datamodel.SleuthkitCase;
|
import org.sleuthkit.datamodel.SleuthkitCase;
|
||||||
import org.sleuthkit.datamodel.SleuthkitCase.CaseDbTransaction;
|
import org.sleuthkit.datamodel.SleuthkitCase.CaseDbTransaction;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
@ -510,14 +511,16 @@ public class FileManager implements Closeable {
|
|||||||
* @throws TskCoreException If there is a problem completing a database
|
* @throws TskCoreException If there is a problem completing a database
|
||||||
* operation.
|
* operation.
|
||||||
*/
|
*/
|
||||||
private AbstractFile addLocalFile(CaseDbTransaction trans, VirtualDirectory parentDirectory, java.io.File localFile,
|
private AbstractFile addLocalFile(CaseDbTransaction trans, AbstractFile parentDirectory, java.io.File localFile,
|
||||||
TskData.EncodingType encodingType, FileAddProgressUpdater progressUpdater) throws TskCoreException {
|
TskData.EncodingType encodingType, FileAddProgressUpdater progressUpdater) throws TskCoreException {
|
||||||
if (localFile.isDirectory()) {
|
if (localFile.isDirectory()) {
|
||||||
/*
|
/*
|
||||||
* Add the directory as a virtual directory.
|
* Add the directory as a virtual directory.
|
||||||
*/
|
*/
|
||||||
VirtualDirectory virtualDirectory = caseDb.addVirtualDirectory(parentDirectory.getId(), localFile.getName(), trans);
|
//VirtualDirectory virtualDirectory = caseDb.addVirtualDirectory(parentDirectory.getId(), localFile.getName(), trans);
|
||||||
progressUpdater.fileAdded(virtualDirectory);
|
//progressUpdater.fileAdded(virtualDirectory);
|
||||||
|
LocalDirectory localDirectory = caseDb.addLocalDirectory(parentDirectory.getId(), localFile.getName(), trans);
|
||||||
|
progressUpdater.fileAdded(localDirectory);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add its children, if any.
|
* Add its children, if any.
|
||||||
@ -525,11 +528,11 @@ public class FileManager implements Closeable {
|
|||||||
final java.io.File[] childFiles = localFile.listFiles();
|
final java.io.File[] childFiles = localFile.listFiles();
|
||||||
if (childFiles != null && childFiles.length > 0) {
|
if (childFiles != null && childFiles.length > 0) {
|
||||||
for (java.io.File childFile : childFiles) {
|
for (java.io.File childFile : childFiles) {
|
||||||
addLocalFile(trans, virtualDirectory, childFile, progressUpdater);
|
addLocalFile(trans, localDirectory, childFile, progressUpdater);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return virtualDirectory;
|
return localDirectory;
|
||||||
} else {
|
} else {
|
||||||
return caseDb.addLocalFile(localFile.getName(), localFile.getAbsolutePath(), localFile.length(),
|
return caseDb.addLocalFile(localFile.getName(), localFile.getAbsolutePath(), localFile.length(),
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
@ -695,7 +698,7 @@ public class FileManager implements Closeable {
|
|||||||
* @deprecated Use the version with explicit EncodingType instead
|
* @deprecated Use the version with explicit EncodingType instead
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
private AbstractFile addLocalFile(CaseDbTransaction trans, VirtualDirectory parentDirectory, java.io.File localFile, FileAddProgressUpdater progressUpdater) throws TskCoreException {
|
private AbstractFile addLocalFile(CaseDbTransaction trans, AbstractFile parentDirectory, java.io.File localFile, FileAddProgressUpdater progressUpdater) throws TskCoreException {
|
||||||
return addLocalFile(trans, parentDirectory, localFile, TskData.EncodingType.NONE, progressUpdater);
|
return addLocalFile(trans, parentDirectory, localFile, TskData.EncodingType.NONE, progressUpdater);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ import org.sleuthkit.datamodel.File;
|
|||||||
import org.sleuthkit.datamodel.Image;
|
import org.sleuthkit.datamodel.Image;
|
||||||
import org.sleuthkit.datamodel.LayoutFile;
|
import org.sleuthkit.datamodel.LayoutFile;
|
||||||
import org.sleuthkit.datamodel.LocalFile;
|
import org.sleuthkit.datamodel.LocalFile;
|
||||||
|
import org.sleuthkit.datamodel.LocalDirectory;
|
||||||
import org.sleuthkit.datamodel.SlackFile;
|
import org.sleuthkit.datamodel.SlackFile;
|
||||||
import org.sleuthkit.datamodel.SleuthkitItemVisitor;
|
import org.sleuthkit.datamodel.SleuthkitItemVisitor;
|
||||||
import org.sleuthkit.datamodel.SleuthkitVisitableItem;
|
import org.sleuthkit.datamodel.SleuthkitVisitableItem;
|
||||||
@ -110,6 +111,11 @@ abstract class AbstractContentChildren<T> extends Keys<T> {
|
|||||||
return new VirtualDirectoryNode(ld);
|
return new VirtualDirectoryNode(ld);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AbstractContentNode<? extends Content> visit(LocalDirectory ld) {
|
||||||
|
return new LocalDirectoryNode(ld);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AbstractContentNode<? extends Content> visit(SlackFile sf) {
|
public AbstractContentNode<? extends Content> visit(SlackFile sf) {
|
||||||
return new SlackFileNode(sf);
|
return new SlackFileNode(sf);
|
||||||
|
@ -31,6 +31,8 @@ interface ContentNodeVisitor<T> {
|
|||||||
T visit(ImageNode in);
|
T visit(ImageNode in);
|
||||||
|
|
||||||
T visit(VirtualDirectoryNode lcn);
|
T visit(VirtualDirectoryNode lcn);
|
||||||
|
|
||||||
|
T visit(LocalDirectoryNode ldn);
|
||||||
|
|
||||||
T visit(VolumeNode vn);
|
T visit(VolumeNode vn);
|
||||||
|
|
||||||
@ -96,6 +98,11 @@ interface ContentNodeVisitor<T> {
|
|||||||
return defaultVisit(ldn);
|
return defaultVisit(ldn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T visit(LocalDirectoryNode ldn) {
|
||||||
|
return defaultVisit(ldn);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public T visit(SlackFileNode sfn) {
|
public T visit(SlackFileNode sfn) {
|
||||||
return defaultVisit(sfn);
|
return defaultVisit(sfn);
|
||||||
|
@ -44,6 +44,7 @@ import org.sleuthkit.datamodel.Directory;
|
|||||||
import org.sleuthkit.datamodel.File;
|
import org.sleuthkit.datamodel.File;
|
||||||
import org.sleuthkit.datamodel.LayoutFile;
|
import org.sleuthkit.datamodel.LayoutFile;
|
||||||
import org.sleuthkit.datamodel.LocalFile;
|
import org.sleuthkit.datamodel.LocalFile;
|
||||||
|
import org.sleuthkit.datamodel.LocalDirectory;
|
||||||
import org.sleuthkit.datamodel.SlackFile;
|
import org.sleuthkit.datamodel.SlackFile;
|
||||||
import org.sleuthkit.datamodel.VirtualDirectory;
|
import org.sleuthkit.datamodel.VirtualDirectory;
|
||||||
|
|
||||||
@ -229,6 +230,38 @@ public class DataModelActionsFactory {
|
|||||||
actionsList.addAll(ContextMenuExtensionPoint.getActions());
|
actionsList.addAll(ContextMenuExtensionPoint.getActions());
|
||||||
return actionsList;
|
return actionsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<Action> getActions(LocalDirectory directory, boolean isArtifactSource) {
|
||||||
|
List<Action> actionsList = new ArrayList<>();
|
||||||
|
actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
|
||||||
|
LocalDirectoryNode directoryNode = new LocalDirectoryNode(directory);
|
||||||
|
actionsList.add(null); // creates a menu separator
|
||||||
|
actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
|
||||||
|
actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
|
||||||
|
actionsList.add(null); // creates a menu separator
|
||||||
|
actionsList.add(ExtractAction.getInstance());
|
||||||
|
actionsList.add(null); // creates a menu separator
|
||||||
|
actionsList.add(AddContentTagAction.getInstance());
|
||||||
|
if (isArtifactSource) {
|
||||||
|
actionsList.add(AddBlackboardArtifactTagAction.getInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
final Collection<AbstractFile> selectedFilesList =
|
||||||
|
new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
|
||||||
|
if(selectedFilesList.size() == 1) {
|
||||||
|
actionsList.add(DeleteFileContentTagAction.getInstance());
|
||||||
|
}
|
||||||
|
if(isArtifactSource) {
|
||||||
|
final Collection<BlackboardArtifact> selectedArtifactsList =
|
||||||
|
new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
|
||||||
|
if(selectedArtifactsList.size() == 1) {
|
||||||
|
actionsList.add(DeleteFileBlackboardArtifactTagAction.getInstance());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
actionsList.addAll(ContextMenuExtensionPoint.getActions());
|
||||||
|
return actionsList;
|
||||||
|
}
|
||||||
|
|
||||||
public static List<Action> getActions(LocalFile file, boolean isArtifactSource) {
|
public static List<Action> getActions(LocalFile file, boolean isArtifactSource) {
|
||||||
List<Action> actionsList = new ArrayList<>();
|
List<Action> actionsList = new ArrayList<>();
|
||||||
|
@ -41,6 +41,8 @@ public interface DisplayableItemNodeVisitor<T> {
|
|||||||
T visit(LocalFileNode dfn);
|
T visit(LocalFileNode dfn);
|
||||||
|
|
||||||
T visit(VirtualDirectoryNode ldn);
|
T visit(VirtualDirectoryNode ldn);
|
||||||
|
|
||||||
|
T visit(LocalDirectoryNode ldn);
|
||||||
|
|
||||||
T visit(DirectoryNode dn);
|
T visit(DirectoryNode dn);
|
||||||
|
|
||||||
@ -370,6 +372,11 @@ public interface DisplayableItemNodeVisitor<T> {
|
|||||||
return defaultVisit(ldn);
|
return defaultVisit(ldn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T visit(LocalDirectoryNode ldn) {
|
||||||
|
return defaultVisit(ldn);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public T visit(Tags.RootNode node) {
|
public T visit(Tags.RootNode node) {
|
||||||
return defaultVisit(node);
|
return defaultVisit(node);
|
||||||
|
215
Core/src/org/sleuthkit/autopsy/datamodel/LocalDirectoryNode.java
Normal file
215
Core/src/org/sleuthkit/autopsy/datamodel/LocalDirectoryNode.java
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011-2017 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.datamodel;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import javax.swing.Action;
|
||||||
|
import org.openide.nodes.Sheet;
|
||||||
|
import org.openide.util.NbBundle;
|
||||||
|
import org.openide.util.NbBundle.Messages;
|
||||||
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.ContextMenuExtensionPoint;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.directorytree.ExtractAction;
|
||||||
|
import org.sleuthkit.autopsy.directorytree.FileSearchAction;
|
||||||
|
import org.sleuthkit.autopsy.directorytree.NewWindowViewAction;
|
||||||
|
import org.sleuthkit.autopsy.ingest.runIngestModuleWizard.RunIngestModulesAction;
|
||||||
|
import org.sleuthkit.datamodel.Content;
|
||||||
|
import org.sleuthkit.datamodel.SleuthkitCase;
|
||||||
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
import org.sleuthkit.datamodel.TskData;
|
||||||
|
import org.sleuthkit.datamodel.LocalDirectory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Node for a local directory
|
||||||
|
*/
|
||||||
|
public class LocalDirectoryNode extends AbstractAbstractFileNode<LocalDirectory> {
|
||||||
|
|
||||||
|
private static final Logger logger = Logger.getLogger(VirtualDirectoryNode.class.getName());
|
||||||
|
|
||||||
|
public static String nameForLocalDir(LocalDirectory ld) {
|
||||||
|
return ld.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDirectoryNode(LocalDirectory ld) {
|
||||||
|
super(ld);
|
||||||
|
|
||||||
|
this.setDisplayName(nameForLocalDir(ld));
|
||||||
|
this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/credit-card.png"); //NON-NLS
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Right click action for this node
|
||||||
|
*
|
||||||
|
* @param popup
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@NbBundle.Messages({"LocalDirectoryNode.action.runIngestMods.text=Run Ingest Modules",
|
||||||
|
"LocalDirectoryNode.getActions.viewInNewWin.text=View in New Window"
|
||||||
|
})
|
||||||
|
public Action[] getActions(boolean popup) {
|
||||||
|
List<Action> actions = new ArrayList<>();
|
||||||
|
for (Action a : super.getActions(true)) {
|
||||||
|
actions.add(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
actions.add(new NewWindowViewAction(
|
||||||
|
Bundle.LocalDirectoryNode_action_runIngestMods_text(), this));
|
||||||
|
actions.add(null); // creates a menu separator
|
||||||
|
actions.add(ExtractAction.getInstance());
|
||||||
|
actions.add(null); // creates a menu separator
|
||||||
|
actions.add(new FileSearchAction(
|
||||||
|
Bundle.ImageNode_getActions_openFileSearchByAttr_text()));
|
||||||
|
actions.add(new RunIngestModulesAction(Collections.<Content>singletonList(content)));
|
||||||
|
actions.addAll(ContextMenuExtensionPoint.getActions());
|
||||||
|
return actions.toArray(new Action[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Messages({"LocalDirectoryNode.createSheet.size.name=Size (Bytes)",
|
||||||
|
"LocalDirectoryNode.createSheet.size.displayName=Size (Bytes)",
|
||||||
|
"LocalDirectoryNode.createSheet.size.desc=Size of the data source in bytes.",
|
||||||
|
"LocalDirectoryNode.createSheet.type.name=Type",
|
||||||
|
"LocalDirectoryNode.createSheet.type.displayName=Type",
|
||||||
|
"LocalDirectoryNode.createSheet.type.desc=Type of the image.",
|
||||||
|
"LocalDirectoryNode.createSheet.type.text=Logical File Set",
|
||||||
|
"LocalDirectoryNode.createSheet.timezone.name=Timezone",
|
||||||
|
"LocalDirectoryNode.createSheet.timezone.displayName=Timezone",
|
||||||
|
"LocalDirectoryNode.createSheet.timezone.desc=Timezone of the image",
|
||||||
|
"LocalDirectoryNode.createSheet.deviceId.name=Device ID",
|
||||||
|
"LocalDirectoryNode.createSheet.deviceId.displayName=Device ID",
|
||||||
|
"LocalDirectoryNode.createSheet.deviceId.desc=Device ID of the image",
|
||||||
|
"LocalDirectoryNode.createSheet.name.name=Name",
|
||||||
|
"LocalDirectoryNode.createSheet.name.displayName=Name",
|
||||||
|
"LocalDirectoryNode.createSheet.name.desc=no description",
|
||||||
|
"LocalDirectoryNode.createSheet.noDesc=no description"})
|
||||||
|
protected Sheet createSheet() {
|
||||||
|
Sheet s = super.createSheet();
|
||||||
|
Sheet.Set ss = s.get(Sheet.PROPERTIES);
|
||||||
|
if (ss == null) {
|
||||||
|
ss = Sheet.createPropertiesSet();
|
||||||
|
s.put(ss);
|
||||||
|
}
|
||||||
|
|
||||||
|
ss.put(new NodeProperty<>(Bundle.LocalDirectoryNode_createSheet_name_name(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_name_displayName(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_name_desc(),
|
||||||
|
getName()));
|
||||||
|
|
||||||
|
if (!this.content.isDataSource()) {
|
||||||
|
Map<String, Object> map = new LinkedHashMap<>();
|
||||||
|
fillPropertyMap(map, content);
|
||||||
|
|
||||||
|
final String NO_DESCR = Bundle.LocalDirectoryNode_createSheet_noDesc();
|
||||||
|
for (Map.Entry<String, Object> entry : map.entrySet()) {
|
||||||
|
ss.put(new NodeProperty<>(entry.getKey(), entry.getKey(), NO_DESCR, entry.getValue()));
|
||||||
|
}
|
||||||
|
addTagProperty(ss);
|
||||||
|
} else {
|
||||||
|
ss.put(new NodeProperty<>(Bundle.LocalDirectoryNode_createSheet_type_name(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_type_displayName(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_type_desc(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_type_text()));
|
||||||
|
ss.put(new NodeProperty<>(Bundle.LocalDirectoryNode_createSheet_size_name(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_size_displayName(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_size_desc(),
|
||||||
|
this.content.getSize()));
|
||||||
|
try (SleuthkitCase.CaseDbQuery query = Case.getCurrentCase().getSleuthkitCase().executeQuery("SELECT time_zone FROM data_source_info WHERE obj_id = " + this.content.getId())) {
|
||||||
|
ResultSet timeZoneSet = query.getResultSet();
|
||||||
|
if (timeZoneSet.next()) {
|
||||||
|
ss.put(new NodeProperty<>(Bundle.LocalDirectoryNode_createSheet_timezone_name(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_timezone_displayName(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_timezone_desc(),
|
||||||
|
timeZoneSet.getString("time_zone")));
|
||||||
|
}
|
||||||
|
} catch (SQLException | TskCoreException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Failed to get time zone for the following image: " + this.content.getId(), ex);
|
||||||
|
}
|
||||||
|
try (SleuthkitCase.CaseDbQuery query = Case.getCurrentCase().getSleuthkitCase().executeQuery("SELECT device_id FROM data_source_info WHERE obj_id = " + this.content.getId());) {
|
||||||
|
ResultSet deviceIdSet = query.getResultSet();
|
||||||
|
if (deviceIdSet.next()) {
|
||||||
|
ss.put(new NodeProperty<>(Bundle.LocalDirectoryNode_createSheet_deviceId_name(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_deviceId_displayName(),
|
||||||
|
Bundle.LocalDirectoryNode_createSheet_deviceId_desc(),
|
||||||
|
deviceIdSet.getString("device_id")));
|
||||||
|
}
|
||||||
|
} catch (SQLException | TskCoreException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Failed to get device id for the following image: " + this.content.getId(), ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T accept(ContentNodeVisitor<T> v) {
|
||||||
|
return v.visit(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T accept(DisplayableItemNodeVisitor<T> v) {
|
||||||
|
return v.visit(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLeafTypeNode() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert meta flag long to user-readable string / label
|
||||||
|
*
|
||||||
|
* @param metaFlag to convert
|
||||||
|
*
|
||||||
|
* @return string formatted meta flag representation
|
||||||
|
*/
|
||||||
|
public static String metaFlagToString(short metaFlag) {
|
||||||
|
|
||||||
|
String result = "";
|
||||||
|
|
||||||
|
short allocFlag = TskData.TSK_FS_META_FLAG_ENUM.ALLOC.getValue();
|
||||||
|
short unallocFlag = TskData.TSK_FS_META_FLAG_ENUM.UNALLOC.getValue();
|
||||||
|
|
||||||
|
if ((metaFlag & allocFlag) == allocFlag) {
|
||||||
|
result = TskData.TSK_FS_META_FLAG_ENUM.ALLOC.toString();
|
||||||
|
}
|
||||||
|
if ((metaFlag & unallocFlag) == unallocFlag) {
|
||||||
|
result = TskData.TSK_FS_META_FLAG_ENUM.UNALLOC.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getItemType() {
|
||||||
|
// use content.isDataSource if different column settings are desired
|
||||||
|
return DisplayableItemNode.FILE_PARENT_NODE_KEY;
|
||||||
|
}
|
||||||
|
}
|
@ -53,6 +53,7 @@ import org.sleuthkit.autopsy.datamodel.FileNode;
|
|||||||
import org.sleuthkit.autopsy.datamodel.FileTypes.FileTypesNode;
|
import org.sleuthkit.autopsy.datamodel.FileTypes.FileTypesNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.LayoutFileNode;
|
import org.sleuthkit.autopsy.datamodel.LayoutFileNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.LocalFileNode;
|
import org.sleuthkit.autopsy.datamodel.LocalFileNode;
|
||||||
|
import org.sleuthkit.autopsy.datamodel.LocalDirectoryNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.NodeSelectionInfo;
|
import org.sleuthkit.autopsy.datamodel.NodeSelectionInfo;
|
||||||
import org.sleuthkit.autopsy.datamodel.Reports;
|
import org.sleuthkit.autopsy.datamodel.Reports;
|
||||||
import org.sleuthkit.autopsy.datamodel.SlackFileNode;
|
import org.sleuthkit.autopsy.datamodel.SlackFileNode;
|
||||||
@ -66,6 +67,7 @@ import org.sleuthkit.datamodel.Directory;
|
|||||||
import org.sleuthkit.datamodel.File;
|
import org.sleuthkit.datamodel.File;
|
||||||
import org.sleuthkit.datamodel.LayoutFile;
|
import org.sleuthkit.datamodel.LayoutFile;
|
||||||
import org.sleuthkit.datamodel.LocalFile;
|
import org.sleuthkit.datamodel.LocalFile;
|
||||||
|
import org.sleuthkit.datamodel.LocalDirectory;
|
||||||
import org.sleuthkit.datamodel.SlackFile;
|
import org.sleuthkit.datamodel.SlackFile;
|
||||||
import org.sleuthkit.datamodel.TskData;
|
import org.sleuthkit.datamodel.TskData;
|
||||||
import org.sleuthkit.datamodel.TskException;
|
import org.sleuthkit.datamodel.TskException;
|
||||||
@ -350,6 +352,8 @@ public class DataResultFilterNode extends FilterNode {
|
|||||||
n = new DirectoryNode((Directory) c);
|
n = new DirectoryNode((Directory) c);
|
||||||
} else if ((c = ban.getLookup().lookup(VirtualDirectory.class)) != null) {
|
} else if ((c = ban.getLookup().lookup(VirtualDirectory.class)) != null) {
|
||||||
n = new VirtualDirectoryNode((VirtualDirectory) c);
|
n = new VirtualDirectoryNode((VirtualDirectory) c);
|
||||||
|
} else if ((c = ban.getLookup().lookup(LocalDirectory.class)) != null) {
|
||||||
|
n = new LocalDirectoryNode((LocalDirectory) c);
|
||||||
} else if ((c = ban.getLookup().lookup(LayoutFile.class)) != null) {
|
} else if ((c = ban.getLookup().lookup(LayoutFile.class)) != null) {
|
||||||
n = new LayoutFileNode((LayoutFile) c);
|
n = new LayoutFileNode((LayoutFile) c);
|
||||||
} else if ((c = ban.getLookup().lookup(LocalFile.class)) != null
|
} else if ((c = ban.getLookup().lookup(LocalFile.class)) != null
|
||||||
|
@ -32,6 +32,7 @@ import org.sleuthkit.autopsy.datamodel.FileNode;
|
|||||||
import org.sleuthkit.autopsy.datamodel.FileTypes.FileTypesNode;
|
import org.sleuthkit.autopsy.datamodel.FileTypes.FileTypesNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.LayoutFileNode;
|
import org.sleuthkit.autopsy.datamodel.LayoutFileNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.LocalFileNode;
|
import org.sleuthkit.autopsy.datamodel.LocalFileNode;
|
||||||
|
import org.sleuthkit.autopsy.datamodel.LocalDirectoryNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.SlackFileNode;
|
import org.sleuthkit.autopsy.datamodel.SlackFileNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.VirtualDirectoryNode;
|
import org.sleuthkit.autopsy.datamodel.VirtualDirectoryNode;
|
||||||
import org.sleuthkit.autopsy.datamodel.VolumeNode;
|
import org.sleuthkit.autopsy.datamodel.VolumeNode;
|
||||||
@ -244,6 +245,11 @@ class DirectoryTreeFilterChildren extends FilterNode.Children {
|
|||||||
//return ! vdn.hasContentChildren();
|
//return ! vdn.hasContentChildren();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean visit(LocalDirectoryNode ldn) {
|
||||||
|
return visitDeep(ldn);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean visit(FileTypesNode ft) {
|
public Boolean visit(FileTypesNode ft) {
|
||||||
return defaultVisit(ft);
|
return defaultVisit(ft);
|
||||||
@ -292,6 +298,11 @@ class DirectoryTreeFilterChildren extends FilterNode.Children {
|
|||||||
//return vdn.hasContentChildren();
|
//return vdn.hasContentChildren();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean visit(LocalDirectoryNode ldn) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean visit(FileTypesNode fileTypes) {
|
public Boolean visit(FileTypesNode fileTypes) {
|
||||||
return defaultVisit(fileTypes);
|
return defaultVisit(fileTypes);
|
||||||
|
@ -28,6 +28,7 @@ import org.sleuthkit.datamodel.Directory;
|
|||||||
import org.sleuthkit.datamodel.AbstractFile;
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.Image;
|
import org.sleuthkit.datamodel.Image;
|
||||||
import org.sleuthkit.datamodel.VirtualDirectory;
|
import org.sleuthkit.datamodel.VirtualDirectory;
|
||||||
|
import org.sleuthkit.datamodel.LocalDirectory;
|
||||||
import org.sleuthkit.datamodel.TskException;
|
import org.sleuthkit.datamodel.TskException;
|
||||||
import org.sleuthkit.datamodel.Volume;
|
import org.sleuthkit.datamodel.Volume;
|
||||||
import org.sleuthkit.datamodel.VolumeSystem;
|
import org.sleuthkit.datamodel.VolumeSystem;
|
||||||
@ -43,6 +44,11 @@ abstract class GetFilesContentVisitor implements ContentVisitor<Collection<Abstr
|
|||||||
public Collection<AbstractFile> visit(VirtualDirectory ld) {
|
public Collection<AbstractFile> visit(VirtualDirectory ld) {
|
||||||
return getAllFromChildren(ld);
|
return getAllFromChildren(ld);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<AbstractFile> visit(LocalDirectory ld) {
|
||||||
|
return getAllFromChildren(ld);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<AbstractFile> visit(Directory drctr) {
|
public Collection<AbstractFile> visit(Directory drctr) {
|
||||||
|
@ -27,6 +27,7 @@ import org.sleuthkit.datamodel.File;
|
|||||||
import org.sleuthkit.datamodel.FileSystem;
|
import org.sleuthkit.datamodel.FileSystem;
|
||||||
import org.sleuthkit.datamodel.LayoutFile;
|
import org.sleuthkit.datamodel.LayoutFile;
|
||||||
import org.sleuthkit.datamodel.LocalFile;
|
import org.sleuthkit.datamodel.LocalFile;
|
||||||
|
import org.sleuthkit.datamodel.LocalDirectory;
|
||||||
import org.sleuthkit.datamodel.SlackFile;
|
import org.sleuthkit.datamodel.SlackFile;
|
||||||
import org.sleuthkit.datamodel.VirtualDirectory;
|
import org.sleuthkit.datamodel.VirtualDirectory;
|
||||||
|
|
||||||
@ -44,6 +45,15 @@ final class GetRootDirectoryVisitor extends GetFilesContentVisitor {
|
|||||||
ret.add(ld);
|
ret.add(ld);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<AbstractFile> visit(LocalDirectory ld) {
|
||||||
|
//case when we hit a local directoryr, not under a real FS
|
||||||
|
//or when root virt dir is scheduled
|
||||||
|
Collection<AbstractFile> ret = new ArrayList<>();
|
||||||
|
ret.add(ld);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<AbstractFile> visit(LayoutFile lf) {
|
public Collection<AbstractFile> visit(LayoutFile lf) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user