From 23f10ad81a2063aaf4182ed969f46fada11c9f97 Mon Sep 17 00:00:00 2001 From: millmanorama Date: Thu, 14 Sep 2017 13:09:37 +0200 Subject: [PATCH 1/4] Show message about incompatible DB schemas --- .../autopsy/casemodule/Bundle.properties | 4 --- .../sleuthkit/autopsy/casemodule/Case.java | 31 ++++++++++++++----- .../casemodule/OpenRecentCasePanel.java | 26 ++++++++++------ .../autopsy/corecomponents/Installer.java | 5 ++- 4 files changed, 42 insertions(+), 24 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties index 85dd7443ae..8ba843a41c 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties @@ -93,10 +93,8 @@ AddImageWizardIngestConfigVisual.getName.text=Configure Ingest Modules AddImageWizardIterator.stepXofN=Step {0} of {1} AddLocalFilesTask.localFileAdd.progress.text=Adding\: {0}/{1} Case.getCurCase.exception.noneOpen=Cannot get the current case; there is no case open\! -Case.databaseConnectionInfo.error.msg=Error accessing database server connection info. See Tools, Options, Multi-user. Case.open.msgDlg.updated.msg=Updated case database schema.\nA backup copy of the database with the following path has been made\:\n {0} Case.open.msgDlg.updated.title=Case Database Schema Update -Case.open.exception.multiUserCaseNotEnabled=Cannot open a multi-user case if multi-user cases are not enabled. See Tools, Options, Multi-user. Case.checkImgExist.confDlg.doesntExist.msg=One of the images associated with \n\ this case are missing. Would you like to search for them now?\n\ Previously, the image was located at\:\n\ @@ -131,7 +129,6 @@ Close the folder and file and try again or you can delete the case manually. CaseDeleteAction.msgDlg.fileInUse.title=Error\: Folder In Use CaseDeleteAction.msgDlg.caseDelete.msg=Case {0} has been deleted. CaseOpenAction.autFilter.title={0} Case File ( {1}) -CaseOpenAction.msgDlg.cantOpenCase.title=Error Opening Case CaseCreateAction.msgDlg.cantCreateCase.msg=Cannot create case IntervalErrorReport.NewIssues=new issue(s) IntervalErrorReport.TotalIssues=total issue(s) @@ -184,7 +181,6 @@ OpenRecentCasePanel.colName.caseName=Case Name OpenRecentCasePanel.colName.path=Path RecentCases.exception.caseIdxOutOfRange.msg=Recent case index {0} is out of range. RecentCases.getName.text=Clear Recent Cases -RecentItems.openRecentCase.msgDlg.text=Case {0} no longer exists. StartupWindow.title.text=Welcome UpdateRecentCases.menuItem.clearRecentCases.text=Clear Recent Cases UpdateRecentCases.menuItem.empty=-Empty- diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 1becc449d5..5dd8a0db8f 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -65,6 +65,7 @@ import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.actions.OpenOutputFolderAction; import org.sleuthkit.autopsy.appservices.AutopsyService; import org.sleuthkit.autopsy.appservices.AutopsyService.CaseContext; +import static org.sleuthkit.autopsy.casemodule.Bundle.*; import org.sleuthkit.autopsy.casemodule.CaseMetadata.CaseMetadataException; import org.sleuthkit.autopsy.casemodule.events.AddingDataSourceEvent; import org.sleuthkit.autopsy.casemodule.events.AddingDataSourceFailedEvent; @@ -110,6 +111,7 @@ import org.sleuthkit.datamodel.Image; import org.sleuthkit.datamodel.Report; import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TskCoreException; +import org.sleuthkit.datamodel.TskUnsupportedSchemaVersionException; /** * An Autopsy case. Currently, only one case at a time may be open. @@ -377,6 +379,7 @@ public class Case { * * @param eventNames The events the subscriber is interested in. * @param subscriber The subscriber (PropertyChangeListener) to add. + * * @deprecated Use addEventTypeSubscriber instead. */ @Deprecated @@ -401,6 +404,7 @@ public class Case { * * @param eventName The event the subscriber is interested in. * @param subscriber The subscriber (PropertyChangeListener) to add. + * * @deprecated Use addEventTypeSubscriber instead. */ @Deprecated @@ -1787,7 +1791,16 @@ public class Case { */ @Messages({ "Case.progressMessage.openingCaseDatabase=Opening case database...", - "Case.exceptionMessage.couldNotOpenCaseDatabase=Failed to open case database." + "Case.exceptionMessage.couldNotOpenCaseDatabase=Failed to open case database.", + "# {0} - unsupported major scheme version", + "# {1} - unsupported minor scheme version", + "# {2} - app name", + "# {3} - maximum supported major scheme version", + "Case.unsupportedSchemaVersionMessage=Unsupported DB schema version: {0}.{1}\n" + + "The highest supported DB schema version for this release of {2} is {3}.X", + "Case.databaseConnectionInfo.error.msg=Error accessing database server connection info. See Tools -> Options -> Multi-user.", + "Case.open.exception.multiUserCaseNotEnabled=Cannot open a multi-user case if multi-user cases are not enabled. " + + "See Tools, Options, Multi-user." }) private void openCaseData(ProgressIndicator progressIndicator) throws CaseActionException { try { @@ -1798,16 +1811,20 @@ public class Case { } else if (UserPreferences.getIsMultiUserModeEnabled()) { try { caseDb = SleuthkitCase.openCase(databaseName, UserPreferences.getDatabaseConnectionInfo(), metadata.getCaseDirectory()); - } catch (UserPreferencesException ex) { - throw new CaseActionException(NbBundle.getMessage(Case.class, - "Case.databaseConnectionInfo.error.msg"), ex); - + throw new CaseActionException(Case_databaseConnectionInfo_error_msg(), ex); } } else { - throw new CaseActionException(NbBundle.getMessage(Case.class, - "Case.open.exception.multiUserCaseNotEnabled")); + throw new CaseActionException(Case_open_exception_multiUserCaseNotEnabled()); } + } catch (TskUnsupportedSchemaVersionException ex) { + throw new CaseActionException( + Bundle.Case_unsupportedSchemaVersionMessage( + ex.getUnsupportedMajorVersion(), + ex.getUnsupportedMinorVersion(), + Version.getName(), + ex.getCurrentMajorVer()), + ex); } catch (TskCoreException ex) { throw new CaseActionException(Bundle.Case_exceptionMessage_couldNotOpenCaseDatabase(), ex); } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.java index ba1d1d31cf..c686bcad1c 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/OpenRecentCasePanel.java @@ -28,7 +28,9 @@ import javax.swing.SwingUtilities; import javax.swing.table.AbstractTableModel; import org.openide.util.NbBundle; import org.openide.windows.WindowManager; +import static org.sleuthkit.autopsy.casemodule.Bundle.*; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.ThreadConfined; /** * Panel used by the the open recent case option of the start window. @@ -93,9 +95,13 @@ class OpenRecentCasePanel extends javax.swing.JPanel { } } - /* + /** * Opens the selected case. */ + @NbBundle.Messages({"# {0} - case name", + "RecentItems.openRecentCase.msgDlg.text=Case {0} no longer exists.", + "CaseOpenAction.msgDlg.cantOpenCase.title=Error Opening Case"}) + @ThreadConfined(type = ThreadConfined.ThreadType.AWT) private void openCase() { if (casePaths.length < 1) { return; @@ -110,17 +116,17 @@ class OpenRecentCasePanel extends javax.swing.JPanel { logger.log(Level.SEVERE, "Error closing start up window", ex); //NON-NLS } - /* - * Open the case. - */ + // try to open the case. if (caseName.isEmpty() || caseMetadataFilePath.isEmpty() || (!new File(caseMetadataFilePath).exists())) { + //case doesn't exist JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), - NbBundle.getMessage(this.getClass(), "RecentItems.openRecentCase.msgDlg.text", caseName), - NbBundle.getMessage(this.getClass(), "CaseOpenAction.msgDlg.cantOpenCase.title"), + RecentItems_openRecentCase_msgDlg_text(caseName), + CaseOpenAction_msgDlg_cantOpenCase_title(), JOptionPane.ERROR_MESSAGE); RecentCases.getInstance().removeRecentCase(caseName, caseMetadataFilePath); // remove the recent case if it doesn't exist anymore StartupWindowProvider.getInstance().open(); } else { + //do actual opening on another thread new Thread(() -> { try { Case.openAsCurrentCase(caseMetadataFilePath); @@ -128,10 +134,10 @@ class OpenRecentCasePanel extends javax.swing.JPanel { SwingUtilities.invokeLater(() -> { if (!(ex instanceof CaseActionCancelledException)) { logger.log(Level.SEVERE, String.format("Error opening case with metadata file path %s", caseMetadataFilePath), ex); //NON-NLS - JOptionPane.showMessageDialog( - WindowManager.getDefault().getMainWindow(), - ex.getMessage(), - NbBundle.getMessage(OpenRecentCasePanel.this.getClass(), "CaseOpenAction.msgDlg.cantOpenCase.title"), //NON-NLS + + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), + ex.getLocalizedMessage(), + CaseOpenAction_msgDlg_cantOpenCase_title(), //NON-NLS JOptionPane.ERROR_MESSAGE); } StartupWindowProvider.getInstance().open(); diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Installer.java b/Core/src/org/sleuthkit/autopsy/corecomponents/Installer.java index 074e7f162e..56db31bccf 100755 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Installer.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Installer.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.TreeMap; import java.util.logging.Level; import javax.swing.BorderFactory; -import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UIManager.LookAndFeelInfo; import javax.swing.UnsupportedLookAndFeelException; @@ -33,9 +32,7 @@ import org.netbeans.spi.sendopts.OptionProcessor; import org.netbeans.swing.tabcontrol.plaf.DefaultTabbedContainerUI; import org.openide.modules.ModuleInstall; import org.openide.util.Lookup; -import org.openide.util.NbBundle; import org.openide.windows.WindowManager; -import org.sleuthkit.autopsy.actions.IngestRunningCheck; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.CaseActionException; import org.sleuthkit.autopsy.casemodule.CaseMetadata; @@ -88,6 +85,8 @@ public class Installer extends ModuleInstall { Case.openAsCurrentCase(caseFile); } catch (CaseActionException ex) { logger.log(Level.SEVERE, String.format("Error opening case with metadata file path %s", caseFile), ex); //NON-NLS + + //TODO: notify user! } return; } From 88d460dd5f177ae83d9d04809476ca8660264ad3 Mon Sep 17 00:00:00 2001 From: millmanorama Date: Fri, 15 Sep 2017 16:00:08 +0200 Subject: [PATCH 2/4] adjust message generation for new DBSchemaVersion --- .../org/sleuthkit/autopsy/casemodule/Case.java | 16 +++++++--------- .../autopsy/corecomponents/Installer.java | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 5dd8a0db8f..ce5c5ac416 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -1792,12 +1792,11 @@ public class Case { @Messages({ "Case.progressMessage.openingCaseDatabase=Opening case database...", "Case.exceptionMessage.couldNotOpenCaseDatabase=Failed to open case database.", - "# {0} - unsupported major scheme version", - "# {1} - unsupported minor scheme version", - "# {2} - app name", - "# {3} - maximum supported major scheme version", - "Case.unsupportedSchemaVersionMessage=Unsupported DB schema version: {0}.{1}\n" - + "The highest supported DB schema version for this release of {2} is {3}.X", + "# {0} - unsupported version", + "# {1} - app name", + "# {2} - maximum supported major scheme version", + "Case.unsupportedSchemaVersionMessage=Unsupported DB schema version: {0}\n" + + "The highest supported DB schema version for this release of {1} is {2}.X", "Case.databaseConnectionInfo.error.msg=Error accessing database server connection info. See Tools -> Options -> Multi-user.", "Case.open.exception.multiUserCaseNotEnabled=Cannot open a multi-user case if multi-user cases are not enabled. " + "See Tools, Options, Multi-user." @@ -1820,10 +1819,9 @@ public class Case { } catch (TskUnsupportedSchemaVersionException ex) { throw new CaseActionException( Bundle.Case_unsupportedSchemaVersionMessage( - ex.getUnsupportedMajorVersion(), - ex.getUnsupportedMinorVersion(), + ex.getUnsupportedVersion().toString(), Version.getName(), - ex.getCurrentMajorVer()), + ex.getCurrentVersion().getMajor()), ex); } catch (TskCoreException ex) { throw new CaseActionException(Bundle.Case_exceptionMessage_couldNotOpenCaseDatabase(), ex); diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Installer.java b/Core/src/org/sleuthkit/autopsy/corecomponents/Installer.java index 56db31bccf..948b54ad07 100755 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Installer.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Installer.java @@ -86,7 +86,7 @@ public class Installer extends ModuleInstall { } catch (CaseActionException ex) { logger.log(Level.SEVERE, String.format("Error opening case with metadata file path %s", caseFile), ex); //NON-NLS - //TODO: notify user! + //JIRA-3035: notify user! } return; } From 1e6c449eaa1f8b3817e4c413eecc890609767176 Mon Sep 17 00:00:00 2001 From: millmanorama Date: Mon, 18 Sep 2017 16:59:19 +0200 Subject: [PATCH 3/4] show more generic message --- Core/src/org/sleuthkit/autopsy/casemodule/Case.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index ce5c5ac416..b0dcd8b61a 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -1792,11 +1792,7 @@ public class Case { @Messages({ "Case.progressMessage.openingCaseDatabase=Opening case database...", "Case.exceptionMessage.couldNotOpenCaseDatabase=Failed to open case database.", - "# {0} - unsupported version", - "# {1} - app name", - "# {2} - maximum supported major scheme version", - "Case.unsupportedSchemaVersionMessage=Unsupported DB schema version: {0}\n" - + "The highest supported DB schema version for this release of {1} is {2}.X", + "Case.unsupportedSchemaVersionMessage=Unsupported DB schema version - see log for details", "Case.databaseConnectionInfo.error.msg=Error accessing database server connection info. See Tools -> Options -> Multi-user.", "Case.open.exception.multiUserCaseNotEnabled=Cannot open a multi-user case if multi-user cases are not enabled. " + "See Tools, Options, Multi-user." @@ -1817,12 +1813,7 @@ public class Case { throw new CaseActionException(Case_open_exception_multiUserCaseNotEnabled()); } } catch (TskUnsupportedSchemaVersionException ex) { - throw new CaseActionException( - Bundle.Case_unsupportedSchemaVersionMessage( - ex.getUnsupportedVersion().toString(), - Version.getName(), - ex.getCurrentVersion().getMajor()), - ex); + throw new CaseActionException(Bundle.Case_unsupportedSchemaVersionMessage(), ex); } catch (TskCoreException ex) { throw new CaseActionException(Bundle.Case_exceptionMessage_couldNotOpenCaseDatabase(), ex); } From a94e09b1e5e4f02f9e0430b6ac99dcc940a6e622 Mon Sep 17 00:00:00 2001 From: millmanorama Date: Mon, 18 Sep 2017 17:02:01 +0200 Subject: [PATCH 4/4] adjust bundle string --- Core/src/org/sleuthkit/autopsy/casemodule/Case.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index b0dcd8b61a..846af747ac 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -1793,7 +1793,7 @@ public class Case { "Case.progressMessage.openingCaseDatabase=Opening case database...", "Case.exceptionMessage.couldNotOpenCaseDatabase=Failed to open case database.", "Case.unsupportedSchemaVersionMessage=Unsupported DB schema version - see log for details", - "Case.databaseConnectionInfo.error.msg=Error accessing database server connection info. See Tools -> Options -> Multi-user.", + "Case.databaseConnectionInfo.error.msg=Error accessing database server connection info. See Tools, Options, Multi-User.", "Case.open.exception.multiUserCaseNotEnabled=Cannot open a multi-user case if multi-user cases are not enabled. " + "See Tools, Options, Multi-user." })