19 package org.sleuthkit.autopsy.directorytree;
21 import java.awt.EventQueue;
22 import java.awt.event.ActionEvent;
23 import java.beans.PropertyVetoException;
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.Collections;
27 import java.util.List;
28 import java.util.Objects;
29 import java.util.logging.Level;
30 import java.util.stream.Collectors;
31 import java.util.stream.Stream;
33 import javax.swing.AbstractAction;
34 import org.apache.commons.lang3.StringUtils;
35 import org.openide.nodes.AbstractNode;
36 import org.openide.explorer.ExplorerManager;
37 import org.openide.explorer.view.TreeView;
38 import org.openide.nodes.Children;
39 import org.openide.nodes.Node;
40 import org.openide.util.NbBundle.Messages;
93 this.content = artifactNode.getLookup().lookup(Content.class);
94 if (this.content != null && this.content instanceof AbstractFile) {
95 AbstractFile file = (AbstractFile) content;
99 this.setEnabled(
false);
116 this.content = fileSystemContentNode.getLookup().lookup(Content.class);
131 this.content = abstractAbstractFileNode.getLookup().lookup(Content.class);
164 "ViewContextAction.errorMessage.cannotFindDirectory=Failed to locate directory.",
165 "ViewContextAction.errorMessage.cannotSelectDirectory=Failed to select directory in tree.",
166 "ViewContextAction.errorMessage.cannotFindNode=Failed to locate data source node in tree.",
167 "ViewContextAction.errorMessage.unsupportedParent=Unable to navigate to content not supported in this release."
170 EventQueue.invokeLater(() -> {
174 if ((parentContent != null) && (parentContent instanceof UnsupportedContent)) {
176 logger.log(Level.WARNING, String.format(
"Could not navigate to unsupported content with id: %d", parentContent.getId()));
184 Node parentTreeViewNode = null;
185 if (parentContent != null) {
194 if (parentTreeViewNode == null) {
196 logger.log(Level.SEVERE,
"Failed to locate data source node in tree.");
200 setNodeSelection(this.content, parentTreeViewNode, treeViewTopComponent, treeViewExplorerMgr);
220 return (content instanceof DataSource)
222 : content.getParent();
223 }
catch (TskCoreException ex) {
225 logger.log(Level.SEVERE, String.format(
"Could not get parent of Content object: %s", content), ex);
244 Children rootChildren = treeViewExplorerMgr.getRootContext().getChildren();
246 if (rootDsNode != null) {
248 DataSource dataSource = dataSourceLevelNode.getLookup().lookup(DataSource.class);
249 if (dataSource != null) {
252 if (potentialParentTreeViewNode != null) {
253 return potentialParentTreeViewNode;
276 SleuthkitCase skCase;
281 long contentDSObjid = parentContent.getDataSource().getId();
282 DataSource datasource = skCase.getDataSource(contentDSObjid);
283 dsname = datasource.getName();
284 Children rootChildren = treeViewExplorerMgr.getRootContext().getChildren();
292 List<Node> dataSourceLevelNodes = Stream.of(rootChildren.getNodes(
true))
294 .collect(Collectors.toList());
296 for (Node treeNode : dataSourceLevelNodes) {
298 if (!(treeNode.getName().equals(dsname))) {
307 if (parentTreeViewNode != null) {
309 return parentTreeViewNode;
314 logger.log(Level.SEVERE,
"Failed to locate data source node in tree.", ex);
337 if (content instanceof BlackboardArtifact) {
338 BlackboardArtifact artifact = ((BlackboardArtifact) content);
339 long associatedId = artifact.getObjectID();
341 Content associatedFileContent = artifact.getSleuthkitCase().getContentById(associatedId);
343 }
catch (TskCoreException ex) {
344 logger.log(Level.SEVERE,
"Could not find associated content from artifact with id %d", artifact.getId());
348 TreeView treeView = treeViewTopComponent.getTree();
349 treeView.expandNode(parentTreeViewNode);
350 if (treeViewTopComponent.
getSelectedNode().equals(parentTreeViewNode)) {
357 treeViewTopComponent.respondSelection(treeViewExplorerMgr.getSelectedNodes(),
new Node[]{parentTreeViewNode});
360 treeViewExplorerMgr.setExploredContextAndSelection(parentTreeViewNode,
new Node[]{parentTreeViewNode});
361 }
catch (PropertyVetoException ex) {
363 logger.log(Level.SEVERE,
"Failed to select the parent node in the tree view", ex);
378 return Collections.emptyList();
379 }
else if (node.getLookup().lookup(Host.class) != null
380 || node.getLookup().lookup(Person.class) != null
383 Children children = node.getChildren();
384 Node[] childNodes = children == null ? null : children.getNodes(
true);
385 if (childNodes == null) {
386 return Collections.emptyList();
389 return Stream.of(node.getChildren().getNodes(
true))
391 .collect(Collectors.toList());
393 return Arrays.asList(node);
413 List<Content> contentBranch = parentContent.accept(ancestorVisitor);
414 Collections.reverse(contentBranch);
427 Node dummyRootNode =
new DirectoryTreeFilterNode(
new AbstractNode(
new RootContentChildren(contentBranch)),
true);
428 Children ancestorChildren = dummyRootNode.getChildren();
431 if (ancestorChildren.getNodesCount() == 1 && StringUtils.equals(ancestorChildren.getNodeAt(0).getName(), node.getName())) {
441 Children treeNodeChildren = node.getChildren();
442 Node parentTreeViewNode = null;
443 for (
int i = 0; i < ancestorChildren.getNodesCount(); i++) {
444 Node ancestorNode = ancestorChildren.getNodeAt(i);
445 Node[] treeNodeChilds = treeNodeChildren.getNodes(
true);
446 for (
int j = 0; j < treeNodeChilds.length; j++) {
447 Node treeNode = treeNodeChilds[j];
448 if (ancestorNode.getName().equals(treeNode.getName())) {
449 parentTreeViewNode = treeNode;
450 treeNodeChildren = treeNode.getChildren();
455 return parentTreeViewNode;
465 List<Content> lineage =
new ArrayList<>();
469 lineage.add(content);
470 Content parent = null;
472 parent = content.getParent();
473 }
catch (TskCoreException ex) {
474 logger.log(Level.SEVERE, String.format(
"Could not get parent of Content object: %s", content), ex);
476 return parent == null ? lineage : parent.accept(
this);
480 public List<Content>
visit(VolumeSystem volumeSystem) {
490 public List<Content>
visit(FileSystem fileSystem) {
500 Content parent = null;
502 parent = content.getParent();
503 }
catch (TskCoreException ex) {
504 logger.log(Level.SEVERE, String.format(
"Could not get parent of Content object: %s", content), ex);
506 return parent == null ? lineage : parent.accept(
this);
List< Node > getDataSourceLevelNodes(Node node)
static String getNameIdentifier()
void setDirectoryListingActive()
Node getParentNodeGroupedByPersonHost(ExplorerManager treeViewExplorerMgr, Content parentContent)
static boolean hideSlackFilesInDataSourcesTree()
ViewContextAction(String displayName, Content content)
ViewContextAction(String displayName, BlackboardArtifactNode artifactNode)
ViewContextAction(String displayName, AbstractFsContentNode<?extends AbstractFile > fileSystemContentNode)
Node findParentNodeInTree(Content parentContent, Node node)
static final long serialVersionUID
static String getUnknownPersonId()
List< Content > visit(VolumeSystem volumeSystem)
ExplorerManager getExplorerManager()
SleuthkitCase getSleuthkitCase()
ViewContextAction(String displayName, AbstractAbstractFileNode<?extends AbstractFile > abstractAbstractFileNode)
static Boolean getGroupItemsInTreeByDataSource()
Content getParentContent(Content content)
void setNodeSelection(Content content, Node parentTreeViewNode, DirectoryTreeTopComponent treeViewTopComponent, ExplorerManager treeViewExplorerMgr)
void actionPerformed(ActionEvent event)
List< Content > defaultVisit(Content content)
List< Content > visit(FileSystem fileSystem)
static boolean hideKnownFilesInDataSourcesTree()
synchronized static Logger getLogger(String name)
static final Logger logger
static Case getCurrentCaseThrows()
void setChildNodeSelectionInfo(NodeSelectionInfo selectedChildNodeInfo)
static String getNameIdentifier()
Node getParentNodeGroupedByDataSource(ExplorerManager treeViewExplorerMgr, Content parentContent)
static synchronized DirectoryTreeTopComponent findInstance()
List< Content > skipToParent(Content content)
static void error(String message)