From 343b0feeeecf3785c45762943a3e702343b8686c Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Thu, 8 Oct 2015 15:28:51 -0400 Subject: [PATCH 1/9] Modified IntervalErrorReportData --- .../autopsy/casemodule/IntervalErrorReportData.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java b/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java index c45d90ceed..c7877d7187 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java @@ -77,17 +77,18 @@ class IntervalErrorReportData implements SleuthkitCase.ErrorObserver { * (or if this is the first problem encountered), a warning will be shown to * the user. * - * @param newProblems the newProblems to set - * @param ex the exception for this error + * @param newProblems the newProblems to set + * @param context The context in which the error occurred. + * @param errorMessage A description of the error that occurred. */ - private void addProblems(long newProblems, Exception ex) { + private void addProblems(long newProblems, String context, String errorMessage) { this.newProblems += newProblems; this.totalProblems += newProblems; long currentTimeStamp = System.currentTimeMillis(); if ((currentTimeStamp - lastReportedDate) > milliSecondsBetweenReports) { this.lastReportedDate = currentTimeStamp; - MessageNotifyUtil.Notify.error(message, ex.getMessage() + " " + MessageNotifyUtil.Notify.error(message, context + ", " + errorMessage + " " + this.newProblems + " " + NbBundle.getMessage(IntervalErrorReportData.class, "IntervalErrorReport.NewIssues") + " " + this.totalProblems + " " @@ -98,7 +99,7 @@ class IntervalErrorReportData implements SleuthkitCase.ErrorObserver { } @Override - public void receiveError(Exception ex) { - addProblems(1, ex); + public void receiveError(String context, String errorMessage) { + addProblems(1, context, errorMessage); } } From 793d3d49b2e9037187989b9b74fafa081555ffc0 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 9 Oct 2015 11:14:43 -0400 Subject: [PATCH 2/9] Made the API non-static --- .../sleuthkit/autopsy/casemodule/Case.java | 18 ++++++++++--- .../casemodule/IntervalErrorReportData.java | 27 +++++++------------ 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 207d700c77..fbbd7f424a 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -91,7 +91,8 @@ public class Case { private static final String autopsyVer = Version.getVersion(); // current version of autopsy. Change it when the version is changed private static final String EVENT_CHANNEL_NAME = "%s-Case-Events"; private static String appName = null; - private static IntervalErrorReportData tskErrorReporter = null; + private IntervalErrorReportData tskErrorReporter = null; + private static final int MIN_SECONDS_BETWEEN_ERROR_REPORTS = 60; // No less than 60 seconds between warnings for errors private static final int MAX_SANITIZED_NAME_LENGTH = 47; /** @@ -317,13 +318,15 @@ public class Case { * */ private static void changeCase(Case newCase) { - // force static initialization of error reporter - tskErrorReporter = IntervalErrorReportData.getInstance(); // close the existing case Case oldCase = Case.currentCase; Case.currentCase = null; if (oldCase != null) { - doCaseChange(null); //closes windows, etc + doCaseChange(null); //closes windows, etc + if (null != oldCase.tskErrorReporter) { + oldCase.tskErrorReporter.shutdown(); // stop listening for TSK errors for the old case + oldCase.tskErrorReporter = null; + } eventPublisher.publishLocally(new AutopsyEvent(Events.CURRENT_CASE.toString(), oldCase, null)); if (CaseType.MULTI_USER_CASE == oldCase.getCaseType()) { if (null != oldCase.collaborationMonitor) { @@ -336,6 +339,13 @@ public class Case { if (newCase != null) { currentCase = newCase; Logger.setLogDirectory(currentCase.getLogDirectoryPath()); + // sanity check + if (null != currentCase.tskErrorReporter) { + currentCase.tskErrorReporter.shutdown(); + } + // start listening for TSK errors for the new case + currentCase.tskErrorReporter = new IntervalErrorReportData(currentCase, MIN_SECONDS_BETWEEN_ERROR_REPORTS, + NbBundle.getMessage(Case.class, "IntervalErrorReport.ErrorText")); doCaseChange(currentCase); SwingUtilities.invokeLater(() -> { RecentCases.getInstance().addRecentCase(currentCase.name, currentCase.configFilePath); // update the recent cases diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java b/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java index c7877d7187..eb71f8d8d8 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java @@ -31,7 +31,7 @@ import org.sleuthkit.datamodel.SleuthkitCase; */ class IntervalErrorReportData implements SleuthkitCase.ErrorObserver { - private static volatile IntervalErrorReportData instance; + private final Case currentCase; private long newProblems; private long totalProblems; private long lastReportedDate; @@ -41,35 +41,28 @@ class IntervalErrorReportData implements SleuthkitCase.ErrorObserver { /** * Create a new IntervalErrorReprotData instance. * + * @param currentCase Case for which TSK errors should be tracked + * and displayed. * @param secondsBetweenReports Minimum number of seconds between reports. * It will not warn more frequently than this. * @param message The message that will be shown when warning * the user */ - private IntervalErrorReportData(int secondsBetweenReports, String message) { + public IntervalErrorReportData(Case currentCase, int secondsBetweenReports, String message) { this.newProblems = 0; this.totalProblems = 0; this.lastReportedDate = 0; // arm the first warning by choosing zero this.milliSecondsBetweenReports = secondsBetweenReports * 1000; // convert to milliseconds this.message = message; - SleuthkitCase.addErrorObserver(this); + this.currentCase = currentCase; + this.currentCase.getSleuthkitCase().addErrorObserver(this); // it's ok to use "this" at the end of the constructor } - + /** - * Returns the singleton instance of this object - * - * @return the singleton instance of this object + * Shuts down this IntervalErrorReprotData instance. */ - public static IntervalErrorReportData getInstance() { - if (instance == null) { - synchronized (IntervalErrorReportData.class) { - if (instance == null) { - instance = new IntervalErrorReportData(60, // No less than 60 seconds between warnings for errors - NbBundle.getMessage(Case.class, "IntervalErrorReport.ErrorText")); - } - } - } - return instance; + public void shutdown() { + this.currentCase.getSleuthkitCase().removeErrorObserver(this); } /** From a197acb18b2c1092af8ceecdf34f877cacac6a58 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 9 Oct 2015 13:15:39 -0400 Subject: [PATCH 3/9] Modified Case class to be TSK error observer --- .../sleuthkit/autopsy/casemodule/Case.java | 15 ++++++-- .../casemodule/IntervalErrorReportData.java | 34 ++++++++----------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index fbbd7f424a..c82c2c114b 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -86,12 +86,12 @@ import org.sleuthkit.datamodel.TskException; * open at a time. Use getCurrentCase() to retrieve the object for the current * case. */ -public class Case { +public class Case implements SleuthkitCase.ErrorObserver { private static final String autopsyVer = Version.getVersion(); // current version of autopsy. Change it when the version is changed private static final String EVENT_CHANNEL_NAME = "%s-Case-Events"; private static String appName = null; - private IntervalErrorReportData tskErrorReporter = null; + volatile private IntervalErrorReportData tskErrorReporter = null; private static final int MIN_SECONDS_BETWEEN_ERROR_REPORTS = 60; // No less than 60 seconds between warnings for errors private static final int MAX_SANITIZED_NAME_LENGTH = 47; @@ -371,6 +371,17 @@ public class Case { Logger.setLogDirectory(PlatformUtil.getLogDirectory()); } } + + @Override + public void receiveError(String context, String errorMessage) { + /* NOTE: We are accessing currentCase.tskErrorReporter from two different threads. + * This is ok as long as we only read the value of currentCase.tskErrorReporter + * because currentCase.tskErrorReporter is declared as volatile. + */ + if (null != currentCase.tskErrorReporter) { + currentCase.tskErrorReporter.addProblems(context, errorMessage); + } + } AddImageProcess makeAddImageProcess(String timezone, boolean processUnallocSpace, boolean noFatOrphans) { return this.db.makeAddImageProcess(timezone, processUnallocSpace, noFatOrphans); diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java b/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java index eb71f8d8d8..52ea056333 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/IntervalErrorReportData.java @@ -20,16 +20,15 @@ package org.sleuthkit.autopsy.casemodule; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import org.sleuthkit.datamodel.SleuthkitCase; /** * This class enables capturing errors and batching them for reporting on a - * no-more-than-x number of seconds basis. When created, you specify what type - * of error it will be batching, and the minimum time between user - * notifications. When the time between notifications has expired, the next - * error encountered will cause a report to be shown to the user. + * no-more-than-x number of seconds basis. When created, you specify the minimum + * time between user notifications. When the time between notifications has + * expired, the next error encountered will cause a report to be shown to the + * user. */ -class IntervalErrorReportData implements SleuthkitCase.ErrorObserver { +class IntervalErrorReportData { private final Case currentCase; private long newProblems; @@ -39,7 +38,8 @@ class IntervalErrorReportData implements SleuthkitCase.ErrorObserver { private final String message; /** - * Create a new IntervalErrorReprotData instance. + * Create a new IntervalErrorReprotData instance and subscribe for TSK error + * notifications for the current case. * * @param currentCase Case for which TSK errors should be tracked * and displayed. @@ -48,21 +48,21 @@ class IntervalErrorReportData implements SleuthkitCase.ErrorObserver { * @param message The message that will be shown when warning * the user */ - public IntervalErrorReportData(Case currentCase, int secondsBetweenReports, String message) { + IntervalErrorReportData(Case currentCase, int secondsBetweenReports, String message) { this.newProblems = 0; this.totalProblems = 0; this.lastReportedDate = 0; // arm the first warning by choosing zero this.milliSecondsBetweenReports = secondsBetweenReports * 1000; // convert to milliseconds this.message = message; this.currentCase = currentCase; - this.currentCase.getSleuthkitCase().addErrorObserver(this); // it's ok to use "this" at the end of the constructor + this.currentCase.getSleuthkitCase().addErrorObserver(this.currentCase); } /** - * Shuts down this IntervalErrorReprotData instance. + * Un-subscribe from TSK error notifications for current case. */ - public void shutdown() { - this.currentCase.getSleuthkitCase().removeErrorObserver(this); + void shutdown() { + this.currentCase.getSleuthkitCase().removeErrorObserver(this.currentCase); } /** @@ -70,12 +70,11 @@ class IntervalErrorReportData implements SleuthkitCase.ErrorObserver { * (or if this is the first problem encountered), a warning will be shown to * the user. * - * @param newProblems the newProblems to set * @param context The context in which the error occurred. * @param errorMessage A description of the error that occurred. */ - private void addProblems(long newProblems, String context, String errorMessage) { - this.newProblems += newProblems; + void addProblems(String context, String errorMessage) { + this.newProblems += 1; this.totalProblems += newProblems; long currentTimeStamp = System.currentTimeMillis(); @@ -90,9 +89,4 @@ class IntervalErrorReportData implements SleuthkitCase.ErrorObserver { this.newProblems = 0; } } - - @Override - public void receiveError(String context, String errorMessage) { - addProblems(1, context, errorMessage); - } } From 41fb08aef68d17440c4af6ca87e23af5656a2fca Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 9 Oct 2015 13:21:59 -0400 Subject: [PATCH 4/9] Modified Case class to be TSK error observer --- Core/src/org/sleuthkit/autopsy/casemodule/Case.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index c82c2c114b..fec211c56f 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -253,7 +253,7 @@ public class Case implements SleuthkitCase.ErrorObserver { private final XMLCaseManagement xmlcm; private final SleuthkitCase db; // Track the current case (only set with changeCase() method) - private static Case currentCase = null; + volatile private static Case currentCase = null; private final CaseType caseType; private final Services services; private static final Logger logger = Logger.getLogger(Case.class.getName()); @@ -376,9 +376,9 @@ public class Case implements SleuthkitCase.ErrorObserver { public void receiveError(String context, String errorMessage) { /* NOTE: We are accessing currentCase.tskErrorReporter from two different threads. * This is ok as long as we only read the value of currentCase.tskErrorReporter - * because currentCase.tskErrorReporter is declared as volatile. + * because both currentCase and tskErrorReporter are declared as volatile. */ - if (null != currentCase.tskErrorReporter) { + if (null != currentCase && null != currentCase.tskErrorReporter) { currentCase.tskErrorReporter.addProblems(context, errorMessage); } } From 99948bb6770ffea4fdbf2df32b04a09d9a19e9f2 Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 9 Oct 2015 13:40:20 -0400 Subject: [PATCH 5/9] Declared reference to IntervalErrorReportData as volatile --- Core/src/org/sleuthkit/autopsy/casemodule/Case.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index fec211c56f..0b05e1db05 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -253,13 +253,12 @@ public class Case implements SleuthkitCase.ErrorObserver { private final XMLCaseManagement xmlcm; private final SleuthkitCase db; // Track the current case (only set with changeCase() method) - volatile private static Case currentCase = null; + private static Case currentCase = null; private final CaseType caseType; private final Services services; private static final Logger logger = Logger.getLogger(Case.class.getName()); static final String CASE_EXTENSION = "aut"; //NON-NLS static final String CASE_DOT_EXTENSION = "." + CASE_EXTENSION; - private static String HostName; private final static String CACHE_FOLDER = "Cache"; //NON-NLS private final static String EXPORT_FOLDER = "Export"; //NON-NLS private final static String LOG_FOLDER = "Log"; //NON-NLS @@ -374,12 +373,12 @@ public class Case implements SleuthkitCase.ErrorObserver { @Override public void receiveError(String context, String errorMessage) { - /* NOTE: We are accessing currentCase.tskErrorReporter from two different threads. - * This is ok as long as we only read the value of currentCase.tskErrorReporter - * because both currentCase and tskErrorReporter are declared as volatile. + /* NOTE: We are accessing tskErrorReporter from two different threads. + * This is ok as long as we only read the value of tskErrorReporter + * because tskErrorReporter is declared as volatile. */ - if (null != currentCase && null != currentCase.tskErrorReporter) { - currentCase.tskErrorReporter.addProblems(context, errorMessage); + if (null != tskErrorReporter) { + tskErrorReporter.addProblems(context, errorMessage); } } From 7c8dc89df1d7e2fbcd63d5c320398a8615af5cc6 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 13 Oct 2015 16:54:05 -0400 Subject: [PATCH 6/9] Format RunIngestAction.java --- .../src/org/sleuthkit/autopsy/ingest/RunIngestAction.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java index 0bcd23b8b9..22c44f9ebc 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java @@ -70,10 +70,10 @@ public final class RunIngestAction extends CallableSystemAction implements Prese public HelpCtx getHelpCtx() { return HelpCtx.DEFAULT_HELP; } - + /** - * Create a sublist of images updated by RunIngestSubMenu - * Each has an action to perform Ingest Modules on it. + * Create a sublist of images updated by RunIngestSubMenu Each has an action + * to perform Ingest Modules on it. * * @return the images sublist created. */ @@ -83,7 +83,7 @@ public final class RunIngestAction extends CallableSystemAction implements Prese sublist.setVisible(true); return sublist; } - + /** * This method does nothing, use performAction instead. */ From edb29d67ddcc1a524b04532df577ba25fcfd43a4 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 13 Oct 2015 16:58:49 -0400 Subject: [PATCH 7/9] Update method comments for RuinIngestAction --- .../autopsy/ingest/RunIngestAction.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java index 22c44f9ebc..1e33a2d44b 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java @@ -44,7 +44,7 @@ public final class RunIngestAction extends CallableSystemAction implements Prese } /** - * Call getMenuPresenters to create images sublist + * @inheritDoc */ @Override public void performAction() { @@ -52,9 +52,7 @@ public final class RunIngestAction extends CallableSystemAction implements Prese } /** - * Gets the name of this action. This may be presented as an item in a menu. - * - * @return actionName + * @inheritDoc */ @Override public String getName() { @@ -62,9 +60,7 @@ public final class RunIngestAction extends CallableSystemAction implements Prese } /** - * Gets the HelpCtx associated with implementing object - * - * @return HelpCtx or HelpCtx.DEFAULT_HELP + * @inheritDoc */ @Override public HelpCtx getHelpCtx() { @@ -72,10 +68,7 @@ public final class RunIngestAction extends CallableSystemAction implements Prese } /** - * Create a sublist of images updated by RunIngestSubMenu Each has an action - * to perform Ingest Modules on it. - * - * @return the images sublist created. + * @inheritDoc */ @Override public JMenuItem getMenuPresenter() { @@ -85,9 +78,10 @@ public final class RunIngestAction extends CallableSystemAction implements Prese } /** - * This method does nothing, use performAction instead. + * @inheritDoc */ @Override public void actionPerformed(ActionEvent e) { + performAction(); } } From 9547d43673a58977e72e8b09655957c3896f3f22 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 13 Oct 2015 17:05:58 -0400 Subject: [PATCH 8/9] Fix compile and lint warnings for RunIngestAction --- Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java | 5 ++++- .../core.jar/org/netbeans/core/startup/Bundle.properties | 2 +- .../org/netbeans/core/windows/view/ui/Bundle.properties | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java index 1e33a2d44b..a44cea784f 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java @@ -34,11 +34,14 @@ import org.openide.util.actions.Presenter; id = "org.sleuthkit.autopsy.ingest.RunIngestAction" ) @ActionRegistration( - displayName = "#CTL_RunIngestAction" + displayName = "#CTL_RunIngestAction", + lazy = true ) @Messages("CTL_RunIngestAction=Run Ingest") public final class RunIngestAction extends CallableSystemAction implements Presenter.Menu, ActionListener { + private static final long serialVersionUID = 1L; + static public RunIngestAction getInstance() { return new RunIngestAction(); } diff --git a/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties b/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties index ce158ac62b..a41dd17420 100644 --- a/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties +++ b/branding/core/core.jar/org/netbeans/core/startup/Bundle.properties @@ -1,5 +1,5 @@ #Updated by build script -#Mon, 05 Oct 2015 17:56:58 -0400 +#Tue, 13 Oct 2015 17:00:33 -0400 LBL_splash_window_title=Starting Autopsy SPLASH_HEIGHT=314 SPLASH_WIDTH=538 diff --git a/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties b/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties index 65ddfc6e3b..5dd3fa12e1 100644 --- a/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties +++ b/branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties @@ -1,4 +1,4 @@ #Updated by build script -#Mon, 05 Oct 2015 17:56:58 -0400 +#Tue, 13 Oct 2015 17:00:33 -0400 CTL_MainWindow_Title=Autopsy 3.1.3 CTL_MainWindow_Title_No_Project=Autopsy 3.1.3 From cc259e2f6e8dee74702938274d4750ac6c8ef4ff Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Wed, 14 Oct 2015 09:35:30 -0400 Subject: [PATCH 9/9] Add missing resource for RunIngestAction --- Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties | 1 + Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties b/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties index 3fa835fdfd..16be66440e 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/ingest/Bundle.properties @@ -107,3 +107,4 @@ IngestJobSettingsPanel.processUnallocCheckbox.text=Process Unallocated Space IngestManager.cancellingIngest.msgDlg.text=Cancelling all currently running ingest jobs IngestManager.serviceIsDown.msgDlg.text={0} is down RunIngestSubMenu.menuItem.empty=-Empty- +RunIngestModulesMenu.getName.text=Run Ingest Modules diff --git a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java index a44cea784f..151548a9b8 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/RunIngestAction.java @@ -35,7 +35,7 @@ import org.openide.util.actions.Presenter; ) @ActionRegistration( displayName = "#CTL_RunIngestAction", - lazy = true + lazy = false ) @Messages("CTL_RunIngestAction=Run Ingest") public final class RunIngestAction extends CallableSystemAction implements Presenter.Menu, ActionListener {