mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-13 16:36:15 +00:00
refactoring
This commit is contained in:
parent
b67fc4f95a
commit
a42cf4eb63
@ -26,6 +26,7 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@ -169,6 +170,38 @@ public class ViewContextAction extends AbstractAction {
|
|||||||
public void actionPerformed(ActionEvent event) {
|
public void actionPerformed(ActionEvent event) {
|
||||||
EventQueue.invokeLater(() -> {
|
EventQueue.invokeLater(() -> {
|
||||||
|
|
||||||
|
Content parentContent = getParentContent(this.content);
|
||||||
|
|
||||||
|
if ((parentContent != null) && (parentContent instanceof UnsupportedContent)) {
|
||||||
|
MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_unsupportedParent());
|
||||||
|
logger.log(Level.WARNING, String.format("Could not navigate to unsupported content with id: %d", parentContent.getId())); //NON-NLS
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the "Data Sources" node from the tree view.
|
||||||
|
DirectoryTreeTopComponent treeViewTopComponent = DirectoryTreeTopComponent.findInstance();
|
||||||
|
ExplorerManager treeViewExplorerMgr = treeViewTopComponent.getExplorerManager();
|
||||||
|
|
||||||
|
Node parentTreeViewNode = null;
|
||||||
|
if (parentContent != null) {
|
||||||
|
if (Objects.equals(CasePreferences.getGroupItemsInTreeByDataSource(), true)) {
|
||||||
|
parentTreeViewNode = getParentNodeGroupedByPersonHost(treeViewExplorerMgr, parentContent);
|
||||||
|
} else {
|
||||||
|
parentTreeViewNode = getParentNodeGroupedByDataSource(treeViewExplorerMgr, parentContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if no node is found, report error and do nothing
|
||||||
|
if (parentTreeViewNode == null) {
|
||||||
|
MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_cannotFindNode());
|
||||||
|
logger.log(Level.SEVERE, "Failed to locate data source node in tree."); //NON-NLS
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setNodeSelection(this.content, parentTreeViewNode, treeViewTopComponent, treeViewExplorerMgr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private Content getParentContent(Content content) {
|
||||||
/*
|
/*
|
||||||
* Get the parent content for the content to be selected in the
|
* Get the parent content for the content to be selected in the
|
||||||
* results view. If the parent content is null, then the specified
|
* results view. If the parent content is null, then the specified
|
||||||
@ -176,41 +209,54 @@ public class ViewContextAction extends AbstractAction {
|
|||||||
* "Data Sources" node. Otherwise, the tree view needs to be
|
* "Data Sources" node. Otherwise, the tree view needs to be
|
||||||
* searched to find the parent treeview node.
|
* searched to find the parent treeview node.
|
||||||
*/
|
*/
|
||||||
Content parentContent = null;
|
|
||||||
try {
|
try {
|
||||||
parentContent = content.getParent();
|
Content parent = content.getParent();
|
||||||
|
if (parent == null && content instanceof DataSource) {
|
||||||
|
parent = content;
|
||||||
|
}
|
||||||
|
return parent;
|
||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_cannotFindDirectory());
|
MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_cannotFindDirectory());
|
||||||
logger.log(Level.SEVERE, String.format("Could not get parent of Content object: %s", content), ex); //NON-NLS
|
logger.log(Level.SEVERE, String.format("Could not get parent of Content object: %s", content), ex); //NON-NLS
|
||||||
return;
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((parentContent != null)
|
|
||||||
&& (parentContent instanceof UnsupportedContent)) {
|
private Node getParentNodeGroupedByDataSource(ExplorerManager treeViewExplorerMgr, Content parentContent) {
|
||||||
MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_unsupportedParent());
|
// Classic view
|
||||||
logger.log(Level.WARNING, String.format("Could not navigate to unsupported content with id: %d", parentContent.getId())); //NON-NLS
|
// Start the search at the DataSourcesNode
|
||||||
return;
|
Children rootChildren = treeViewExplorerMgr.getRootContext().getChildren();
|
||||||
|
Node rootDsNode = rootChildren == null ? null : rootChildren.findChild(DataSourcesNode.getNameIdentifier());
|
||||||
|
if (rootDsNode != null) {
|
||||||
|
for (Node dataSourceLevelNode : getDataSourceLevelNodes(rootDsNode)) {
|
||||||
|
DataSource dataSource = dataSourceLevelNode.getLookup().lookup(DataSource.class);
|
||||||
|
if (dataSource != null) {
|
||||||
|
// the tree view needs to be searched to find the parent treeview node.
|
||||||
|
Node potentialParentTreeViewNode = findParentNodeInTree(parentContent, dataSourceLevelNode);
|
||||||
|
if (potentialParentTreeViewNode != null) {
|
||||||
|
return potentialParentTreeViewNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
return null;
|
||||||
* Get the "Data Sources" node from the tree view.
|
}
|
||||||
*/
|
|
||||||
DirectoryTreeTopComponent treeViewTopComponent = DirectoryTreeTopComponent.findInstance();
|
private Node getParentNodeGroupedByPersonHost(ExplorerManager treeViewExplorerMgr, Content parentContent) {
|
||||||
ExplorerManager treeViewExplorerMgr = treeViewTopComponent.getExplorerManager();
|
// 'Group by Data Source' view
|
||||||
Node parentTreeViewNode = null;
|
|
||||||
if (Objects.equals(CasePreferences.getGroupItemsInTreeByDataSource(), true)) { // 'Group by Data Source' view
|
|
||||||
|
|
||||||
SleuthkitCase skCase;
|
SleuthkitCase skCase;
|
||||||
String dsname;
|
String dsname;
|
||||||
try {
|
try {
|
||||||
// get the objid/name of the datasource of the selected content.
|
// get the objid/name of the datasource of the selected content.
|
||||||
skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
|
skCase = Case.getCurrentCaseThrows().getSleuthkitCase();
|
||||||
long contentDSObjid = content.getDataSource().getId();
|
long contentDSObjid = parentContent.getDataSource().getId();
|
||||||
DataSource datasource = skCase.getDataSource(contentDSObjid);
|
DataSource datasource = skCase.getDataSource(contentDSObjid);
|
||||||
dsname = datasource.getName();
|
dsname = datasource.getName();
|
||||||
Children rootChildren = treeViewExplorerMgr.getRootContext().getChildren();
|
Children rootChildren = treeViewExplorerMgr.getRootContext().getChildren();
|
||||||
|
|
||||||
if (null != parentContent) {
|
|
||||||
// the tree view needs to be searched to find the parent treeview node.
|
// the tree view needs to be searched to find the parent treeview node.
|
||||||
/* NOTE: we can't do a lookup by data source name here, becase if there
|
/* NOTE: we can't do a lookup by data source name here, becase if there
|
||||||
are multiple data sources with the same name, then "getChildren().findChild(dsname)"
|
are multiple data sources with the same name, then "getChildren().findChild(dsname)"
|
||||||
@ -231,57 +277,22 @@ public class ViewContextAction extends AbstractAction {
|
|||||||
Node datasourceGroupingNode = treeNode.getChildren().findChild(DataSourceFilesNode.getNameIdentifier());
|
Node datasourceGroupingNode = treeNode.getChildren().findChild(DataSourceFilesNode.getNameIdentifier());
|
||||||
|
|
||||||
// check whether this is the data source we are looking for
|
// check whether this is the data source we are looking for
|
||||||
parentTreeViewNode = findParentNodeInTree(parentContent, datasourceGroupingNode);
|
Node parentTreeViewNode = findParentNodeInTree(parentContent, datasourceGroupingNode);
|
||||||
if (parentTreeViewNode != null) {
|
if (parentTreeViewNode != null) {
|
||||||
// found the data source node
|
// found the data source node
|
||||||
break;
|
return parentTreeViewNode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
/* If the parent content is null, then the specified
|
|
||||||
* content is a data source, and the parent tree view node is the
|
|
||||||
* "Data Sources" node. */
|
|
||||||
Node datasourceGroupingNode = rootChildren.findChild(dsname);
|
|
||||||
if (!Objects.isNull(datasourceGroupingNode)) {
|
|
||||||
Children dsChildren = datasourceGroupingNode.getChildren();
|
|
||||||
parentTreeViewNode = dsChildren.findChild(DataSourceFilesNode.getNameIdentifier());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parentTreeViewNode == null) {
|
|
||||||
MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_cannotFindNode());
|
|
||||||
logger.log(Level.SEVERE, "Failed to locate data source node in tree."); //NON-NLS
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} catch (NoCurrentCaseException | TskDataException | TskCoreException ex) {
|
} catch (NoCurrentCaseException | TskDataException | TskCoreException ex) {
|
||||||
MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_cannotFindNode());
|
MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_cannotFindNode());
|
||||||
logger.log(Level.SEVERE, "Failed to locate data source node in tree.", ex); //NON-NLS
|
logger.log(Level.SEVERE, "Failed to locate data source node in tree.", ex); //NON-NLS
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else { // Classic view
|
|
||||||
// Start the search at the DataSourcesNode
|
|
||||||
Children rootChildren = treeViewExplorerMgr.getRootContext().getChildren();
|
|
||||||
Node rootDsNode = rootChildren == null ? null : rootChildren.findChild(DataSourcesNode.getNameIdentifier());
|
|
||||||
if (rootDsNode != null) {
|
|
||||||
for (Node dataSourceLevelNode : getDataSourceLevelNodes(rootDsNode)) {
|
|
||||||
DataSource dataSource = dataSourceLevelNode.getLookup().lookup(DataSource.class);
|
|
||||||
if (dataSource != null) {
|
|
||||||
// the tree view needs to be searched to find the parent treeview node.
|
|
||||||
Node potentialParentTreeViewNode = findParentNodeInTree(parentContent, dataSourceLevelNode);
|
|
||||||
if (potentialParentTreeViewNode != null) {
|
|
||||||
parentTreeViewNode = potentialParentTreeViewNode;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no node is found, do nothing
|
return null;
|
||||||
if (parentTreeViewNode == null) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void setNodeSelection(Content content, Node parentTreeViewNode, DirectoryTreeTopComponent treeViewTopComponent, ExplorerManager treeViewExplorerMgr) {
|
||||||
/*
|
/*
|
||||||
* Set the child selection info of the parent tree node, then select
|
* Set the child selection info of the parent tree node, then select
|
||||||
* the parent node in the tree view. The results view will retrieve
|
* the parent node in the tree view. The results view will retrieve
|
||||||
@ -320,7 +331,6 @@ public class ViewContextAction extends AbstractAction {
|
|||||||
logger.log(Level.SEVERE, "Failed to select the parent node in the tree view", ex); //NON-NLS
|
logger.log(Level.SEVERE, "Failed to select the parent node in the tree view", ex); //NON-NLS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user