mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 18:17:43 +00:00
Cancelation WIP
This commit is contained in:
parent
b53a2190b7
commit
ae6dc361d1
@ -64,14 +64,19 @@ import javax.swing.JProgressBar;
|
||||
import javax.swing.JSplitPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.JToolBar;
|
||||
import javax.swing.ProgressMonitor;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.SwingWorker;
|
||||
import org.jdesktop.layout.GroupLayout;
|
||||
import org.jdesktop.layout.LayoutStyle;
|
||||
import org.netbeans.api.progress.BaseProgressUtils;
|
||||
import org.netbeans.api.progress.ProgressHandle;
|
||||
import org.netbeans.api.progress.ProgressRunnable;
|
||||
import org.openide.explorer.ExplorerManager;
|
||||
import org.openide.explorer.ExplorerUtils;
|
||||
import org.openide.nodes.Node;
|
||||
import org.openide.util.Cancellable;
|
||||
import org.openide.util.Lookup;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ProxyLookup;
|
||||
@ -241,35 +246,24 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
@Subscribe
|
||||
void handleUnPinEvent(CVTEvents.UnpinAccountsEvent pinEvent) {
|
||||
graph.getModel().beginUpdate();
|
||||
try {
|
||||
graph.unpinAccount(pinEvent.getAccountDeviceInstances());
|
||||
graph.clear();
|
||||
rebuildGraph();
|
||||
} catch (TskCoreException ex) {
|
||||
logger.log(Level.SEVERE, "Error pinning accounts", ex);
|
||||
} finally {
|
||||
// Updates the display
|
||||
graph.getModel().endUpdate();
|
||||
}
|
||||
graph.unpinAccount(pinEvent.getAccountDeviceInstances());
|
||||
graph.clear();
|
||||
rebuildGraph();
|
||||
// Updates the display
|
||||
graph.getModel().endUpdate();
|
||||
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
void handlePinEvent(CVTEvents.PinAccountsEvent pinEvent) {
|
||||
graph.getModel().beginUpdate();
|
||||
try {
|
||||
if (pinEvent.isReplace()) {
|
||||
graph.resetGraph();
|
||||
}
|
||||
|
||||
graph.pinAccount(pinEvent.getAccountDeviceInstances());
|
||||
rebuildGraph();
|
||||
} catch (TskCoreException ex) {
|
||||
logger.log(Level.SEVERE, "Error pinning accounts", ex);
|
||||
} finally {
|
||||
// Updates the display
|
||||
graph.getModel().endUpdate();
|
||||
if (pinEvent.isReplace()) {
|
||||
graph.resetGraph();
|
||||
}
|
||||
graph.pinAccount(pinEvent.getAccountDeviceInstances());
|
||||
rebuildGraph();
|
||||
// Updates the display
|
||||
graph.getModel().endUpdate();
|
||||
|
||||
}
|
||||
|
||||
@ -277,20 +271,15 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
void handleFilterEvent(CVTEvents.FilterChangeEvent filterChangeEvent) {
|
||||
|
||||
graph.getModel().beginUpdate();
|
||||
try {
|
||||
graph.clear();
|
||||
currentFilter = filterChangeEvent.getNewFilter();
|
||||
rebuildGraph();
|
||||
} catch (TskCoreException ex) {
|
||||
logger.log(Level.SEVERE, "Error filtering accounts", ex);
|
||||
} finally {
|
||||
// Updates the display
|
||||
graph.getModel().endUpdate();
|
||||
}
|
||||
graph.clear();
|
||||
currentFilter = filterChangeEvent.getNewFilter();
|
||||
rebuildGraph();
|
||||
// Updates the display
|
||||
graph.getModel().endUpdate();
|
||||
|
||||
}
|
||||
|
||||
private void rebuildGraph() throws TskCoreException {
|
||||
private void rebuildGraph() {
|
||||
if (graph.isEmpty()) {
|
||||
borderLayoutPanel.remove(graphComponent);
|
||||
borderLayoutPanel.add(placeHolderPanel, BorderLayout.CENTER);
|
||||
@ -300,8 +289,8 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
if (worker != null) {
|
||||
worker.cancel(true);
|
||||
}
|
||||
worker = graph.rebuild(new ProgressIndicatorImpl(), commsManager, currentFilter);
|
||||
|
||||
;
|
||||
BaseProgressUtils.showProgressDialogAndRun(new ProgressRunnableImpl(), "Loading Visualization", true);
|
||||
worker.addPropertyChangeListener(new PropertyChangeListener() {
|
||||
@Override
|
||||
public void propertyChange(final PropertyChangeEvent evt) {
|
||||
@ -312,6 +301,10 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
statusLabel.setText("Too many cells, layout aborted.");
|
||||
}
|
||||
}
|
||||
if (worker.isCancelled()) {
|
||||
graph.resetGraph();
|
||||
rebuildGraph();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@ -685,7 +678,8 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
progressPanel.setVisible(true);
|
||||
progressBar.setIndeterminate(true);
|
||||
progressBar.setString("Computing layout");
|
||||
|
||||
final ProgressMonitor progressMonitor = new ProgressMonitor(this, "Computing layout", "", 0, 100);
|
||||
progressMonitor.setProgress(0);
|
||||
new SwingWorker<Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground() throws Exception {
|
||||
@ -696,8 +690,10 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
fitGraph();
|
||||
progressPanel.setVisible(false);
|
||||
progressBar.setValue(0);
|
||||
progressMonitor.close();
|
||||
});
|
||||
|
||||
progressMonitor.setProgress(50);
|
||||
SwingUtilities.invokeLater(() -> progressBar.setString("Applying layout"));
|
||||
morph.startAnimation();
|
||||
return null;
|
||||
@ -763,6 +759,8 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
|
||||
final private class ProgressIndicatorImpl implements ProgressIndicator {
|
||||
|
||||
ProgressMonitor progressMonitor = new ProgressMonitor(VisualizationPanel.this, "title", "detail", 0, 100);
|
||||
|
||||
@Override
|
||||
public void start(String message, int totalWorkUnits) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
@ -771,6 +769,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
progressBar.setString(message);
|
||||
progressBar.setMaximum(totalWorkUnits);
|
||||
progressBar.setValue(0);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@ -780,6 +779,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
progressPanel.setVisible(true);
|
||||
progressBar.setString(message);
|
||||
progressBar.setIndeterminate(true);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@ -815,6 +815,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
progressBar.setValue(workUnitsCompleted);
|
||||
});
|
||||
progressMonitor.setProgress(workUnitsCompleted);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -823,6 +824,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
progressBar.setString(message);
|
||||
progressBar.setValue(workUnitsCompleted);
|
||||
});
|
||||
progressMonitor.setProgress(workUnitsCompleted);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -831,6 +833,7 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
progressBar.setValue(progressBar.getMaximum());
|
||||
progressPanel.setVisible(false);
|
||||
});
|
||||
progressMonitor.close();
|
||||
}
|
||||
}
|
||||
|
||||
@ -923,4 +926,19 @@ final public class VisualizationPanel extends JPanel implements Lookup.Provider
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class ProgressRunnableImpl implements ProgressRunnable<Void>, Cancellable {
|
||||
|
||||
@Override
|
||||
public Void run(ProgressHandle ph) {
|
||||
worker = graph.rebuild(ph, commsManager, currentFilter);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cancel() {
|
||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -44,8 +44,8 @@ import java.util.concurrent.CancellationException;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.logging.Level;
|
||||
import javax.swing.SwingWorker;
|
||||
import org.netbeans.api.progress.ProgressHandle;
|
||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||
import org.sleuthkit.autopsy.progress.ProgressIndicator;
|
||||
import org.sleuthkit.datamodel.AccountDeviceInstance;
|
||||
import org.sleuthkit.datamodel.CommunicationsFilter;
|
||||
import org.sleuthkit.datamodel.CommunicationsManager;
|
||||
@ -219,7 +219,7 @@ final class mxGraphImpl extends mxGraph {
|
||||
getView().updateBoundingBox(state);
|
||||
}
|
||||
|
||||
SwingWorker<?, ?> rebuild(ProgressIndicator progress, CommunicationsManager commsManager, CommunicationsFilter currentFilter) {
|
||||
SwingWorker<?, ?> rebuild(ProgressHandle progress, CommunicationsManager commsManager, CommunicationsFilter currentFilter) {
|
||||
return new RebuildWorker(progress, commsManager, currentFilter);
|
||||
}
|
||||
|
||||
@ -296,19 +296,22 @@ final class mxGraphImpl extends mxGraph {
|
||||
*/
|
||||
private class RebuildWorker extends SwingWorker<Void, Void> {
|
||||
|
||||
private final ProgressIndicator progress;
|
||||
private final ProgressHandle progress;
|
||||
private final CommunicationsManager commsManager;
|
||||
private final CommunicationsFilter currentFilter;
|
||||
|
||||
RebuildWorker(ProgressIndicator progress, CommunicationsManager commsManager, CommunicationsFilter currentFilter) {
|
||||
RebuildWorker(ProgressHandle progress, CommunicationsManager commsManager, CommunicationsFilter currentFilter) {
|
||||
this.progress = progress;
|
||||
this.currentFilter = currentFilter;
|
||||
this.commsManager = commsManager;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground() throws Exception {
|
||||
progress.start("Loading accounts", pinnedAccountDevices.size());
|
||||
progress.progress("Loading accounts");
|
||||
progress.switchToDeterminate(pinnedAccountDevices.size());
|
||||
progress.progress(0);
|
||||
int i = 0;
|
||||
try {
|
||||
/**
|
||||
@ -317,6 +320,7 @@ final class mxGraphImpl extends mxGraph {
|
||||
Set<AccountDeviceInstanceKey> relatedAccounts = new HashSet<>();
|
||||
for (AccountDeviceInstanceKey adiKey : pinnedAccountDevices) {
|
||||
if (isCancelled()) {
|
||||
cancel(true);
|
||||
break;
|
||||
}
|
||||
List<AccountDeviceInstance> relatedAccountDeviceInstances =
|
||||
@ -335,11 +339,12 @@ final class mxGraphImpl extends mxGraph {
|
||||
//for each pair of related accounts add edges if they are related o each other.
|
||||
// this is O(n^2) in the number of related accounts!!!
|
||||
List<AccountDeviceInstanceKey> relatedAccountsList = new ArrayList<>(relatedAccounts);
|
||||
progress.switchToDeterminate("", 0, relatedAccountsList.size());
|
||||
progress.switchToDeterminate(relatedAccountsList.size());
|
||||
for (i = 0; i < relatedAccountsList.size(); i++) {
|
||||
AccountDeviceInstanceKey adiKey1 = relatedAccountsList.get(i);
|
||||
for (int j = i; j < relatedAccountsList.size(); j++) {
|
||||
if (isCancelled()) {
|
||||
cancel(true);
|
||||
break;
|
||||
}
|
||||
AccountDeviceInstanceKey adiKey2 = relatedAccountsList.get(j);
|
||||
@ -369,6 +374,7 @@ final class mxGraphImpl extends mxGraph {
|
||||
} catch (InterruptedException | ExecutionException ex) {
|
||||
logger.log(Level.SEVERE, "Error building graph visualization. ", ex);
|
||||
} catch (CancellationException ex) {
|
||||
|
||||
logger.log(Level.INFO, "Graph visualization cancelled");
|
||||
} finally {
|
||||
progress.finish();
|
||||
|
Loading…
x
Reference in New Issue
Block a user