From a07153261e568fc735594116a6fdb0463bdbb17e Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Wed, 9 Apr 2014 11:09:19 -0400 Subject: [PATCH 1/2] Changed ingest module lifecycle events to ingest job lifecycle events --- .../DirectoryTreeTopComponent.java | 86 +++++++++---------- .../autopsy/ingest/FileIngestPipeline.java | 2 +- .../autopsy/ingest/IngestManager.java | 57 ++++++------ .../hashdatabase/HashLookupSettingsPanel.java | 16 +++- .../KeywordSearchEditListPanel.java | 59 +++++-------- .../KeywordSearchGlobalListSettingsPanel.java | 2 +- .../KeywordSearchListsViewerPanel.java | 49 +++++------ 7 files changed, 121 insertions(+), 150 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index d5e82204b2..53242a04b3 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -73,6 +73,7 @@ import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TskCoreException; import org.sleuthkit.datamodel.TskException; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; + /** * Top component which displays something. */ @@ -82,7 +83,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat private transient ExplorerManager em = new ExplorerManager(); private static DirectoryTreeTopComponent instance; private DataResultTopComponent dataResult = new DataResultTopComponent(true, NbBundle.getMessage(this.getClass(), - "DirectoryTreeTopComponent.title.text")); + "DirectoryTreeTopComponent.title.text")); private LinkedList backList; private LinkedList forwardList; /** @@ -222,12 +223,12 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backButtonActionPerformed // change the cursor to "waiting cursor" for this operation this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - + // the end is the current place, String[] currentNodePath = backList.pollLast(); forwardList.addLast(currentNodePath); forwardButton.setEnabled(true); - + /* We peek instead of poll because we use its existence * in the list later on so that we do not reset the forward list * after the selection occurs. */ @@ -239,7 +240,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat } else { backButton.setEnabled(false); } - + // update the selection on directory tree setSelectedNode(newCurrentNodePath, null); @@ -256,10 +257,10 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat } else { forwardButton.setEnabled(false); } - + backList.addLast(newCurrentNodePath); backButton.setEnabled(true); - + // update the selection on directory tree setSelectedNode(newCurrentNodePath, null); @@ -543,8 +544,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat // The current case has been closed. Reset the ExplorerManager. Node emptyNode = new AbstractNode(Children.LEAF); em.setRootContext(emptyNode); - } - else if (newValue != null) { + } else if (newValue != null) { // A new case has been opened. Reset the forward and back // buttons. Note that a call to CoreComponentControl.openCoreWindows() // by the new Case object will lead to a componentOpened() call @@ -598,7 +598,8 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat refreshTree(event.getArtifactType()); } }); - } else if (changed.equals(IngestEvent.COMPLETED.toString())) { + } else if (changed.equals(IngestEvent.INGEST_JOB_COMPLETED.toString()) + || changed.equals(IngestEvent.INGEST_JOB_CANCELLED.toString())) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { @@ -654,7 +655,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat return; } Node originNode = origin.getNode(); - + //set node, wrap in filter node first to filter out children Node drfn = new DataResultFilterNode(originNode, DirectoryTreeTopComponent.this.em); Node kffn = new KnownFileFilterNode(drfn, KnownFileFilterNode.getSelectionContext(originNode)); @@ -667,9 +668,8 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat displayName = content.getUniquePath(); } catch (TskCoreException ex) { logger.log(Level.SEVERE, "Exception while calling Content.getUniquePath() for node: " + originNode); - } - } - else if (originNode.getLookup().lookup(String.class) != null) { + } + } else if (originNode.getLookup().lookup(String.class) != null) { displayName = originNode.getLookup().lookup(String.class); } dataResult.setPath(displayName); @@ -695,12 +695,12 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat // update the back and forward list updateHistory(em.getSelectedNodes()); } - + private void updateHistory(Node[] selectedNodes) { if (selectedNodes.length == 0) { return; } - + Node selectedNode = selectedNodes[0]; String selectedNodeName = selectedNode.getName(); @@ -729,7 +729,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat forwardButton.setEnabled(false); // disable the forward Button } } - + /** * Resets the back and forward list, and also disable the back and forward * buttons. @@ -752,8 +752,6 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat pcs.removePropertyChangeListener(listener); } - - /** * Gets the tree on this DirectoryTreeTopComponent. * @@ -768,13 +766,13 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat */ public void refreshContentTreeSafe() { SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - refreshContentTree(); - } - }); + @Override + public void run() { + refreshContentTree(); + } + }); } - + /** * Refreshes changed content nodes */ @@ -865,7 +863,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat /** * Set the selected node using a path to a previously selected node. * - * @param previouslySelectedNodePath Path to a previously selected node. + * @param previouslySelectedNodePath Path to a previously selected node. * @param rootNodeName Name of the root node to match, may be null. */ private void setSelectedNode(final String[] previouslySelectedNodePath, final String rootNodeName) { @@ -876,28 +874,26 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat @Override public void run() { if (previouslySelectedNodePath.length > 0 && (rootNodeName == null || previouslySelectedNodePath[0].equals(rootNodeName))) { - Node selectedNode = null; + Node selectedNode = null; ArrayList selectedNodePath = new ArrayList<>(Arrays.asList(previouslySelectedNodePath)); while (null == selectedNode && !selectedNodePath.isEmpty()) { try { - selectedNode = NodeOp.findPath(em.getRootContext(), selectedNodePath.toArray(new String[0])); - } - catch (NodeNotFoundException ex) { + selectedNode = NodeOp.findPath(em.getRootContext(), selectedNodePath.toArray(new String[0])); + } catch (NodeNotFoundException ex) { // The selected node may have been deleted (e.g., a deleted tag), so truncate the path and try again. if (selectedNodePath.size() > 1) { selectedNodePath.remove(selectedNodePath.size() - 1); - } - else { + } else { StringBuilder nodePath = new StringBuilder(); for (int i = 0; i < previouslySelectedNodePath.length; ++i) { nodePath.append(previouslySelectedNodePath[i]).append("/"); } logger.log(Level.WARNING, "Failed to find any nodes to select on path " + nodePath.toString(), ex); - break; + break; } - } + } } - + if (null != selectedNode) { if (rootNodeName != null) { //called from tree auto refresh context @@ -905,9 +901,8 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat backList.pollLast(); } try { - em.setExploredContextAndSelection(selectedNode, new Node[]{selectedNode}); - } - catch (PropertyVetoException ex) { + em.setExploredContextAndSelection(selectedNode, new Node[]{selectedNode}); + } catch (PropertyVetoException ex) { logger.log(Level.WARNING, "Property veto from ExplorerManager setting selection to " + selectedNode.getName(), ex); } } @@ -970,11 +965,11 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat } catch (TskException ex) { logger.log(Level.WARNING, "Error retrieving attributes", ex); } - } else if ( type.equals(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT) || - type.equals(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT) ) { + } else if (type.equals(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT) + || type.equals(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT)) { Node interestingItemsRootNode = resultsChilds.findChild(type.getLabel()); Children interestingItemsRootChildren = interestingItemsRootNode.getChildren(); - try { + try { String setName = null; List attributes = art.getAttributes(); for (BlackboardAttribute att : attributes) { @@ -1030,16 +1025,15 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat } void fireViewerComplete() { - + try { firePropertyChange(BlackboardResultViewer.FINISHED_DISPLAY_EVT, 0, 1); - } - catch (Exception e) { + } catch (Exception e) { logger.log(Level.SEVERE, "DirectoryTreeTopComponent listener threw exception", e); MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "DirectoryTreeTopComponent.moduleErr"), - NbBundle.getMessage(this.getClass(), - "DirectoryTreeTopComponent.moduleErr.msg"), - MessageNotifyUtil.MessageType.ERROR); + NbBundle.getMessage(this.getClass(), + "DirectoryTreeTopComponent.moduleErr.msg"), + MessageNotifyUtil.MessageType.ERROR); } } } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/FileIngestPipeline.java b/Core/src/org/sleuthkit/autopsy/ingest/FileIngestPipeline.java index e221b8b33b..2cd7d838e4 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/FileIngestPipeline.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/FileIngestPipeline.java @@ -89,7 +89,7 @@ final class FileIngestPipeline { } file.close(); if (!job.isCancelled()) { - IngestManager.fireFileDone(file.getId()); + IngestManager.fireFileIngestDone(file.getId()); } return errors; } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java index 59f0bf7789..f48eb9e83d 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java @@ -122,7 +122,7 @@ public class IngestManager { * * @return True if any ingest jobs are in progress, false otherwise */ - public boolean isIngestRunning() { + public boolean isIngestRunning() { // RJCTODO: Address synch or not synch and listeners return (ingestJobs.isEmpty() == false); } @@ -133,7 +133,7 @@ public class IngestManager { } } - synchronized void cancelIngestJobs() { + void cancelIngestJobs() { new IngestCancellationWorker().execute(); } @@ -143,29 +143,24 @@ public class IngestManager { public enum IngestEvent { /** - * Event sent when an ingest module has been started. Second argument of - * the property change is a string form of the module name and the third - * argument is null. + * Property change event fired when an ingest job is started. The ingest + * job id is in old value field of the PropertyChangeEvent object. */ - STARTED, + INGEST_JOB_STARTED, /** - * Event sent when an ingest module has completed processing by its own - * means. Second argument of the property change is a string form of the - * module name and the third argument is null. - * - * This event is generally used by listeners to perform a final data - * view refresh (listeners need to query all data from the blackboard). + * Property change event fired when an ingest job is completed. The + * ingest job id is in old value field of the PropertyChangeEvent + * object. */ - COMPLETED, + INGEST_JOB_COMPLETED, /** - * Event sent when an ingest module has stopped processing, and likely - * not all data has been processed. Second argument of the property - * change is a string form of the module name and third argument is - * null. + * Property change event fired when an ingest job is canceled. The + * ingest job id is in old value field of the PropertyChangeEvent + * object. */ - STOPPED, + INGEST_JOB_CANCELLED, /** - * Event sent when ingest module posts new data to blackboard or + * Event sent when an ingest module posts new data to blackboard or * somewhere else. Second argument of the property change fired contains * ModuleDataEvent object and third argument is null. The object can * contain encapsulated new data created by the module. Listener can @@ -198,9 +193,9 @@ public class IngestManager { pcs.removePropertyChangeListener(listener); } - static void fireModuleEvent(String eventType, String moduleName) { + static void fireIngestJobEvent(String eventType, long jobId) { try { - pcs.firePropertyChange(eventType, moduleName, null); + pcs.firePropertyChange(eventType, jobId, null); } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), @@ -212,11 +207,11 @@ public class IngestManager { /** * Fire event when file is done with a pipeline run * - * @param objId ID of file that is done + * @param fileId ID of file that is done */ - static void fireFileDone(long objId) { + static void fireFileIngestDone(long fileId) { try { - pcs.firePropertyChange(IngestEvent.FILE_DONE.toString(), objId, null); + pcs.firePropertyChange(IngestEvent.FILE_DONE.toString(), fileId, null); } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), @@ -340,7 +335,8 @@ public class IngestManager { } for (Long jobId : completedJobs) { - ingestJobs.remove(jobId); + IngestJob job = ingestJobs.remove(jobId); + fireIngestJobEvent(job.isCancelled() ? IngestEvent.INGEST_JOB_CANCELLED.toString() : IngestEvent.INGEST_JOB_COMPLETED.toString(), jobId); } } @@ -375,7 +371,7 @@ public class IngestManager { }); progress.start(2 * dataSources.size()); - int processed = 0; + int workUnitsCompleted = 0; for (Content dataSource : dataSources) { if (Thread.currentThread().isInterrupted()) { break; @@ -411,17 +407,18 @@ public class IngestManager { // Queue the data source ingest tasks for the ingest job. final String inputName = dataSource.getName(); - progress.progress("DataSource Ingest" + " " + inputName, processed); + progress.progress("Data source ingest tasks for " + inputName, workUnitsCompleted); // RJCTODO: Improve scheduler.getDataSourceScheduler().schedule(ingestJob); - progress.progress("DataSource Ingest" + " " + inputName, ++processed); + progress.progress("Data source ingest tasks for " + inputName, ++workUnitsCompleted); // Queue the file ingest tasks for the ingest job. - progress.progress("File Ingest" + " " + inputName, processed); + progress.progress("Data source ingest tasks for " + inputName, workUnitsCompleted); scheduler.getFileScheduler().scheduleIngestOfFiles(ingestJob); - progress.progress("File Ingest" + " " + inputName, ++processed); + progress.progress("Data source ingest tasks for " + inputName, ++workUnitsCompleted); if (!Thread.currentThread().isInterrupted()) { startIngestTasks(); + fireIngestJobEvent(IngestEvent.INGEST_JOB_STARTED.toString(), ingestJob.getId()); } } } catch (Exception ex) { diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java index 02b307fc8f..4e1e9ceb70 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.hashdatabase; import java.awt.Color; import java.awt.Component; +import java.awt.EventQueue; import java.awt.Frame; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; @@ -71,8 +72,13 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSetttingsPa IngestManager.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { - if (isFileIngestStatusChangeEvent(evt)) { - updateComponents(); + if (isIngestJobEvent(evt)) { + EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + updateComponents(); + } + }); } } }); @@ -224,8 +230,10 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSetttingsPa return shortenedPath; } - private boolean isFileIngestStatusChangeEvent(PropertyChangeEvent evt) { - return evt.getPropertyName().equals(IngestManager.IngestEvent.STARTED.toString()) || evt.getPropertyName().equals(IngestManager.IngestEvent.COMPLETED.toString()) || evt.getPropertyName().equals(IngestManager.IngestEvent.STOPPED.toString()); + private boolean isIngestJobEvent(PropertyChangeEvent evt) { + return evt.getPropertyName().equals(IngestManager.IngestEvent.INGEST_JOB_STARTED.toString()) + || evt.getPropertyName().equals(IngestManager.IngestEvent.INGEST_JOB_COMPLETED.toString()) + || evt.getPropertyName().equals(IngestManager.IngestEvent.INGEST_JOB_CANCELLED.toString()); } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java index fcc1dc7685..db4a4eaf44 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.keywordsearch; +import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; @@ -40,6 +41,8 @@ import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableColumn; +import org.openide.nodes.Children; +import org.openide.nodes.Node; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.ingest.IngestManager.IngestEvent; @@ -52,7 +55,6 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec private static Logger logger = Logger.getLogger(KeywordSearchEditListPanel.class.getName()); private KeywordTableModel tableModel; private KeywordList currentKeywordList; - private boolean ingestRunning; /** * Creates new form KeywordSearchEditListPanel @@ -101,7 +103,7 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec } }); - initButtons(); + setButtonStates(); addWordField.setComponentPopupMenu(rightClickMenu); ActionListener actList = new ActionListener() { @@ -124,49 +126,28 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec pasteMenuItem.addActionListener(actList); selectAllMenuItem.addActionListener(actList); - if (IngestManager.getInstance().isIngestRunning()) { - initIngest(0); - } else { - initIngest(1); - } + setButtonStates(); IngestManager.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { String changed = evt.getPropertyName(); - Object oldValue = evt.getOldValue(); - if (changed.equals(IngestEvent.COMPLETED.toString()) - && ((String) oldValue).equals(KeywordSearchModuleFactory.getModuleName())) { - initIngest(1); - } else if (changed.equals(IngestEvent.STARTED.toString()) - && ((String) oldValue).equals(KeywordSearchModuleFactory.getModuleName())) { - initIngest(0); - } else if (changed.equals(IngestEvent.STOPPED.toString()) - && ((String) oldValue).equals(KeywordSearchModuleFactory.getModuleName())) { - initIngest(1); + if (changed.equals(IngestEvent.INGEST_JOB_STARTED.toString()) + || changed.equals(IngestEvent.INGEST_JOB_COMPLETED.toString()) + || changed.equals(IngestEvent.INGEST_JOB_CANCELLED.toString())) { + EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + setButtonStates(); + } + }); } } }); } - /** - * Initialize this panel depending on whether ingest is running - * - * @param running case 0: ingest running case 1: ingest not running - */ - private void initIngest(int running) { - switch (running) { - case 0: - ingestRunning = true; - break; - case 1: - ingestRunning = false; - break; - } - initButtons(); - } - - void initButtons() { + void setButtonStates() { + boolean ingestRunning = IngestManager.getInstance().isIngestRunning(); boolean listSet = currentKeywordList != null; boolean isLocked = !listSet ? true : currentKeywordList.isLocked(); boolean noKeywords = !listSet ? true : currentKeywordList.getKeywords().isEmpty(); @@ -441,7 +422,7 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec chRegex.setSelected(false); addWordField.setText(""); - initButtons(); + setButtonStates(); }//GEN-LAST:event_addWordButtonActionPerformed private void deleteWordButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteWordButtonActionPerformed @@ -449,7 +430,7 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec tableModel.deleteSelected(keywordTable.getSelectedRows()); KeywordSearchListsXML.getCurrent().addList(currentKeywordList); - initButtons(); + setButtonStates(); } }//GEN-LAST:event_deleteWordButtonActionPerformed @@ -549,11 +530,11 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec currentKeywordList = loader.getListsL(false).get(index); tableModel.resync(); - initButtons(); + setButtonStates(); } else { currentKeywordList = null; tableModel.resync(); - initButtons(); + setButtonStates(); } } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalListSettingsPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalListSettingsPanel.java index b627e17e21..ac8e74212d 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalListSettingsPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalListSettingsPanel.java @@ -44,7 +44,7 @@ final class KeywordSearchGlobalListSettingsPanel extends javax.swing.JPanel impl if (KeywordSearchUtil.displayConfirmDialog(NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.title"), NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.body"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN)) { String toDelete = editListPanel.getCurrentKeywordList().getName(); editListPanel.setCurrentKeywordList(null); - editListPanel.initButtons(); + editListPanel.setButtonStates(); // RJCTODO: Move this into a deleteList method in the manager KeywordSearchListsXML deleter = KeywordSearchListsXML.getCurrent(); deleter.deleteList(toDelete); diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java index de6d93a918..6b0ca4ad8a 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.keywordsearch; import java.awt.Component; import java.awt.Cursor; +import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; @@ -114,26 +115,23 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer { } }); - if (IngestManager.getInstance().isIngestRunning()) { - initIngest(true); - } else { - initIngest(false); - } + ingestRunning = IngestManager.getInstance().isIngestRunning(); + updateComponents(); IngestManager.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { String changed = evt.getPropertyName(); - Object oldValue = evt.getOldValue(); - if (changed.equals(IngestEvent.COMPLETED.toString()) - && ((String) oldValue).equals(KeywordSearchModuleFactory.getModuleName())) { - initIngest(false); - } else if (changed.equals(IngestEvent.STARTED.toString()) - && ((String) oldValue).equals(KeywordSearchModuleFactory.getModuleName())) { - initIngest(true); - } else if (changed.equals(IngestEvent.STOPPED.toString()) - && ((String) oldValue).equals(KeywordSearchModuleFactory.getModuleName())) { - initIngest(false); + if (changed.equals(IngestEvent.INGEST_JOB_STARTED.toString()) + || changed.equals(IngestEvent.INGEST_JOB_COMPLETED.toString()) + || changed.equals(IngestEvent.INGEST_JOB_CANCELLED.toString())) { + EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + ingestRunning = IngestManager.getInstance().isIngestRunning(); + updateComponents(); + } + }); } } }); @@ -152,28 +150,21 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer { searchAddButton.addActionListener(searchAddListener); } - /** - * Initialize this panel depending on whether ingest is running - * - * @param running case 0: ingest running case 1: ingest not running - */ - private void initIngest(boolean running) { - if (running) { - ingestRunning = true; + private void updateComponents() { + ingestRunning = IngestManager.getInstance().isIngestRunning(); + if (ingestRunning) { searchAddButton.setText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.addIngestTitle")); searchAddButton.setToolTipText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.addIngestMsg" )); - listsTableModel.resync(); } else { - ingestRunning = false; searchAddButton.setText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.searchIngestTitle")); searchAddButton.setToolTipText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.addIdxSearchMsg")); - listsTableModel.resync(); } - updateIngestIndexLabel(running); + listsTableModel.resync(); + updateIngestIndexLabel(); } - private void updateIngestIndexLabel(boolean ingestRunning) { + private void updateIngestIndexLabel() { if (ingestRunning) { ingestIndexLabel.setText(NbBundle.getMessage(this.getClass(), "KeywordSearchListsViewerPanel.initIngest.ongoingIngestMsg", filesIndexed)); } @@ -184,7 +175,7 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer { @Override protected void postFilesIndexedChange() { - updateIngestIndexLabel(ingestRunning); + updateIngestIndexLabel(); } /** From 5b25aa1edde9caba51a5bb42245899c21669fca7 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Wed, 9 Apr 2014 11:15:20 -0400 Subject: [PATCH 2/2] Removed unused imports, TODO comment --- Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java | 2 +- .../autopsy/keywordsearch/KeywordSearchEditListPanel.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java index f48eb9e83d..1cc046ac3e 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java @@ -122,7 +122,7 @@ public class IngestManager { * * @return True if any ingest jobs are in progress, false otherwise */ - public boolean isIngestRunning() { // RJCTODO: Address synch or not synch and listeners + public boolean isIngestRunning() { return (ingestJobs.isEmpty() == false); } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java index db4a4eaf44..27ba1933e5 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java @@ -41,8 +41,6 @@ import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableColumn; -import org.openide.nodes.Children; -import org.openide.nodes.Node; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.ingest.IngestManager.IngestEvent;