diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CentralRepoDbUtil.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CentralRepoDbUtil.java
index 4ba8ac579e..4cf0d8af67 100644
--- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CentralRepoDbUtil.java
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/CentralRepoDbUtil.java
@@ -31,6 +31,7 @@ import org.sleuthkit.autopsy.coordinationservice.CoordinationService.Coordinatio
import org.sleuthkit.autopsy.coreutils.Logger;
import org.sleuthkit.autopsy.coreutils.ModuleSettings;
import static org.sleuthkit.autopsy.centralrepository.datamodel.RdbmsCentralRepo.SOFTWARE_CR_DB_SCHEMA_VERSION;
+import org.sleuthkit.autopsy.centralrepository.optionspanel.EamDbSettingsDialog;
/**
*
@@ -177,8 +178,11 @@ public class CentralRepoDbUtil {
"EamDbUtil.exclusiveLockAquisitionFailure.message=Unable to acquire exclusive lock for Central Repository."})
public static void upgradeDatabase() throws CentralRepoException {
if (!CentralRepository.isEnabled()) {
- return;
+ EamDbSettingsDialog dialog = new EamDbSettingsDialog();
+ dialog.
+ promptUserForSetup();
}
+
CentralRepository db = null;
CoordinationService.Lock lock = null;
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoDbManager.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoDbManager.java
new file mode 100755
index 0000000000..bd1d52b1f0
--- /dev/null
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoDbManager.java
@@ -0,0 +1,351 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.sleuthkit.autopsy.centralrepository.optionspanel;
+
+import java.awt.Cursor;
+import java.io.File;
+import java.util.logging.Level;
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+import org.openide.util.NbBundle;
+import org.openide.windows.WindowManager;
+import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException;
+import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoPlatforms;
+import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
+import org.sleuthkit.autopsy.centralrepository.datamodel.PostgresCentralRepoSettings;
+import org.sleuthkit.autopsy.centralrepository.datamodel.SqliteCentralRepoSettings;
+import org.sleuthkit.autopsy.centralrepository.optionspanel.DatabaseTestResult;
+import org.sleuthkit.autopsy.coreutils.Logger;
+
+
+public class CentralRepoDbManager {
+ private static final String CENTRAL_REPO_DB_NAME = "central_repository";
+ private static final String CENTRAL_REPO_SQLITE_EXT = ".db";
+
+ private static final Logger logger = Logger.getLogger(CentralRepoDbManager.class.getName());
+
+ private DatabaseTestResult testingStatus;
+ private CentralRepoPlatforms selectedPlatform;
+
+ private PostgresCentralRepoSettings dbSettingsPostgres;
+ private SqliteCentralRepoSettings dbSettingsSqlite;
+
+ private boolean configurationChanged = false;
+
+
+ public CentralRepoDbManager() {
+ dbSettingsPostgres = new PostgresCentralRepoSettings();
+ dbSettingsSqlite = new SqliteCentralRepoSettings();
+ selectedPlatform = CentralRepoPlatforms.getSelectedPlatform();
+ if (selectedPlatform == null || selectedPlatform.equals(CentralRepoPlatforms.DISABLED)) {
+ selectedPlatform = CentralRepoPlatforms.POSTGRESQL;
+ }
+ }
+
+ /**
+ * prompts user based on testing status (i.e. failure to connect, invalid schema, db does not exist, etc.)
+ * @param warnDoesNotExist whether or not to prompt the user should the database not exist (otherwise silently create the db)
+ * @return whether or not the ultimate status after prompts is okay to continue
+ */
+ @NbBundle.Messages({"EamDbSettingsDialog.okButton.corruptDatabaseExists.title=Error Loading Database",
+ "EamDbSettingsDialog.okButton.corruptDatabaseExists.message=Database exists but is not the right format. Manually delete it or choose a different path (if applicable).",
+ "EamDbSettingsDialog.okButton.createDbDialog.title=Database Does Not Exist",
+ "EamDbSettingsDialog.okButton.createDbDialog.message=Database does not exist, would you like to create it?",
+ "EamDbSettingsDialog.okButton.databaseConnectionFailed.title=Database Connection Failed",
+ "EamDbSettingsDialog.okButton.databaseConnectionFailed.message=Unable to connect to database please check your settings and try again."})
+ private boolean promptTestStatusWarnings(boolean warnDoesNotExist) {
+ if (testingStatus == DatabaseTestResult.CONNECTION_FAILED) {
+ JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
+ Bundle.EamDbSettingsDialog_okButton_databaseConnectionFailed_message(),
+ Bundle.EamDbSettingsDialog_okButton_databaseConnectionFailed_title(),
+ JOptionPane.WARNING_MESSAGE);
+ } else if (testingStatus == DatabaseTestResult.SCHEMA_INVALID) {
+ // There's an existing database or file, but it's not in our format.
+ JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
+ Bundle.EamDbSettingsDialog_okButton_corruptDatabaseExists_message(),
+ Bundle.EamDbSettingsDialog_okButton_corruptDatabaseExists_title(),
+ JOptionPane.WARNING_MESSAGE);
+ } else if (testingStatus == DatabaseTestResult.DB_DOES_NOT_EXIST) {
+ //database doesn't exist do you want to create
+ boolean createDb = (!warnDoesNotExist ||
+ JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(WindowManager.getDefault().getMainWindow(),
+ Bundle.EamDbSettingsDialog_okButton_createDbDialog_message(),
+ Bundle.EamDbSettingsDialog_okButton_createDbDialog_title(),
+ JOptionPane.YES_NO_OPTION));
+
+ if (createDb)
+ createDb();
+ }
+
+ return (testingStatus == DatabaseTestResult.TESTEDOK);
+ }
+
+
+
+
+
+
+ @NbBundle.Messages({"EamDbSettingsDialog.okButton.createDbError.title=Unable to Create Database",
+ "EamDbSettingsDialog.okButton.createSQLiteDbError.message=Unable to create SQLite Database, please ensure location exists and you have write permissions and try again.",
+ "EamDbSettingsDialog.okButton.createPostgresDbError.message=Unable to create Postgres Database, please ensure address, port, and login credentials are correct for Postgres server and try again."})
+ private boolean createDb() {
+ boolean result = false;
+ boolean dbCreated = true;
+ switch (selectedPlatform) {
+ case POSTGRESQL:
+ if (!dbSettingsPostgres.verifyDatabaseExists()) {
+ dbCreated = dbSettingsPostgres.createDatabase();
+ }
+ if (dbCreated) {
+ result = dbSettingsPostgres.initializeDatabaseSchema()
+ && dbSettingsPostgres.insertDefaultDatabaseContent();
+ }
+ if (!result) {
+ // Remove the incomplete database
+ if (dbCreated) {
+ dbSettingsPostgres.deleteDatabase();
+ }
+
+ JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
+ Bundle.EamDbSettingsDialog_okButton_createPostgresDbError_message(),
+ Bundle.EamDbSettingsDialog_okButton_createDbError_title(),
+ JOptionPane.WARNING_MESSAGE);
+ logger.severe("Unable to initialize database schema or insert contents into central repository.");
+ return false;
+ }
+ break;
+ case SQLITE:
+ if (!dbSettingsSqlite.dbDirectoryExists()) {
+ dbCreated = dbSettingsSqlite.createDbDirectory();
+ }
+ if (dbCreated) {
+ result = dbSettingsSqlite.initializeDatabaseSchema()
+ && dbSettingsSqlite.insertDefaultDatabaseContent();
+ }
+ if (!result) {
+ if (dbCreated) {
+ dbSettingsSqlite.deleteDatabase();
+ }
+
+ JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
+ Bundle.EamDbSettingsDialog_okButton_createSQLiteDbError_message(),
+ Bundle.EamDbSettingsDialog_okButton_createDbError_title(),
+ JOptionPane.WARNING_MESSAGE);
+ logger.severe("Unable to initialize database schema or insert contents into central repository.");
+ return false;
+ }
+ break;
+ }
+ testingStatus = DatabaseTestResult.TESTEDOK;
+ return true;
+ }
+
+
+ /**
+ * saves a new central repository based on current settings
+ */
+ @NbBundle.Messages({"EamDbSettingsDialog.okButton.errorTitle.text=Restart Required.",
+ "EamDbSettingsDialog.okButton.errorMsg.text=Please restart Autopsy to begin using the new database platform.",
+ "EamDbSettingsDialog.okButton.connectionErrorMsg.text=Failed to connect to central repository database."})
+ private void saveNewCentralRepo() {
+ /**
+ * We have to shutdown the previous platform's connection pool first;
+ * assuming it wasn't DISABLED. This will close any existing idle
+ * connections.
+ *
+ * The next use of an EamDb API method will start a new connection pool
+ * using those new settings.
+ */
+ try {
+ CentralRepository previousDbManager = CentralRepository.getInstance();
+ if (null != previousDbManager) {
+ // NOTE: do not set/save the seleted platform before calling this.
+ CentralRepository.getInstance().shutdownConnections();
+ }
+ } catch (CentralRepoException ex) {
+ logger.log(Level.SEVERE, "Failed to close database connections in previously selected platform.", ex); // NON-NLS
+ SwingUtilities.invokeLater(() -> {
+ JOptionPane.showMessageDialog(this,
+ Bundle.EamDbSettingsDialog_okButton_errorMsg_text(),
+ Bundle.EamDbSettingsDialog_okButton_errorTitle_text(),
+ JOptionPane.WARNING_MESSAGE);
+ });
+ }
+
+ // Even if we fail to close the existing connections, make sure that we
+ // save the new connection settings, so an Autopsy restart will correctly
+ // start with the new settings.
+ CentralRepoPlatforms.setSelectedPlatform(selectedPlatform.name());
+ CentralRepoPlatforms.saveSelectedPlatform();
+
+ switch (selectedPlatform) {
+ case POSTGRESQL:
+ // save the new PostgreSQL settings
+ dbSettingsPostgres.saveSettings();
+ // Load those newly saved settings into the postgres db manager instance
+ // in case we are still using the same instance.
+ try {
+ CentralRepository.getInstance().updateSettings();
+ configurationChanged = true;
+ } catch (CentralRepoException ex) {
+ logger.log(Level.SEVERE, Bundle.EamDbSettingsDialog_okButton_connectionErrorMsg_text(), ex); //NON-NLS
+ setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+ return;
+ }
+
+ break;
+ case SQLITE:
+ // save the new SQLite settings
+ dbSettingsSqlite.saveSettings();
+ // Load those newly saved settings into the sqlite db manager instance
+ // in case we are still using the same instance.
+ try {
+ CentralRepository.getInstance().updateSettings();
+ configurationChanged = true;
+ } catch (CentralRepoException ex) {
+ logger.log(Level.SEVERE, Bundle.EamDbSettingsDialog_okButton_connectionErrorMsg_text(), ex); //NON-NLS
+ setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+ return;
+ }
+ break;
+ case DISABLED:
+ break;
+ }
+ }
+
+
+ static class DatabaseSettingsValidResult {
+ private final String errorMessage;
+ private final boolean success;
+
+ public DatabaseSettingsValidResult(String errorMessage, boolean success) {
+ this.errorMessage = errorMessage;
+ this.success = success;
+ }
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+ }
+
+
+ /**
+ * Tests whether or not the database settings are valid.
+ *
+ * @return True or false.
+ */
+ private DatabaseSettingsValidResult databaseSettingsAreValid(
+ String tbDbHostname, Integer tbDbPort, String tbDbUsername, String tfDatabasePath, String jpDbPassword) {
+
+ boolean result = true;
+ StringBuilder guidanceText = new StringBuilder();
+
+ switch (selectedPlatform) {
+ case POSTGRESQL:
+ try {
+ dbSettingsPostgres.setHost(tbDbHostname);
+ } catch (CentralRepoException ex) {
+ guidanceText.append(ex.getMessage());
+ result = false;
+ }
+
+ try {
+ dbSettingsPostgres.setPort(tbDbPort);
+ } catch (NumberFormatException | CentralRepoException ex) {
+ guidanceText.append(ex.getMessage());
+ result = false;
+ }
+
+ try {
+ dbSettingsPostgres.setDbName(CENTRAL_REPO_DB_NAME);
+ } catch (CentralRepoException ex) {
+ guidanceText.append(ex.getMessage());
+ result = false;
+ }
+
+ try {
+ dbSettingsPostgres.setUserName(tbDbUsername);
+ } catch (CentralRepoException ex) {
+ guidanceText.append(ex.getMessage());
+ result = false;
+ }
+
+ try {
+ dbSettingsPostgres.setPassword(jpDbPassword);
+ } catch (CentralRepoException ex) {
+ guidanceText.append(ex.getMessage());
+ result = false;
+ }
+ break;
+ case SQLITE:
+ try {
+ File databasePath = new File(tfDatabasePath);
+ dbSettingsSqlite.setDbName(CENTRAL_REPO_DB_NAME + CENTRAL_REPO_SQLITE_EXT);
+ dbSettingsSqlite.setDbDirectory(databasePath.getPath());
+ } catch (CentralRepoException ex) {
+ guidanceText.append(ex.getMessage());
+ result = false;
+ }
+ break;
+ }
+
+ return new DatabaseSettingsValidResult(guidanceText.toString(), result);
+ }
+
+
+ private DatabaseTestResult testDbSettings() {
+ switch (selectedPlatform) {
+ case POSTGRESQL:
+ if (dbSettingsPostgres.verifyConnection()) {
+ if (dbSettingsPostgres.verifyDatabaseExists()) {
+ if (dbSettingsPostgres.verifyDatabaseSchema()) {
+ testingStatus = DatabaseTestResult.TESTEDOK;
+ } else {
+ testingStatus = DatabaseTestResult.SCHEMA_INVALID;
+ }
+ } else {
+ testingStatus = DatabaseTestResult.DB_DOES_NOT_EXIST;
+ }
+ } else {
+ testingStatus = DatabaseTestResult.CONNECTION_FAILED;
+ }
+ break;
+ case SQLITE:
+ if (dbSettingsSqlite.dbFileExists()) {
+ if (dbSettingsSqlite.verifyConnection()) {
+ if (dbSettingsSqlite.verifyDatabaseSchema()) {
+ testingStatus = DatabaseTestResult.TESTEDOK;
+ } else {
+ testingStatus = DatabaseTestResult.SCHEMA_INVALID;
+ }
+ } else {
+ testingStatus = DatabaseTestResult.SCHEMA_INVALID;
+ }
+ } else {
+ testingStatus = DatabaseTestResult.DB_DOES_NOT_EXIST;
+ }
+ break;
+ }
+
+ return testingStatus;
+ }
+
+
+ /**
+ * Returns if changes to the central repository configuration were
+ * successfully applied
+ *
+ * @return true if the database configuration was successfully changed false
+ * if it was not
+ */
+ boolean wasConfigurationChanged() {
+ return configurationChanged;
+ }
+}
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.form b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.form
index 0f39326bec..27eae7629c 100644
--- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.form
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.form
@@ -133,7 +133,7 @@
-
+
@@ -410,4 +410,4 @@
-
\ No newline at end of file
+
diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.java
index 271a8a4f04..4bd17b561e 100644
--- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.java
+++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.java
@@ -45,6 +45,7 @@ import static org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoPlatf
import org.sleuthkit.autopsy.centralrepository.datamodel.PostgresCentralRepoSettings;
import org.sleuthkit.autopsy.centralrepository.datamodel.SqliteCentralRepoSettings;
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
+import org.sleuthkit.autopsy.centralrepository.optionspanel.DatabaseTestResult;
/**
* Configuration dialog for Central Repository database settings.
@@ -53,17 +54,15 @@ import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
public class EamDbSettingsDialog extends JDialog {
private static final Logger logger = Logger.getLogger(EamDbSettingsDialog.class.getName());
- private static final String CENTRAL_REPO_DB_NAME = "central_repository";
- private static final String CENTRAL_REPO_SQLITE_EXT = ".db";
+
private static final long serialVersionUID = 1L;
private final Collection textBoxes;
private final TextBoxChangedListener textBoxChangedListener;
- private final PostgresCentralRepoSettings dbSettingsPostgres;
- private final SqliteCentralRepoSettings dbSettingsSqlite;
- private DatabaseTestResult testingStatus;
- private CentralRepoPlatforms selectedPlatform;
- private boolean configurationChanged = false;
+
+
+
+
/**
* Creates new form EamDbSettingsDialog
@@ -80,12 +79,6 @@ public class EamDbSettingsDialog extends JDialog {
textBoxes = new ArrayList<>();
textBoxChangedListener = new TextBoxChangedListener();
- dbSettingsPostgres = new PostgresCentralRepoSettings();
- dbSettingsSqlite = new SqliteCentralRepoSettings();
- selectedPlatform = CentralRepoPlatforms.getSelectedPlatform();
- if (selectedPlatform == null || selectedPlatform.equals(CentralRepoPlatforms.DISABLED)) {
- selectedPlatform = CentralRepoPlatforms.POSTGRESQL;
- }
initComponents();
fcDatabasePath.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
@@ -398,215 +391,27 @@ public class EamDbSettingsDialog extends JDialog {
}
}//GEN-LAST:event_bnDatabasePathFileOpenActionPerformed
- private void testDbSettings() {
- switch (selectedPlatform) {
- case POSTGRESQL:
- if (dbSettingsPostgres.verifyConnection()) {
- if (dbSettingsPostgres.verifyDatabaseExists()) {
- if (dbSettingsPostgres.verifyDatabaseSchema()) {
- testingStatus = DatabaseTestResult.TESTEDOK;
- } else {
- testingStatus = DatabaseTestResult.SCHEMA_INVALID;
- }
- } else {
- testingStatus = DatabaseTestResult.DB_DOES_NOT_EXIST;
- }
- } else {
- testingStatus = DatabaseTestResult.CONNECTION_FAILED;
- }
- break;
- case SQLITE:
- if (dbSettingsSqlite.dbFileExists()) {
- if (dbSettingsSqlite.verifyConnection()) {
- if (dbSettingsSqlite.verifyDatabaseSchema()) {
- testingStatus = DatabaseTestResult.TESTEDOK;
- } else {
- testingStatus = DatabaseTestResult.SCHEMA_INVALID;
- }
- } else {
- testingStatus = DatabaseTestResult.SCHEMA_INVALID;
- }
- } else {
- testingStatus = DatabaseTestResult.DB_DOES_NOT_EXIST;
- }
- break;
- }
- valid();
- }
- @Messages({"EamDbSettingsDialog.okButton.createDbError.title=Unable to Create Database",
- "EamDbSettingsDialog.okButton.createSQLiteDbError.message=Unable to create SQLite Database, please ensure location exists and you have write permissions and try again.",
- "EamDbSettingsDialog.okButton.createPostgresDbError.message=Unable to create Postgres Database, please ensure address, port, and login credentials are correct for Postgres server and try again."})
- private void createDb() {
- boolean result = false;
- boolean dbCreated = true;
- switch (selectedPlatform) {
- case POSTGRESQL:
- if (!dbSettingsPostgres.verifyDatabaseExists()) {
- dbCreated = dbSettingsPostgres.createDatabase();
- }
- if (dbCreated) {
- result = dbSettingsPostgres.initializeDatabaseSchema()
- && dbSettingsPostgres.insertDefaultDatabaseContent();
- }
- if (!result) {
- // Remove the incomplete database
- if (dbCreated) {
- dbSettingsPostgres.deleteDatabase();
- }
- JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
- Bundle.EamDbSettingsDialog_okButton_createPostgresDbError_message(),
- Bundle.EamDbSettingsDialog_okButton_createDbError_title(),
- JOptionPane.WARNING_MESSAGE);
- logger.severe("Unable to initialize database schema or insert contents into central repository.");
- return;
- }
- break;
- case SQLITE:
- if (!dbSettingsSqlite.dbDirectoryExists()) {
- dbCreated = dbSettingsSqlite.createDbDirectory();
- }
- if (dbCreated) {
- result = dbSettingsSqlite.initializeDatabaseSchema()
- && dbSettingsSqlite.insertDefaultDatabaseContent();
- }
- if (!result) {
- if (dbCreated) {
- dbSettingsSqlite.deleteDatabase();
- }
-
- JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
- Bundle.EamDbSettingsDialog_okButton_createSQLiteDbError_message(),
- Bundle.EamDbSettingsDialog_okButton_createDbError_title(),
- JOptionPane.WARNING_MESSAGE);
- logger.severe("Unable to initialize database schema or insert contents into central repository.");
- return;
- }
- break;
- }
- testingStatus = DatabaseTestResult.TESTEDOK;
- valid();
- }
-
- /**
- * Returns if changes to the central repository configuration were
- * successfully applied
- *
- * @return true if the database configuration was successfully changed false
- * if it was not
- */
- boolean wasConfigurationChanged() {
- return configurationChanged;
- }
-
- @Messages({"EamDbSettingsDialog.okButton.errorTitle.text=Restart Required.",
- "EamDbSettingsDialog.okButton.errorMsg.text=Please restart Autopsy to begin using the new database platform.",
- "EamDbSettingsDialog.okButton.connectionErrorMsg.text=Failed to connect to central repository database.",
- "EamDbSettingsDialog.okButton.corruptDatabaseExists.title=Error Loading Database",
- "EamDbSettingsDialog.okButton.corruptDatabaseExists.message=Database exists but is not the right format. Manually delete it or choose a different path (if applicable).",
- "EamDbSettingsDialog.okButton.createDbDialog.title=Database Does Not Exist",
- "EamDbSettingsDialog.okButton.createDbDialog.message=Database does not exist, would you like to create it?",
- "EamDbSettingsDialog.okButton.databaseConnectionFailed.title=Database Connection Failed",
- "EamDbSettingsDialog.okButton.databaseConnectionFailed.message=Unable to connect to database please check your settings and try again."})
private void bnOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnOkActionPerformed
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
testDbSettings();
- if (testingStatus == DatabaseTestResult.CONNECTION_FAILED) {
- JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
- Bundle.EamDbSettingsDialog_okButton_databaseConnectionFailed_message(),
- Bundle.EamDbSettingsDialog_okButton_databaseConnectionFailed_title(),
- JOptionPane.WARNING_MESSAGE);
- } else if (testingStatus == DatabaseTestResult.SCHEMA_INVALID) {
- // There's an existing database or file, but it's not in our format.
- JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(),
- Bundle.EamDbSettingsDialog_okButton_corruptDatabaseExists_message(),
- Bundle.EamDbSettingsDialog_okButton_corruptDatabaseExists_title(),
- JOptionPane.WARNING_MESSAGE);
- } else if (testingStatus == DatabaseTestResult.DB_DOES_NOT_EXIST) {
- //database doesn't exist do you want to create
- if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(WindowManager.getDefault().getMainWindow(),
- Bundle.EamDbSettingsDialog_okButton_createDbDialog_message(),
- Bundle.EamDbSettingsDialog_okButton_createDbDialog_title(),
- JOptionPane.YES_NO_OPTION)) {
- createDb();
- }
- }
- if (testingStatus != DatabaseTestResult.TESTEDOK) {
+ boolean testedOk = promptTestStatusWarnings(true);
+ if (!testedOk) {
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
return;
}
-
- /**
- * We have to shutdown the previous platform's connection pool first;
- * assuming it wasn't DISABLED. This will close any existing idle
- * connections.
- *
- * The next use of an EamDb API method will start a new connection pool
- * using those new settings.
- */
- try {
- CentralRepository previousDbManager = CentralRepository.getInstance();
- if (null != previousDbManager) {
- // NOTE: do not set/save the seleted platform before calling this.
- CentralRepository.getInstance().shutdownConnections();
- }
- } catch (CentralRepoException ex) {
- logger.log(Level.SEVERE, "Failed to close database connections in previously selected platform.", ex); // NON-NLS
- SwingUtilities.invokeLater(() -> {
- JOptionPane.showMessageDialog(this,
- Bundle.EamDbSettingsDialog_okButton_errorMsg_text(),
- Bundle.EamDbSettingsDialog_okButton_errorTitle_text(),
- JOptionPane.WARNING_MESSAGE);
- });
- }
-
- // Even if we fail to close the existing connections, make sure that we
- // save the new connection settings, so an Autopsy restart will correctly
- // start with the new settings.
- CentralRepoPlatforms.setSelectedPlatform(selectedPlatform.name());
- CentralRepoPlatforms.saveSelectedPlatform();
-
- switch (selectedPlatform) {
- case POSTGRESQL:
- // save the new PostgreSQL settings
- dbSettingsPostgres.saveSettings();
- // Load those newly saved settings into the postgres db manager instance
- // in case we are still using the same instance.
- try {
- CentralRepository.getInstance().updateSettings();
- configurationChanged = true;
- } catch (CentralRepoException ex) {
- logger.log(Level.SEVERE, Bundle.EamDbSettingsDialog_okButton_connectionErrorMsg_text(), ex); //NON-NLS
- setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
- return;
- }
-
- break;
- case SQLITE:
- // save the new SQLite settings
- dbSettingsSqlite.saveSettings();
- // Load those newly saved settings into the sqlite db manager instance
- // in case we are still using the same instance.
- try {
- CentralRepository.getInstance().updateSettings();
- configurationChanged = true;
- } catch (CentralRepoException ex) {
- logger.log(Level.SEVERE, Bundle.EamDbSettingsDialog_okButton_connectionErrorMsg_text(), ex); //NON-NLS
- setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
- return;
- }
- break;
- case DISABLED:
- break;
- }
+
+ saveNewCentralRepo();
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
dispose();
}//GEN-LAST:event_bnOkActionPerformed
+
+
private void bnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnCancelActionPerformed
dispose();
}//GEN-LAST:event_bnCancelActionPerformed
@@ -757,6 +562,35 @@ public class EamDbSettingsDialog extends JDialog {
&& databaseSettingsAreValid();
}
+
+ /**
+ * Validates that the form is filled out correctly for our usage.
+ *
+ * @return true if it's okay, false otherwise.
+ */
+ private boolean valid() {
+ return enableOkButton(checkFields());
+ }
+
+ /**
+ * Enable the "OK" button if the db test passed. Disabled defaults to db
+ * test passed.
+ *
+ * @return true
+ */
+ @Messages({"EamDbSettingsDialog.validation.finished=Click OK to save your database settings and return to the Options. Or select a different database type."})
+ private boolean enableOkButton(boolean isValidInput) {
+ if (isValidInput) {
+ bnOk.setEnabled(true);
+ } else {
+ bnOk.setEnabled(false);
+ }
+ return true;
+
+ }
+
+
+
/**
* Tests whether or not the database settings are valid.
*
@@ -818,32 +652,6 @@ public class EamDbSettingsDialog extends JDialog {
return result;
}
- /**
- * Validates that the form is filled out correctly for our usage.
- *
- * @return true if it's okay, false otherwise.
- */
- private boolean valid() {
- return enableOkButton(checkFields());
- }
-
- /**
- * Enable the "OK" button if the db test passed. Disabled defaults to db
- * test passed.
- *
- * @return true
- */
- @Messages({"EamDbSettingsDialog.validation.finished=Click OK to save your database settings and return to the Options. Or select a different database type."})
- private boolean enableOkButton(boolean isValidInput) {
- if (isValidInput) {
- bnOk.setEnabled(true);
- } else {
- bnOk.setEnabled(false);
- }
- return true;
-
- }
-
/**
* Used to listen for changes in text boxes. It lets the panel know things
* have been updated and that validation needs to happen.
@@ -876,13 +684,6 @@ public class EamDbSettingsDialog extends JDialog {
}
}
- private enum DatabaseTestResult {
- UNTESTED,
- CONNECTION_FAILED,
- SCHEMA_INVALID,
- DB_DOES_NOT_EXIST,
- TESTEDOK;
- }
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton bnCancel;