From d683f2ff55e2dd899d8d8da326201a5110aca6b2 Mon Sep 17 00:00:00 2001 From: adam-m Date: Thu, 9 May 2013 16:35:43 -0400 Subject: [PATCH] add missing actions for local directory nodes --- .../datamodel/VirtualDirectoryNode.java | 25 +++++++++++++ .../directorytree/DataResultFilterNode.java | 25 ++++++++++++- .../ExplorerNodeActionVisitor.java | 37 ++++++++++++------- .../autopsy/directorytree/ExtractAction.java | 5 +++ 4 files changed, 77 insertions(+), 15 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java index b9badf85be..70322a6e35 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/VirtualDirectoryNode.java @@ -18,12 +18,19 @@ */ package org.sleuthkit.autopsy.datamodel; +import java.util.ArrayList; 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.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.LayoutFileNode.LayoutContentPropertyType; +import org.sleuthkit.autopsy.directorytree.ExtractAction; +import org.sleuthkit.autopsy.directorytree.NewWindowViewAction; +import org.sleuthkit.autopsy.directorytree.TagAction; +import org.sleuthkit.autopsy.directorytree.ViewContextAction; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.VirtualDirectory; import org.sleuthkit.datamodel.TskData; @@ -62,6 +69,24 @@ public class VirtualDirectoryNode extends AbstractAbstractFileNode actions = new ArrayList(); + + actions.add(new NewWindowViewAction("View in New Window", this)); + actions.add(null); // creates a menu separator + actions.add(new ExtractAction("Extract Directory", this)); + actions.add(null); // creates a menu separator + actions.add(new TagAction(this)); + return actions.toArray(new Action[0]); + } + @Override protected Sheet createSheet() { Sheet s = super.createSheet(); diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java b/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java index dd13949b47..5863726c0b 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DataResultFilterNode.java @@ -21,7 +21,6 @@ package org.sleuthkit.autopsy.directorytree; import java.awt.event.ActionEvent; import java.beans.PropertyVetoException; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.sleuthkit.autopsy.datamodel.VolumeNode; import org.sleuthkit.autopsy.datamodel.DirectoryNode; @@ -60,12 +59,15 @@ import org.sleuthkit.autopsy.datamodel.RecentFilesNode; import org.sleuthkit.autopsy.datamodel.SearchFiltersNode; import org.sleuthkit.autopsy.datamodel.Tags.TagNodeRoot; import org.sleuthkit.autopsy.datamodel.Tags.TagsNodeRoot; +import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.Content; +import org.sleuthkit.datamodel.DerivedFile; import org.sleuthkit.datamodel.Directory; import org.sleuthkit.datamodel.File; import org.sleuthkit.datamodel.LayoutFile; +import org.sleuthkit.datamodel.LocalFile; import org.sleuthkit.datamodel.TskException; /** @@ -156,6 +158,10 @@ public class DataResultFilterNode extends FilterNode { @Override public List visit(BlackboardArtifactNode ban) { + //set up actions for artifact node based on its Content object + //TODO all actions need to be consolidated in single place! + //they should be set in individual Node subclass and using a utility to get Actions per Content sub-type + List actions = new ArrayList(); //merge predefined specific node actions if bban subclasses have their own @@ -177,6 +183,7 @@ public class DataResultFilterNode extends FilterNode { } File f = ban.getLookup().lookup(File.class); LayoutFile lf = null; + AbstractFile locF = null; Directory d = null; if (f != null) { actions.add(null); // creates a menu separator @@ -223,6 +230,22 @@ public class DataResultFilterNode extends FilterNode { actions.add(new TagAction(ba)); } } + else if ((locF = ban.getLookup().lookup(LocalFile.class)) != null + || (locF = ban.getLookup().lookup(DerivedFile.class)) != null) { + actions.add(null); // creates a menu separator + actions.add(new NewWindowViewAction("View in New Window", new LocalFileNode(locF))); + actions.add(new ExternalViewerAction("Open in External Viewer", new LocalFileNode(locF))); + actions.add(null); // creates a menu separator + actions.add(new ExtractAction("Extract File", new LocalFileNode(lf))); + + //add tag if itself is not a tag + if (artifactTypeID != BlackboardArtifact.ARTIFACT_TYPE.TSK_TAG_FILE.getTypeID() + && artifactTypeID != BlackboardArtifact.ARTIFACT_TYPE.TSK_TAG_ARTIFACT.getTypeID()) { + actions.add(null); // creates a menu separator + actions.add(new TagAction(lf)); + actions.add(new TagAction(ba)); + } + } return actions; } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/ExplorerNodeActionVisitor.java b/Core/src/org/sleuthkit/autopsy/directorytree/ExplorerNodeActionVisitor.java index c83243a4d3..28479e83c3 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/ExplorerNodeActionVisitor.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/ExplorerNodeActionVisitor.java @@ -43,6 +43,7 @@ import org.sleuthkit.datamodel.Directory; import org.sleuthkit.datamodel.FileSystem; import org.sleuthkit.datamodel.Image; import org.sleuthkit.datamodel.LocalFile; +import org.sleuthkit.datamodel.VirtualDirectory; import org.sleuthkit.datamodel.Volume; public class ExplorerNodeActionVisitor extends ContentVisitor.Default> { @@ -103,7 +104,15 @@ public class ExplorerNodeActionVisitor extends ContentVisitor.Default visit(final VirtualDirectory d) { + List actions = new ArrayList(); + actions.add(new TagAction(d)); + actions.add(new ExtractAction("Extract Directory", d)); + return actions; + } + @Override public List visit(final DerivedFile d) { List actions = new ArrayList(); @@ -111,7 +120,7 @@ public class ExplorerNodeActionVisitor extends ContentVisitor.Default visit(final LocalFile d) { List actions = new ArrayList(); @@ -119,8 +128,8 @@ public class ExplorerNodeActionVisitor extends ContentVisitor.Default visit(final org.sleuthkit.datamodel.File d) { List actions = new ArrayList(); actions.add(new ExtractAction("Extract File", d)); @@ -326,16 +335,16 @@ public class ExplorerNodeActionVisitor extends ContentVisitor.Default