mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 02:07:42 +00:00
refactoring in EamDbSettingsDialog
This commit is contained in:
parent
7dcaa72f78
commit
79fda84050
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -133,7 +133,7 @@
|
||||
<Component id="lbUserName" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="lbPort" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
<Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0">
|
||||
<Component id="lbDatabaseDesc" alignment="0" max="32767" attributes="0"/>
|
||||
<Component id="lbDatabaseDesc" alignment="0" pref="94" max="32767" attributes="0"/>
|
||||
<Component id="lbUserPassword" alignment="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
@ -410,4 +410,4 @@
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
</Form>
|
||||
|
@ -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<JTextField> 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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user