diff --git a/Core/src/org/sleuthkit/autopsy/actions/OpenLogFolderAction.java b/Core/src/org/sleuthkit/autopsy/actions/OpenLogFolderAction.java index 776bd4ea8d..66ec9c4edc 100755 --- a/Core/src/org/sleuthkit/autopsy/actions/OpenLogFolderAction.java +++ b/Core/src/org/sleuthkit/autopsy/actions/OpenLogFolderAction.java @@ -31,19 +31,15 @@ import org.openide.awt.ActionRegistration; import org.openide.modules.Places; import org.openide.util.Exceptions; import org.openide.util.NbBundle; -import org.openide.util.NbBundle.Messages; -@ActionID( - category = "Help", - id = "org.sleuthkit.autopsy.actions.OpenLogFolder") -@ActionRegistration( - displayName = "#CTL_OpenLogFolder") -@ActionReference(path = "Menu/Help", position = 1750) -// Move to Bundle for I18N -//@Messages("CTL_OpenLogFolder=Open Log Folder") + /** * Action in menu to open the folder containing the log files */ +@ActionRegistration( + displayName = "#CTL_OpenLogFolder", iconInMenu = true) +@ActionReference(path = "Menu/Help", position = 1750) +@ActionID(id = "org.sleuthkit.autopsy.actions.OpenLogFolderAction", category = "Help") public final class OpenLogFolderAction implements ActionListener { @Override diff --git a/Core/src/org/sleuthkit/autopsy/core/layer.xml b/Core/src/org/sleuthkit/autopsy/core/layer.xml index 4553e5d146..60d4183118 100644 --- a/Core/src/org/sleuthkit/autopsy/core/layer.xml +++ b/Core/src/org/sleuthkit/autopsy/core/layer.xml @@ -130,16 +130,6 @@ - - - - - - - - - - @@ -271,10 +261,6 @@ - - - - diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowAction.java b/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowAction.java index b580ab7eba..1bd6a742ac 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowAction.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AboutWindowAction.java @@ -23,11 +23,17 @@ import org.openide.util.NbBundle; import org.netbeans.core.actions.AboutAction; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; /** * Action to open custom implementation of the "About" window from the Help menu. */ - class AboutWindowAction extends AboutAction { +@ActionID(id = "org.sleuthkit.autopsy.corecomponents.AboutWindowAction", category = "Help") +@ActionRegistration(displayName = "#CTL_CustomAboutAction", iconInMenu = true) +@ActionReference(path = "Menu/Help", name = "org-sleuthkit-autopsy-corecomponents-CustomAboutAction", position = 3000) +public class AboutWindowAction extends AboutAction { @Override public void performAction() { diff --git a/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java b/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java index 0850400b1f..725b2ca026 100644 --- a/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java +++ b/Core/src/org/sleuthkit/autopsy/coreutils/ExecUtil.java @@ -24,17 +24,18 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Writer; import java.util.logging.Level; -import org.sleuthkit.autopsy.coreutils.Logger; /** * Takes care of forking a process and reading output / error streams to either a * string buffer or directly to a file writer + * BC: @@@ This code scares me in a multi-threaded env. I think the arguments should be passed into the constructor + * and different run methods that either return the string or use the redirected writer. */ public final class ExecUtil { private static final Logger logger = Logger.getLogger(ExecUtil.class.getName()); private Process proc = null; - private String command = null; + private final String command = null; private ExecUtil.StreamToStringRedirect errorStringRedirect = null; private ExecUtil.StreamToStringRedirect outputStringRedirect = null; private ExecUtil.StreamToWriterRedirect outputWriterRedirect = null; @@ -49,8 +50,6 @@ import org.sleuthkit.autopsy.coreutils.Logger; * @return string buffer with captured stdout */ public synchronized String execute(final String aCommand, final String... params) throws IOException, InterruptedException { - String output = ""; - // build command array String[] arrayCommand = new String[params.length + 1]; arrayCommand[0] = aCommand; @@ -70,29 +69,21 @@ import org.sleuthkit.autopsy.coreutils.Logger; //stderr redirect errorStringRedirect = new ExecUtil.StreamToStringRedirect(proc.getErrorStream(), "ERROR"); //NON-NLS + errorStringRedirect.start(); + //stdout redirect outputStringRedirect = new ExecUtil.StreamToStringRedirect(proc.getInputStream(), "OUTPUT"); //NON-NLS - - //start redurectors - errorStringRedirect.start(); outputStringRedirect.start(); //wait for process to complete and capture error core final int exitVal = proc.waitFor(); logger.log(Level.INFO, aCommand + " exit value: " + exitVal); //NON-NLS - errorStringRedirect.stopRun(); - errorStringRedirect = null; - - outputStringRedirect.stopRun(); - output = outputStringRedirect.getOutput(); - - outputStringRedirect = null; - - //gc process with its streams - //proc = null; - - return output; + // wait for output redirectors to finish writing / reading + outputWriterRedirect.join(); + errorStringRedirect.join(); + + return outputStringRedirect.getOutput(); } /** @@ -125,20 +116,26 @@ import org.sleuthkit.autopsy.coreutils.Logger; //stderr redirect errorStringRedirect = new ExecUtil.StreamToStringRedirect(proc.getErrorStream(), "ERROR"); //NON-NLS + errorStringRedirect.start(); + //stdout redirect outputWriterRedirect = new ExecUtil.StreamToWriterRedirect(proc.getInputStream(), stdoutWriter); - - //start redurectors - errorStringRedirect.start(); outputWriterRedirect.start(); //wait for process to complete and capture error core final int exitVal = proc.waitFor(); logger.log(Level.INFO, aCommand + " exit value: " + exitVal); //NON-NLS + // wait for them to finish writing / reading + outputWriterRedirect.join(); + errorStringRedirect.join(); + //gc process with its streams //proc = null; } + + + /** * Interrupt the running process and stop its stream redirect threads @@ -173,7 +170,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; * managed in this thread. * */ - public static class StreamToStringRedirect extends Thread { + private static class StreamToStringRedirect extends Thread { private static final Logger logger = Logger.getLogger(StreamToStringRedirect.class.getName()); private InputStream is; @@ -243,7 +240,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; * Any exception during execution of the command is managed in this thread. * */ - public static class StreamToWriterRedirect extends Thread { + private static class StreamToWriterRedirect extends Thread { private static final Logger logger = Logger.getLogger(StreamToStringRedirect.class.getName()); private InputStream is; diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java b/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java index e3f018425f..717d1aad81 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/EmailExtracted.java @@ -282,13 +282,13 @@ public class EmailExtracted implements AutopsyVisitableItem { public void propertyChange(PropertyChangeEvent evt) { String eventType = evt.getPropertyName(); - if (eventType.equals(IngestManager.IngestEvent.DATA.toString())) { + if (eventType.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())) { if (((ModuleDataEvent) evt.getOldValue()).getArtifactType() == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG) { emailResults.update(); } } - else if (eventType.equals(IngestManager.IngestEvent.INGEST_JOB_COMPLETED.toString()) - || eventType.equals(IngestManager.IngestEvent.INGEST_JOB_CANCELLED.toString())) { + else if (eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString()) + || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())) { emailResults.update(); } } @@ -296,14 +296,16 @@ public class EmailExtracted implements AutopsyVisitableItem { @Override protected void addNotify() { - IngestManager.addPropertyChangeListener(pcl); + IngestManager.getInstance().addIngestJobEventListener(pcl); + IngestManager.getInstance().addIngestModuleEventListener(pcl); emailResults.update(); emailResults.addObserver(this); } @Override protected void removeNotify() { - IngestManager.removePropertyChangeListener(pcl); + IngestManager.getInstance().removeIngestJobEventListener(pcl); + IngestManager.getInstance().removeIngestModuleEventListener(pcl); emailResults.deleteObserver(this); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java b/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java index 2be34d8cae..0d53d65db8 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java @@ -152,13 +152,13 @@ public class ExtractedContent implements AutopsyVisitableItem { public void propertyChange(PropertyChangeEvent evt) { String eventType = evt.getPropertyName(); - if (eventType.equals(IngestManager.IngestEvent.DATA.toString())) { + if (eventType.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())) { final ModuleDataEvent event = (ModuleDataEvent) evt.getOldValue(); if (doNotShow.contains(event.getArtifactType()) == false) { refresh(true); } - } else if (eventType.equals(IngestManager.IngestEvent.INGEST_JOB_COMPLETED.toString()) - || eventType.equals(IngestManager.IngestEvent.INGEST_JOB_CANCELLED.toString())) { + } else if (eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString()) + || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())) { refresh(true); } } @@ -166,12 +166,14 @@ public class ExtractedContent implements AutopsyVisitableItem { @Override protected void addNotify() { - IngestManager.addPropertyChangeListener(pcl); + IngestManager.getInstance().addIngestJobEventListener(pcl); + IngestManager.getInstance().addIngestModuleEventListener(pcl); } @Override protected void removeNotify() { - IngestManager.removePropertyChangeListener(pcl); + IngestManager.getInstance().removeIngestJobEventListener(pcl); + IngestManager.getInstance().removeIngestModuleEventListener(pcl); typeNodeList.clear(); } @@ -347,13 +349,13 @@ public class ExtractedContent implements AutopsyVisitableItem { public void propertyChange(PropertyChangeEvent evt) { String eventType = evt.getPropertyName(); - if (eventType.equals(IngestManager.IngestEvent.DATA.toString())) { + if (eventType.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())) { final ModuleDataEvent event = (ModuleDataEvent) evt.getOldValue(); if (event.getArtifactType() == type) { refresh(true); } - } else if (eventType.equals(IngestManager.IngestEvent.INGEST_JOB_COMPLETED.toString()) - || eventType.equals(IngestManager.IngestEvent.INGEST_JOB_CANCELLED.toString())) { + } else if (eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString()) + || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())) { refresh(true); } } @@ -361,12 +363,14 @@ public class ExtractedContent implements AutopsyVisitableItem { @Override protected void addNotify() { - IngestManager.addPropertyChangeListener(pcl); + IngestManager.getInstance().addIngestJobEventListener(pcl); + IngestManager.getInstance().addIngestModuleEventListener(pcl); } @Override protected void removeNotify() { - IngestManager.removePropertyChangeListener(pcl); + IngestManager.getInstance().removeIngestJobEventListener(pcl); + IngestManager.getInstance().removeIngestModuleEventListener(pcl); } @Override diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java index fe23fb47cf..142d6a3f42 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/HashsetHits.java @@ -23,7 +23,6 @@ import java.beans.PropertyChangeListener; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; @@ -57,8 +56,8 @@ public class HashsetHits implements AutopsyVisitableItem { private static final String HASHSET_HITS = BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getLabel(); private static final String DISPLAY_NAME = BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getDisplayName(); private static final Logger logger = Logger.getLogger(HashsetHits.class.getName()); - private SleuthkitCase skCase; - private HashsetResults hashsetResults; + private final SleuthkitCase skCase; + private final HashsetResults hashsetResults; public HashsetHits(SleuthkitCase skCase) { this.skCase = skCase; @@ -183,13 +182,13 @@ public class HashsetHits implements AutopsyVisitableItem { public void propertyChange(PropertyChangeEvent evt) { String eventType = evt.getPropertyName(); - if (eventType.equals(IngestManager.IngestEvent.DATA.toString())) { + if (eventType.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())) { if (((ModuleDataEvent) evt.getOldValue()).getArtifactType() == ARTIFACT_TYPE.TSK_HASHSET_HIT) { hashsetResults.update(); } } - else if (eventType.equals(IngestManager.IngestEvent.INGEST_JOB_COMPLETED.toString()) - || eventType.equals(IngestManager.IngestEvent.INGEST_JOB_CANCELLED.toString())) { + else if (eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString()) + || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())) { hashsetResults.update(); } } @@ -197,14 +196,16 @@ public class HashsetHits implements AutopsyVisitableItem { @Override protected void addNotify() { - IngestManager.addPropertyChangeListener(pcl); + IngestManager.getInstance().addIngestJobEventListener(pcl); + IngestManager.getInstance().addIngestModuleEventListener(pcl); hashsetResults.update(); hashsetResults.addObserver(this); } @Override protected void removeNotify() { - IngestManager.removePropertyChangeListener(pcl); + IngestManager.getInstance().removeIngestJobEventListener(pcl); + IngestManager.getInstance().removeIngestModuleEventListener(pcl); hashsetResults.deleteObserver(this); } @@ -229,7 +230,7 @@ public class HashsetHits implements AutopsyVisitableItem { * Node for a hash set name */ public class HashsetNameNode extends DisplayableItemNode implements Observer { - private String hashSetName; + private final String hashSetName; public HashsetNameNode(String hashSetName) { super(Children.create(new HitFactory(hashSetName), true), Lookups.singleton(hashSetName)); super.setName(hashSetName); diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java index ec30d0ce80..6da877d2bd 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/InterestingHits.java @@ -178,14 +178,14 @@ public class InterestingHits implements AutopsyVisitableItem { public void propertyChange(PropertyChangeEvent evt) { String eventType = evt.getPropertyName(); - if (eventType.equals(IngestManager.IngestEvent.DATA.toString())) { + if (eventType.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())) { if ((((ModuleDataEvent) evt.getOldValue()).getArtifactType() == BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT) || (((ModuleDataEvent) evt.getOldValue()).getArtifactType() == BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT)) { interestingResults.update(); } } - else if (eventType.equals(IngestManager.IngestEvent.INGEST_JOB_COMPLETED.toString()) - || eventType.equals(IngestManager.IngestEvent.INGEST_JOB_CANCELLED.toString())) { + else if (eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString()) + || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())) { interestingResults.update(); } } @@ -193,14 +193,16 @@ public class InterestingHits implements AutopsyVisitableItem { @Override protected void addNotify() { - IngestManager.addPropertyChangeListener(pcl); + IngestManager.getInstance().addIngestJobEventListener(pcl); + IngestManager.getInstance().addIngestModuleEventListener(pcl); interestingResults.update(); interestingResults.addObserver(this); } @Override protected void removeNotify() { - IngestManager.removePropertyChangeListener(pcl); + IngestManager.getInstance().removeIngestJobEventListener(pcl); + IngestManager.getInstance().removeIngestModuleEventListener(pcl); interestingResults.deleteObserver(this); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java index bdec4cf4e2..53c43e0490 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/KeywordHits.java @@ -236,13 +236,13 @@ public class KeywordHits implements AutopsyVisitableItem { public void propertyChange(PropertyChangeEvent evt) { String eventType = evt.getPropertyName(); - if (eventType.equals(IngestManager.IngestEvent.DATA.toString())) { + if (eventType.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())) { if (((ModuleDataEvent) evt.getOldValue()).getArtifactType() == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT) { keywordResults.update(); } } - else if (eventType.equals(IngestManager.IngestEvent.INGEST_JOB_COMPLETED.toString()) - || eventType.equals(IngestManager.IngestEvent.INGEST_JOB_CANCELLED.toString())) { + else if (eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString()) + || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())) { keywordResults.update(); } } @@ -250,14 +250,16 @@ public class KeywordHits implements AutopsyVisitableItem { @Override protected void addNotify() { - IngestManager.addPropertyChangeListener(pcl); + IngestManager.getInstance().addIngestJobEventListener(pcl); + IngestManager.getInstance().addIngestModuleEventListener(pcl); keywordResults.update(); keywordResults.addObserver(this); } @Override protected void removeNotify() { - IngestManager.removePropertyChangeListener(pcl); + IngestManager.getInstance().removeIngestJobEventListener(pcl); + IngestManager.getInstance().removeIngestModuleEventListener(pcl); keywordResults.deleteObserver(this); } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/Tags.java b/Core/src/org/sleuthkit/autopsy/datamodel/Tags.java index c44166b939..0bb54f9c4d 100755 --- a/Core/src/org/sleuthkit/autopsy/datamodel/Tags.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/Tags.java @@ -121,12 +121,12 @@ public class Tags implements AutopsyVisitableItem { @Override public void propertyChange(PropertyChangeEvent evt) { String eventType = evt.getPropertyName(); - if (eventType.equals(IngestManager.IngestEvent.DATA.toString())) { + if (eventType.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())) { if ((((ModuleDataEvent) evt.getOldValue()).getArtifactType() == BlackboardArtifact.ARTIFACT_TYPE.TSK_TAG_ARTIFACT) || ((ModuleDataEvent) evt.getOldValue()).getArtifactType() == BlackboardArtifact.ARTIFACT_TYPE.TSK_TAG_FILE) { refresh(true); tagResults.update(); } - } else if (eventType.equals(IngestManager.IngestEvent.INGEST_JOB_COMPLETED.toString()) || eventType.equals(IngestManager.IngestEvent.INGEST_JOB_CANCELLED.toString())) { + } else if (eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString()) || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())) { refresh(true); tagResults.update(); } @@ -135,14 +135,16 @@ public class Tags implements AutopsyVisitableItem { @Override protected void addNotify() { - IngestManager.addPropertyChangeListener(pcl); + IngestManager.getInstance().addIngestJobEventListener(pcl); + IngestManager.getInstance().addIngestModuleEventListener(pcl); tagResults.update(); tagResults.addObserver(this); } @Override protected void removeNotify() { - IngestManager.removePropertyChangeListener(pcl); + IngestManager.getInstance().removeIngestJobEventListener(pcl); + IngestManager.getInstance().removeIngestModuleEventListener(pcl); tagResults.deleteObserver(this); } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index cb4efb4a74..d9e0d8eb3f 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -56,7 +56,6 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.BlackboardResultViewer; import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; import org.sleuthkit.autopsy.corecomponents.TableFilterNode; import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode; -import org.sleuthkit.autopsy.datamodel.ExtractedContent.RootNode; import org.sleuthkit.autopsy.datamodel.DataSources; import org.sleuthkit.autopsy.datamodel.DataSourcesNode; import org.sleuthkit.autopsy.datamodel.KeywordHits; @@ -67,8 +66,6 @@ import org.sleuthkit.autopsy.datamodel.RootContentChildren; import org.sleuthkit.autopsy.datamodel.Views; import org.sleuthkit.autopsy.datamodel.ViewsNode; import org.sleuthkit.autopsy.ingest.IngestManager; -import org.sleuthkit.autopsy.ingest.IngestManager.IngestEvent; -import org.sleuthkit.autopsy.ingest.ModuleDataEvent; import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardAttribute; import org.sleuthkit.datamodel.Content; @@ -578,18 +575,18 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat else if (changed.equals(ExplorerManager.PROP_SELECTED_NODES)) { respondSelection((Node[]) oldValue, (Node[]) newValue); } - else if (changed.equals(IngestEvent.DATA.toString())) { + else if (changed.equals(IngestManager.IngestModuleEvent.DATA_ADDED.toString())) { // nothing to do here. // all nodes should be listening for these events and update accordingly. - } else if (changed.equals(IngestEvent.INGEST_JOB_COMPLETED.toString()) - || changed.equals(IngestEvent.INGEST_JOB_CANCELLED.toString())) { + } else if (changed.equals(IngestManager.IngestJobEvent.COMPLETED.toString()) + || changed.equals(IngestManager.IngestJobEvent.CANCELLED.toString())) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { refreshDataSourceTree(); } }); - } else if (changed.equals(IngestEvent.CONTENT_CHANGED.toString())) { + } else if (changed.equals(IngestManager.IngestModuleEvent.CONTENT_CHANGED.toString())) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { diff --git a/Core/src/org/sleuthkit/autopsy/examples/SampleModuleIngestJobSettings.java b/Core/src/org/sleuthkit/autopsy/examples/SampleModuleIngestJobSettings.java index 83339dbc6f..7f415d3948 100755 --- a/Core/src/org/sleuthkit/autopsy/examples/SampleModuleIngestJobSettings.java +++ b/Core/src/org/sleuthkit/autopsy/examples/SampleModuleIngestJobSettings.java @@ -37,6 +37,7 @@ import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; */ public class SampleModuleIngestJobSettings implements IngestModuleIngestJobSettings { + private static final long serialVersionUID = 1L; private boolean skipKnownFiles = true; SampleModuleIngestJobSettings() { @@ -47,8 +48,8 @@ public class SampleModuleIngestJobSettings implements IngestModuleIngestJobSetti } @Override - public String getVersionNumber() { - return "1.0"; //NON-NLS + public long getVersionNumber() { + return serialVersionUID; } void setSkipKnownFiles(boolean enabled) { diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java index cd772728fb..92964a584d 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java @@ -230,45 +230,55 @@ public class IngestManager { } /** - * Ingest events. + * Ingest job events. */ - public enum IngestEvent { + public enum IngestJobEvent { /** * Property change event fired when an ingest job is started. The old * value of the PropertyChangeEvent object is set to the ingest job id, * and the new value is set to null. */ - INGEST_JOB_STARTED, + STARTED, /** * Property change event fired when an ingest job is completed. The old * value of the PropertyChangeEvent object is set to the ingest job id, * and the new value is set to null. */ - INGEST_JOB_COMPLETED, + COMPLETED, /** * Property change event fired when an ingest job is canceled. The old * value of the PropertyChangeEvent object is set to the ingest job id, * and the new value is set to null. */ - INGEST_JOB_CANCELLED, + CANCELLED, + }; + + /** + * Ingest module events. + */ + public enum IngestModuleEvent { + /** - * 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 - * also query new data as needed. + * Property change event fired when an ingest module adds new data to a + * case, usually by posting to the blackboard. The old value of the + * PropertyChangeEvent is a ModuleDataEvent object, and the new value is + * set to null. */ - DATA, + DATA_ADDED, /** - * Event send when content changed, either its attributes changed, or - * new content children have been added. I.e. from ZIP files or Carved - * files + * Property change event fired when an ingest module adds new content to + * a case or changes a recorded attribute of existing content. For + * example, if a module adds an extracted or carved file to a case, the + * module should fire this event. The old value of the + * PropertyChangeEvent is a ModuleContentEvent object, and the new value + * is set to null. */ CONTENT_CHANGED, /** - * Event sent when a file has finished going through a pipeline of - * modules. Second argument is the object ID. Third argument is null + * Property change event fired when the ingest of a file is completed. + * The old value of the PropertyChangeEvent is the Autopsy object ID of + * the file, and the new value is set to null. */ FILE_DONE, }; @@ -309,35 +319,13 @@ public class IngestManager { ingestModuleEventPublisher.removePropertyChangeListener(listener); } - /** - * Add an ingest module event property change listener. - * - * @deprecated - * @param listener The PropertyChangeListener to register. - */ - public static void addPropertyChangeListener(final PropertyChangeListener listener) { - instance.ingestJobEventPublisher.addPropertyChangeListener(listener); - instance.ingestModuleEventPublisher.addPropertyChangeListener(listener); - } - - /** - * Remove an ingest module event property change listener. - * - * @deprecated - * @param listener The PropertyChangeListener to unregister. - */ - public static void removePropertyChangeListener(final PropertyChangeListener listener) { - instance.ingestJobEventPublisher.removePropertyChangeListener(listener); - instance.ingestModuleEventPublisher.removePropertyChangeListener(listener); - } - /** * Fire an ingest event signifying an ingest job started. * * @param ingestJobId The ingest job id. */ void fireIngestJobStarted(long ingestJobId) { - fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestJobEventPublisher, IngestEvent.INGEST_JOB_STARTED, ingestJobId, null)); + fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestJobEventPublisher, IngestJobEvent.STARTED, ingestJobId, null)); } /** @@ -346,7 +334,7 @@ public class IngestManager { * @param ingestJobId The ingest job id. */ void fireIngestJobCompleted(long ingestJobId) { - fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestJobEventPublisher, IngestEvent.INGEST_JOB_COMPLETED, ingestJobId, null)); + fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestJobEventPublisher, IngestJobEvent.COMPLETED, ingestJobId, null)); } /** @@ -355,7 +343,7 @@ public class IngestManager { * @param ingestJobId The ingest job id. */ void fireIngestJobCancelled(long ingestJobId) { - fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestJobEventPublisher, IngestEvent.INGEST_JOB_CANCELLED, ingestJobId, null)); + fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestJobEventPublisher, IngestJobEvent.CANCELLED, ingestJobId, null)); } /** @@ -364,7 +352,7 @@ public class IngestManager { * @param fileId The object id of file. */ void fireFileIngestDone(long fileId) { - fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestModuleEventPublisher, IngestEvent.FILE_DONE, fileId, null)); + fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestModuleEventPublisher, IngestModuleEvent.FILE_DONE, fileId, null)); } /** @@ -373,7 +361,7 @@ public class IngestManager { * @param moduleDataEvent A ModuleDataEvent with the details of the posting. */ void fireIngestModuleDataEvent(ModuleDataEvent moduleDataEvent) { - fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestModuleEventPublisher, IngestEvent.DATA, moduleDataEvent, null)); + fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestModuleEventPublisher, IngestModuleEvent.DATA_ADDED, moduleDataEvent, null)); } /** @@ -384,7 +372,7 @@ public class IngestManager { * content. */ void fireIngestModuleContentEvent(ModuleContentEvent moduleContentEvent) { - fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestModuleEventPublisher, IngestEvent.CONTENT_CHANGED, moduleContentEvent, null)); + fireIngestEventsThreadPool.submit(new FireIngestEventThread(ingestModuleEventPublisher, IngestModuleEvent.CONTENT_CHANGED, moduleContentEvent, null)); } /** @@ -534,13 +522,23 @@ public class IngestManager { private static class FireIngestEventThread implements Runnable { private final PropertyChangeSupport publisher; - private final IngestEvent event; + private final IngestJobEvent jobEvent; + private final IngestModuleEvent moduleEvent; private final Object oldValue; private final Object newValue; - FireIngestEventThread(PropertyChangeSupport publisher, IngestEvent event, Object oldValue, Object newValue) { + FireIngestEventThread(PropertyChangeSupport publisher, IngestJobEvent event, Object oldValue, Object newValue) { this.publisher = publisher; - this.event = event; + this.jobEvent = event; + this.moduleEvent = null; + this.oldValue = oldValue; + this.newValue = newValue; + } + + FireIngestEventThread(PropertyChangeSupport publisher, IngestModuleEvent event, Object oldValue, Object newValue) { + this.publisher = publisher; + this.jobEvent = null; + this.moduleEvent = event; this.oldValue = oldValue; this.newValue = newValue; } @@ -548,7 +546,7 @@ public class IngestManager { @Override public void run() { try { - publisher.firePropertyChange(event.toString(), oldValue, newValue); + publisher.firePropertyChange((jobEvent != null ? jobEvent.toString() : moduleEvent.toString()), oldValue, newValue); } catch (Exception e) { logger.log(Level.SEVERE, "Ingest manager listener threw exception", e); //NON-NLS MessageNotifyUtil.Notify.show(NbBundle.getMessage(IngestManager.class, "IngestManager.moduleErr"), diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleIngestJobSettings.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleIngestJobSettings.java index b68186b17f..67d051d86a 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleIngestJobSettings.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestModuleIngestJobSettings.java @@ -28,9 +28,11 @@ import java.io.Serializable; public interface IngestModuleIngestJobSettings extends Serializable { /** - * Returns the version number of the settings object. + * Returns the version number of the settings object. The version number + * should be a private final static long per the documentation of the + * Serializable interface. * - * @return A version number string. + * @return A serialization version number. */ - String getVersionNumber(); + long getVersionNumber(); } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/NoIngestModuleIngestJobSettings.java b/Core/src/org/sleuthkit/autopsy/ingest/NoIngestModuleIngestJobSettings.java index 4c92cfc3ee..df850092f5 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/NoIngestModuleIngestJobSettings.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/NoIngestModuleIngestJobSettings.java @@ -24,11 +24,12 @@ package org.sleuthkit.autopsy.ingest; */ public final class NoIngestModuleIngestJobSettings implements IngestModuleIngestJobSettings { + private static final long serialVersionUID = 1L; private final String setting = "None"; //NON-NLS @Override - public String getVersionNumber() { - return "1.0"; //NON-NLS + public long getVersionNumber() { + return serialVersionUID; } /** diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchDetectorModuleSettings.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchDetectorModuleSettings.java index 7a88433067..a894fe60a6 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchDetectorModuleSettings.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchDetectorModuleSettings.java @@ -25,6 +25,7 @@ import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; */ final class FileExtMismatchDetectorModuleSettings implements IngestModuleIngestJobSettings { + private static final long serialVersionUID = 1L; private boolean skipFilesWithNoExtension = true; private boolean skipFilesWithTextPlainMimeType = false; @@ -37,8 +38,8 @@ final class FileExtMismatchDetectorModuleSettings implements IngestModuleIngestJ } @Override - public String getVersionNumber() { - return "1.0"; //NON-NLS + public long getVersionNumber() { + return serialVersionUID; } void setSkipFilesWithNoExtension(boolean enabled) { diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettings.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettings.java index f62cab64dc..c472596be4 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettings.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdModuleSettings.java @@ -25,6 +25,7 @@ import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; */ public class FileTypeIdModuleSettings implements IngestModuleIngestJobSettings { + private static final long serialVersionUID = 1L; private volatile boolean skipKnownFiles = true; FileTypeIdModuleSettings() { @@ -35,8 +36,8 @@ public class FileTypeIdModuleSettings implements IngestModuleIngestJobSettings { } @Override - public String getVersionNumber() { - return "1.0"; //NON-NLS + public long getVersionNumber() { + return serialVersionUID; } void setSkipKnownFiles(boolean enabled) { diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupModuleSettings.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupModuleSettings.java index 76edf6c184..bd2d0bc1d8 100755 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupModuleSettings.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupModuleSettings.java @@ -28,6 +28,7 @@ import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; */ final class HashLookupModuleSettings implements IngestModuleIngestJobSettings { + private static final long serialVersionUID = 1L; private final HashSet namesOfEnabledKnownHashSets = new HashSet<>(); private final HashSet namesOfEnabledKnownBadHashSets = new HashSet<>(); private boolean shouldCalculateHashes = true; @@ -39,8 +40,8 @@ final class HashLookupModuleSettings implements IngestModuleIngestJobSettings { } @Override - public String getVersionNumber() { - return "1.0"; //NON-NLS + public long getVersionNumber() { + return serialVersionUID; } boolean shouldCalculateHashes() { diff --git a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java index c414731036..bdc77069d2 100644 --- a/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java +++ b/HashDatabase/src/org/sleuthkit/autopsy/hashdatabase/HashLookupSettingsPanel.java @@ -231,9 +231,9 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan } 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()); + return evt.getPropertyName().equals(IngestManager.IngestJobEvent.STARTED.toString()) + || evt.getPropertyName().equals(IngestManager.IngestJobEvent.COMPLETED.toString()) + || evt.getPropertyName().equals(IngestManager.IngestJobEvent.CANCELLED.toString()); } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileTikaTextExtract.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileTikaTextExtract.java index b04ec4d2d9..b3a34cb3ed 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileTikaTextExtract.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/AbstractFileTikaTextExtract.java @@ -80,7 +80,7 @@ class AbstractFileTikaTextExtract implements AbstractFileExtract { for (MediaType mt : mediaTypes) { TIKA_SUPPORTED_TYPES.add(mt.getType() + "/" + mt.getSubtype()); } - logger.log(Level.INFO, "Tika supported media types: {0}", TIKA_SUPPORTED_TYPES); //NON-NLS + //logger.log(Level.INFO, "Tika supported media types: {0}", TIKA_SUPPORTED_TYPES); //NON-NLS } @Override diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java index 4ba2d39eb6..65e2de24ea 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchEditListPanel.java @@ -43,7 +43,7 @@ import javax.swing.table.AbstractTableModel; import javax.swing.table.TableColumn; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; import org.sleuthkit.autopsy.ingest.IngestManager; -import org.sleuthkit.autopsy.ingest.IngestManager.IngestEvent; +import org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent; /** * KeywordSearchEditListPanel widget to manage keywords in lists @@ -130,9 +130,9 @@ class KeywordSearchEditListPanel extends javax.swing.JPanel implements ListSelec @Override public void propertyChange(PropertyChangeEvent evt) { String changed = evt.getPropertyName(); - if (changed.equals(IngestEvent.INGEST_JOB_STARTED.toString()) - || changed.equals(IngestEvent.INGEST_JOB_COMPLETED.toString()) - || changed.equals(IngestEvent.INGEST_JOB_CANCELLED.toString())) { + if (changed.equals(IngestJobEvent.STARTED.toString()) + || changed.equals(IngestJobEvent.COMPLETED.toString()) + || changed.equals(IngestJobEvent.CANCELLED.toString())) { EventQueue.invokeLater(new Runnable() { @Override public void run() { diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchJobSettings.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchJobSettings.java index 729c922102..1ce3a6b657 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchJobSettings.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchJobSettings.java @@ -28,6 +28,7 @@ import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; */ final class KeywordSearchJobSettings implements IngestModuleIngestJobSettings { + private static final long serialVersionUID = 1L; private final HashSet namesOfEnabledKeywordLists = new HashSet<>(); KeywordSearchJobSettings(List namesOfEnabledKeywordLists) { @@ -35,8 +36,8 @@ final class KeywordSearchJobSettings implements IngestModuleIngestJobSettings { } @Override - public String getVersionNumber() { - return "1.0"; //NON-NLS + public long getVersionNumber() { + return serialVersionUID; } boolean isKeywordListEnabled(String keywordListName) { diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java index 0e8c099aac..4cefc3ca87 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchListsViewerPanel.java @@ -42,7 +42,7 @@ import org.openide.util.NbBundle; import org.openide.util.actions.SystemAction; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.ingest.IngestManager; -import org.sleuthkit.autopsy.ingest.IngestManager.IngestEvent; +import org.sleuthkit.autopsy.ingest.IngestManager.IngestJobEvent; /** * Viewer panel widget for keyword lists that is used in the ingest config and options area. @@ -122,9 +122,9 @@ class KeywordSearchListsViewerPanel extends AbstractKeywordSearchPerformer { @Override public void propertyChange(PropertyChangeEvent evt) { String changed = evt.getPropertyName(); - if (changed.equals(IngestEvent.INGEST_JOB_STARTED.toString()) - || changed.equals(IngestEvent.INGEST_JOB_COMPLETED.toString()) - || changed.equals(IngestEvent.INGEST_JOB_CANCELLED.toString())) { + if (changed.equals(IngestJobEvent.STARTED.toString()) + || changed.equals(IngestJobEvent.COMPLETED.toString()) + || changed.equals(IngestJobEvent.CANCELLED.toString())) { EventQueue.invokeLater(new Runnable() { @Override public void run() {