19 package org.sleuthkit.autopsy.directorytree;
21 import java.awt.event.ActionEvent;
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.List;
25 import java.util.logging.Level;
26 import javax.swing.AbstractAction;
27 import javax.swing.Action;
28 import org.openide.nodes.FilterNode;
29 import org.openide.nodes.Node;
30 import org.openide.util.NbBundle;
31 import org.openide.util.lookup.Lookups;
32 import org.openide.util.lookup.ProxyLookup;
49 class DirectoryTreeFilterNode
extends FilterNode {
51 private static final Action collapseAll =
new CollapseAction(
52 NbBundle.getMessage(DirectoryTreeFilterNode.class,
"DirectoryTreeFilterNode.action.collapseAll.text"));
54 private static final Logger logger = Logger.getLogger(DirectoryTreeFilterNode.class.getName());
59 DirectoryTreeFilterNode(Node arg,
boolean createChildren) {
60 super(arg, DirectoryTreeFilterChildren.createInstance(arg, createChildren),
61 new ProxyLookup(Lookups.singleton(
new OriginalNode(arg)),
66 public String getDisplayName() {
67 final Node orig = getOriginal();
69 String name = orig.getDisplayName();
72 if (orig instanceof AbstractContentNode) {
74 AbstractFile file = getLookup().lookup(AbstractFile.class);
77 final int numChildren = file.getChildrenCount();
78 name = name +
" (" + numChildren +
")";
79 }
catch (TskCoreException ex) {
80 logger.log(Level.SEVERE,
"Error getting children count to display for file: " + file, ex);
97 public Action[] getActions(
boolean popup) {
98 List<Action> actions =
new ArrayList<>();
100 final Content content = this.getLookup().lookup(Content.class);
101 if (content != null) {
102 actions.addAll(DirectoryTreeFilterNode.getDetailActions(content));
105 Directory dir = this.getLookup().lookup(Directory.class);
107 actions.add(ExtractAction.getInstance());
108 actions.add(
new AbstractAction(
109 NbBundle.getMessage(
this.getClass(),
"DirectoryTreeFilterNode.action.runIngestMods.text")) {
111 public void actionPerformed(ActionEvent e) {
112 final RunIngestModulesDialog ingestDialog =
new RunIngestModulesDialog(dir);
113 ingestDialog.display();
118 final Image img = this.getLookup().lookup(Image.class);
120 VirtualDirectory virtualDirectory = this.getLookup().lookup(VirtualDirectory.class);
122 boolean isRootVD =
false;
123 if (virtualDirectory != null) {
125 if (virtualDirectory.getParent() == null) {
128 }
catch (TskCoreException ex) {
129 logger.log(Level.WARNING,
"Error determining the parent of the virtual directory", ex);
135 if (img != null || isRootVD) {
136 actions.add(
new FileSearchAction(
137 NbBundle.getMessage(
this.getClass(),
"DirectoryTreeFilterNode.action.openFileSrcByAttr.text")));
138 actions.add(
new AbstractAction(
139 NbBundle.getMessage(
this.getClass(),
"DirectoryTreeFilterNode.action.runIngestMods.text")) {
141 public void actionPerformed(ActionEvent e) {
142 final RunIngestModulesDialog ingestDialog =
new RunIngestModulesDialog(Collections.<Content>singletonList(content));
143 ingestDialog.display();
150 final Node orig = getOriginal();
152 if (orig instanceof DisplayableItemNode) {
153 actions.addAll(getDeleteActions((DisplayableItemNode) orig));
156 actions.add(collapseAll);
157 return actions.toArray(
new Action[actions.size()]);
160 private static List<Action> getDeleteActions(DisplayableItemNode original) {
161 List<Action> actions =
new ArrayList<>();
166 private static List<Action> getDetailActions(Content c) {
167 List<Action> actions =
new ArrayList<>();
169 actions.addAll(ExplorerNodeActionVisitor.getActions(c));