mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-15 09:17:42 +00:00
Merge branch '845-multiselect-enabled-account-actions' into 841-maintain-selection
Conflicts: Core/src/org/sleuthkit/autopsy/datamodel/Accounts.java
This commit is contained in:
commit
7dcdaef389
@ -24,14 +24,12 @@ import com.google.common.collect.TreeRangeMap;
|
|||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.beans.PropertyVetoException;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -49,7 +47,6 @@ import javax.annotation.concurrent.GuardedBy;
|
|||||||
import javax.annotation.concurrent.Immutable;
|
import javax.annotation.concurrent.Immutable;
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
import javax.swing.Action;
|
import javax.swing.Action;
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
import org.apache.commons.csv.CSVFormat;
|
import org.apache.commons.csv.CSVFormat;
|
||||||
import org.apache.commons.csv.CSVParser;
|
import org.apache.commons.csv.CSVParser;
|
||||||
import org.apache.commons.csv.CSVRecord;
|
import org.apache.commons.csv.CSVRecord;
|
||||||
@ -57,15 +54,12 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.openide.nodes.ChildFactory;
|
import org.openide.nodes.ChildFactory;
|
||||||
import org.openide.nodes.Children;
|
import org.openide.nodes.Children;
|
||||||
import org.openide.nodes.Node;
|
import org.openide.nodes.Node;
|
||||||
import org.openide.nodes.NodeOp;
|
|
||||||
import org.openide.nodes.Sheet;
|
import org.openide.nodes.Sheet;
|
||||||
import org.openide.util.Exceptions;
|
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
|
import org.openide.util.Utilities;
|
||||||
import org.openide.util.lookup.Lookups;
|
import org.openide.util.lookup.Lookups;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
||||||
import org.sleuthkit.autopsy.directorytree.DirectoryTreeTopComponent;
|
|
||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
import org.sleuthkit.autopsy.ingest.ModuleDataEvent;
|
||||||
import org.sleuthkit.datamodel.AbstractFile;
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
@ -162,6 +156,9 @@ public class Accounts extends Observable implements AutopsyVisitableItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final RejectAccounts rejectActionInstance;
|
||||||
|
private final ApproveAccounts approveActionInstance;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
@ -169,6 +166,9 @@ public class Accounts extends Observable implements AutopsyVisitableItem {
|
|||||||
*/
|
*/
|
||||||
Accounts(SleuthkitCase skCase) {
|
Accounts(SleuthkitCase skCase) {
|
||||||
this.skCase = skCase;
|
this.skCase = skCase;
|
||||||
|
|
||||||
|
this.rejectActionInstance = new RejectAccounts();
|
||||||
|
this.approveActionInstance = new ApproveAccounts();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -895,9 +895,6 @@ public class Accounts extends Observable implements AutopsyVisitableItem {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NbBundle.Messages({
|
|
||||||
"ApproveAccountsAction.name=Approve Accounts",
|
|
||||||
"RejectAccountsAction.name=Reject Accounts"})
|
|
||||||
@Override
|
@Override
|
||||||
public Action[] getActions(boolean context) {
|
public Action[] getActions(boolean context) {
|
||||||
Action[] actions = super.getActions(context);
|
Action[] actions = super.getActions(context);
|
||||||
@ -908,8 +905,10 @@ public class Accounts extends Observable implements AutopsyVisitableItem {
|
|||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
LOGGER.log(Level.SEVERE, "Error gettung content by id", ex);
|
LOGGER.log(Level.SEVERE, "Error gettung content by id", ex);
|
||||||
}
|
}
|
||||||
arrayList.add(new ApproveAccounts(getLookup().lookupAll(BlackboardArtifact.class)));
|
|
||||||
arrayList.add(new RejectAccounts(getLookup().lookupAll(BlackboardArtifact.class), this));
|
arrayList.add(approveActionInstance);
|
||||||
|
arrayList.add(rejectActionInstance);
|
||||||
|
|
||||||
return arrayList.toArray(new Action[arrayList.size()]);
|
return arrayList.toArray(new Action[arrayList.size()]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1229,8 +1228,10 @@ public class Accounts extends Observable implements AutopsyVisitableItem {
|
|||||||
public Action[] getActions(boolean context) {
|
public Action[] getActions(boolean context) {
|
||||||
List<Action> actionsList = new ArrayList<>();
|
List<Action> actionsList = new ArrayList<>();
|
||||||
actionsList.addAll(Arrays.asList(super.getActions(context)));
|
actionsList.addAll(Arrays.asList(super.getActions(context)));
|
||||||
actionsList.add(new ApproveAccounts(Collections.singleton(artifact)));
|
|
||||||
actionsList.add(new RejectAccounts(Collections.singleton(artifact), this));
|
actionsList.add(approveActionInstance);
|
||||||
|
actionsList.add(rejectActionInstance);
|
||||||
|
|
||||||
return actionsList.toArray(new Action[actionsList.size()]);
|
return actionsList.toArray(new Action[actionsList.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1261,84 +1262,81 @@ public class Accounts extends Observable implements AutopsyVisitableItem {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
showRejected = !showRejected;
|
showRejected = !showRejected;
|
||||||
update();
|
Accounts.this.update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ApproveAccounts extends AbstractAction {
|
private abstract class ReviewStatusAction extends AbstractAction {
|
||||||
|
|
||||||
private final Collection<? extends BlackboardArtifact> artifacts;
|
private final BlackboardArtifact.ReviewStatus newStatus;
|
||||||
|
|
||||||
|
private ReviewStatusAction(String displayName, BlackboardArtifact.ReviewStatus newStatus) {
|
||||||
|
super(displayName);
|
||||||
|
this.newStatus = newStatus;
|
||||||
|
|
||||||
ApproveAccounts(Collection<? extends BlackboardArtifact> artifacts) {
|
|
||||||
super(Bundle.ApproveAccountsAction_name());
|
|
||||||
this.artifacts = artifacts;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
try {
|
Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class).forEach(artifact -> {
|
||||||
for (BlackboardArtifact artifact : artifacts) {
|
try {
|
||||||
skCase.setReviewStatus(artifact, BlackboardArtifact.ReviewStatus.APPROVED);
|
skCase.setReviewStatus(artifact, newStatus);
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, "Error changing artifact review status.", ex); //NON-NLS
|
||||||
}
|
}
|
||||||
Accounts.this.update();
|
});
|
||||||
} catch (TskCoreException ex) {
|
Accounts.this.update();
|
||||||
LOGGER.log(Level.SEVERE, "Error approving artifacts.", ex); //NON-NLS
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class RejectAccounts extends AbstractAction {
|
private class ApproveAccounts extends ReviewStatusAction {
|
||||||
|
|
||||||
private final Collection<? extends BlackboardArtifact> artifacts;
|
@NbBundle.Messages({"ApproveAccountsAction.name=Approve Accounts"})
|
||||||
private final Node target;
|
private ApproveAccounts() {
|
||||||
|
super(Bundle.ApproveAccountsAction_name(), BlackboardArtifact.ReviewStatus.APPROVED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RejectAccounts(Collection<? extends BlackboardArtifact> artifacts, Node target) {
|
private class RejectAccounts extends ReviewStatusAction {
|
||||||
super(Bundle.RejectAccountsAction_name());
|
|
||||||
this.artifacts = artifacts;
|
@NbBundle.Messages({"RejectAccountsAction.name=Reject Accounts"})
|
||||||
this.target = target;
|
private RejectAccounts() {
|
||||||
|
super(Bundle.RejectAccountsAction_name(), BlackboardArtifact.ReviewStatus.REJECTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
try {
|
super.actionPerformed(e);
|
||||||
for (BlackboardArtifact artifact : artifacts) {
|
// //find the node to select after the target is removed from the UI
|
||||||
skCase.setReviewStatus(artifact, BlackboardArtifact.ReviewStatus.REJECTED);
|
// List<Node> siblings = Arrays.asList(target.getParentNode().getChildren().getNodes());
|
||||||
}
|
// if (siblings.size() <= 1) {
|
||||||
|
// Accounts.this.update();
|
||||||
//find the node to select after the target is removed from the UI
|
// } else {
|
||||||
List<Node> siblings = Arrays.asList(target.getParentNode().getChildren().getNodes());
|
// final int indexOf = siblings.indexOf(target);
|
||||||
if (siblings.size() <= 1) {
|
//
|
||||||
Accounts.this.update();
|
// final Node sibling = indexOf < siblings.size() - 1 // if it is not the last in the list
|
||||||
} else {
|
// ? siblings.get(indexOf + 1) //select the next element
|
||||||
final int indexOf = siblings.indexOf(target);
|
// : siblings.get(indexOf - 1);//else select the previous element
|
||||||
|
// String nodeToSelectName = sibling.getName();
|
||||||
final Node sibling = indexOf < siblings.size() - 1 // if it is not the last in the list
|
// Accounts.this.update();
|
||||||
? siblings.get(indexOf + 1) //select the next element
|
//
|
||||||
: siblings.get(indexOf - 1);//else select the previous element
|
// if (showRejected == false && siblings.size() > 1) {
|
||||||
String nodeToSelectName = sibling.getName();
|
// SwingUtilities.invokeLater(() -> {
|
||||||
Accounts.this.update();
|
// final DirectoryTreeTopComponent directoryTree = DirectoryTreeTopComponent.findInstance();
|
||||||
|
// final DataResultTopComponent directoryListing = directoryTree.getDirectoryListing();
|
||||||
if (showRejected == false && siblings.size() > 1) {
|
// final Node rootNode = directoryListing.getRootNode();
|
||||||
SwingUtilities.invokeLater(() -> {
|
//
|
||||||
final DirectoryTreeTopComponent directoryTree = DirectoryTreeTopComponent.findInstance();
|
// Node child = NodeOp.findChild(rootNode, nodeToSelectName);
|
||||||
final DataResultTopComponent directoryListing = directoryTree.getDirectoryListing();
|
//
|
||||||
final Node rootNode = directoryListing.getRootNode();
|
// try {
|
||||||
|
// directoryTree.getExplorerManager().setSelectedNodes(new Node[]{child.getParentNode()});
|
||||||
Node child = NodeOp.findChild(rootNode, nodeToSelectName);
|
// directoryListing.setSelectedNodes(new Node[]{child.getParentNode()});
|
||||||
|
// } catch (PropertyVetoException ex) {
|
||||||
try {
|
// Exceptions.printStackTrace(ex);
|
||||||
directoryTree.getExplorerManager().setSelectedNodes(new Node[]{child.getParentNode()});
|
// }
|
||||||
directoryListing.setSelectedNodes(new Node[]{child.getParentNode()});
|
// });
|
||||||
} catch (PropertyVetoException ex) {
|
// }
|
||||||
Exceptions.printStackTrace(ex);
|
// }
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (TskCoreException ex) {
|
|
||||||
LOGGER.log(Level.SEVERE, "Error approving artifacts.", ex); //NON-NLS
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user