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();
81 name = name +
" \u200E(\u200E" + numChildren +
")\u200E";
82 }
catch (TskCoreException ex) {
83 logger.log(Level.SEVERE,
"Error getting children count to display for file: " + file, ex);
100 public Action[] getActions(
boolean popup) {
101 List<Action> actions =
new ArrayList<>();
103 final Content content = this.getLookup().lookup(Content.class);
104 if (content != null) {
105 actions.addAll(DirectoryTreeFilterNode.getDetailActions(content));
108 Directory dir = this.getLookup().lookup(Directory.class);
110 actions.add(ExtractAction.getInstance());
111 actions.add(
new AbstractAction(
112 NbBundle.getMessage(
this.getClass(),
"DirectoryTreeFilterNode.action.runIngestMods.text")) {
114 public void actionPerformed(ActionEvent e) {
115 final RunIngestModulesDialog ingestDialog =
new RunIngestModulesDialog(dir);
116 ingestDialog.display();
121 final Image img = this.getLookup().lookup(Image.class);
123 VirtualDirectory virtualDirectory = this.getLookup().lookup(VirtualDirectory.class);
125 boolean isRootVD =
false;
126 if (virtualDirectory != null) {
128 if (virtualDirectory.getParent() == null) {
131 }
catch (TskCoreException ex) {
132 logger.log(Level.WARNING,
"Error determining the parent of the virtual directory", ex);
138 if (img != null || isRootVD) {
139 actions.add(
new FileSearchAction(
140 NbBundle.getMessage(
this.getClass(),
"DirectoryTreeFilterNode.action.openFileSrcByAttr.text")));
141 actions.add(
new AbstractAction(
142 NbBundle.getMessage(
this.getClass(),
"DirectoryTreeFilterNode.action.runIngestMods.text")) {
144 public void actionPerformed(ActionEvent e) {
145 final RunIngestModulesDialog ingestDialog =
new RunIngestModulesDialog(Collections.<Content>singletonList(content));
146 ingestDialog.display();
153 final Node orig = getOriginal();
155 if (orig instanceof DisplayableItemNode) {
156 actions.addAll(getDeleteActions((DisplayableItemNode) orig));
159 actions.add(collapseAll);
160 return actions.toArray(
new Action[actions.size()]);
163 private static List<Action> getDeleteActions(DisplayableItemNode original) {
164 List<Action> actions =
new ArrayList<>();
169 private static List<Action> getDetailActions(Content c) {
170 List<Action> actions =
new ArrayList<>();
172 actions.addAll(ExplorerNodeActionVisitor.getActions(c));