From c6c5acba0fb58e4f045f9a1232f328e18cf5bae3 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 11 Aug 2017 13:58:16 -0400 Subject: [PATCH] 2934 changes to Central Repo Options panel and config dialog --- .../optionspanel/Bundle.properties | 15 +- .../optionspanel/EamDbSettingsDialog.form | 549 +++++--------- .../optionspanel/EamDbSettingsDialog.java | 697 +++++++----------- .../optionspanel/GlobalSettingsPanel.form | 19 +- .../optionspanel/GlobalSettingsPanel.java | 46 +- 5 files changed, 503 insertions(+), 823 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties index 22a0ed7a5c..f05ff2b915 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties @@ -13,7 +13,7 @@ EamSqliteSettingsDialog.bnCancel.text=Cancel EamSqliteSettingsDialog.lbTestDatabase.text= EamSqliteSettingsDialog.bnTestDatabase.text=Test Connection EamSqliteSettingsDialog.lbTestDatabaseWarning.text= -EamSqliteSettingsDialog.bnDatabasePathFileOpen.text=Open... +EamSqliteSettingsDialog.bnDatabasePathFileOpen.text=Browse... EamSqliteSettingsDialog.tfDatabasePath.toolTipText=Filename and path to store SQLite db file EamSqliteSettingsDialog.tfDatabasePath.text= EamSqliteSettingsDialog.lbDatabasePath.text=Database Path : @@ -52,24 +52,16 @@ ManageTagsDialog.cancelButton.text=Cancel ManageArtifactTypesDialog.taInstructionsMsg.text=Enable one or more correlation properties to use for correlation during ingest. Note, these properties are global and impact all users of the central repository. EamSqliteSettingsDialog.bnOk.text=OK EamPostgresSettingsDialog.bnSave.text=Save -EamDbSettingsDialog.pnDatabaseConnectionSettings.border.title=Database Settings -EamDbSettingsDialog.rdioBnPostgreSQL.text=PostgreSQL -EamDbSettingsDialog.rdioBnSQLite.text=SQLite -EamDbSettingsDialog.bnDatabasePathFileOpen.text=Open... +EamDbSettingsDialog.bnDatabasePathFileOpen.text=Browse... EamDbSettingsDialog.tfDatabasePath.toolTipText=Filename and path to store SQLite db file EamDbSettingsDialog.tfDatabasePath.text= EamDbSettingsDialog.lbDatabasePath.text=Database Path : -EamDbSettingsDialog.rdioBnDisabled.text=Disabled EamDbSettingsDialog.bnCancel.text=Cancel EamDbSettingsDialog.bnOk.text=OK -EamDbSettingsDialog.bnTest.text=Test EamDbSettingsDialog.lbHostName.text=Host Name / IP : -EamDbSettingsDialog.lbDatabaseName.text=Database name : EamDbSettingsDialog.lbUserPassword.text=User Password : EamDbSettingsDialog.lbUserName.text=User Name : EamDbSettingsDialog.lbPort.text=Port : -EamDbSettingsDialog.bnCreateDb.text=Create -EamDbSettingsDialog.pnSetupGuidance.border.title=Setup Guidance GlobalSettingsPanel.pnDatabaseConfiguration.title=Database Configuration GlobalSettingsPanel.lbDbPlatformTypeLabel.text=Type: GlobalSettingsPanel.lbDbNameLabel.text=Name: @@ -82,3 +74,6 @@ GlobalSettingsPanel.bnManageProperties.text=Manage Correlation Properties ImportHashDatabaseDialog.lbInstructions.text=Choose an .idx file to import into the central repository. ImportHashDatabaseDialog.lbFilePath.text=File Path: ImportHashDatabaseDialog.tfFilePath.text= +EamDbSettingsDialog.jLabel1.text=SQLite should only be used by one examiner at a time. +EamDbSettingsDialog.jLabel2.text=Database type: +GlobalSettingsPanel.jCheckBox1.text=Use a Central Repository diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.form b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.form index 93bfa8f3fd..81eb19ce47 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.form +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.form @@ -29,12 +29,11 @@ - - - - - - + + + + + @@ -43,303 +42,22 @@ - - + + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -352,20 +70,11 @@ - - - - - - - - - - - - + + + - + @@ -391,40 +100,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + + @@ -434,55 +116,186 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.java index b3c282b607..81b4af2bd7 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamDbSettingsDialog.java @@ -25,6 +25,7 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.ImageUtilities; +import org.openide.util.NbBundle; import org.openide.util.NbBundle.Messages; import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb; @@ -32,6 +33,7 @@ import org.sleuthkit.autopsy.corecomponents.TextPrompt; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbPlatformEnum; +import static org.sleuthkit.autopsy.centralrepository.datamodel.EamDbPlatformEnum.SQLITE; import org.sleuthkit.autopsy.centralrepository.datamodel.PostgresEamDbSettings; import org.sleuthkit.autopsy.centralrepository.datamodel.SqliteEamDbSettings; @@ -40,7 +42,10 @@ import org.sleuthkit.autopsy.centralrepository.datamodel.SqliteEamDbSettings; * @author nick */ 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 final Collection textBoxes; private final TextBoxChangedListener textBoxChangedListener; private final ImageIcon goodIcon; @@ -57,22 +62,29 @@ public class EamDbSettingsDialog extends JDialog { @Messages({"EamDbSettingsDialog.title.text=Central Repository Database Configuration"}) public EamDbSettingsDialog() { super((JFrame) WindowManager.getDefault().getMainWindow(), - Bundle.EamDbSettingsDialog_title_text(), - true); // NON-NLS + Bundle.EamDbSettingsDialog_title_text(), + true); // NON-NLS textBoxes = new ArrayList<>(); textBoxChangedListener = new TextBoxChangedListener(); goodIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/good.png", false)); // NON-NLS badIcon = new ImageIcon(ImageUtilities.loadImage("org/sleuthkit/autopsy/images/bad.png", false)); // NON-NLS - dbSettingsPostgres = new PostgresEamDbSettings(); dbSettingsSqlite = new SqliteEamDbSettings(); selectedPlatform = EamDbPlatformEnum.getSelectedPlatform(); - + if (selectedPlatform == null || selectedPlatform.equals(EamDbPlatformEnum.DISABLED)) { + selectedPlatform = EamDbPlatformEnum.POSTGRESQL; + } else { + System.out.println("selectedPlatform = " + selectedPlatform); + } + initComponents(); + fcDatabasePath.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + jComboBox1.setSelectedItem(selectedPlatform); customizeComponents(); valid(); display(); + } /** @@ -86,40 +98,61 @@ public class EamDbSettingsDialog extends JDialog { bnGrpDatabasePlatforms = new javax.swing.ButtonGroup(); fcDatabasePath = new javax.swing.JFileChooser(); - pnDatabaseConnectionSettings = new javax.swing.JPanel(); + pnButtons = new javax.swing.JPanel(); + bnCancel = new javax.swing.JButton(); + bnOk = new javax.swing.JButton(); pnSQLiteSettings = new javax.swing.JPanel(); lbDatabasePath = new javax.swing.JLabel(); tfDatabasePath = new javax.swing.JTextField(); bnDatabasePathFileOpen = new javax.swing.JButton(); - pnPostgreSQLSettings = new javax.swing.JPanel(); lbHostName = new javax.swing.JLabel(); - lbPort = new javax.swing.JLabel(); - lbUserName = new javax.swing.JLabel(); - lbUserPassword = new javax.swing.JLabel(); - lbDatabaseName = new javax.swing.JLabel(); tbDbHostname = new javax.swing.JTextField(); + lbPort = new javax.swing.JLabel(); tbDbPort = new javax.swing.JTextField(); - tbDbName = new javax.swing.JTextField(); + lbUserName = new javax.swing.JLabel(); tbDbUsername = new javax.swing.JTextField(); + lbUserPassword = new javax.swing.JLabel(); jpDbPassword = new javax.swing.JPasswordField(); - rdioBnSQLite = new javax.swing.JRadioButton(); - rdioBnPostgreSQL = new javax.swing.JRadioButton(); - rdioBnDisabled = new javax.swing.JRadioButton(); - pnButtons = new javax.swing.JPanel(); - bnCancel = new javax.swing.JButton(); - bnOk = new javax.swing.JButton(); - bnTest = new javax.swing.JButton(); - bnCreateDb = new javax.swing.JButton(); - lbTestIcon = new javax.swing.JLabel(); - lbCreateIcon = new javax.swing.JLabel(); - pnSetupGuidance = new javax.swing.JPanel(); - jScrollPane1 = new javax.swing.JScrollPane(); - taSetupGuidance = new javax.swing.JTextArea(); + jComboBox1 = new javax.swing.JComboBox<>(); + jLabel1 = new javax.swing.JLabel(); + jLabel2 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); - pnDatabaseConnectionSettings.setBorder(javax.swing.BorderFactory.createTitledBorder(null, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.pnDatabaseConnectionSettings.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 12))); // NOI18N - pnDatabaseConnectionSettings.setName(""); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(bnCancel, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.bnCancel.text")); // NOI18N + bnCancel.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + bnCancelActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(bnOk, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.bnOk.text")); // NOI18N + bnOk.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + bnOkActionPerformed(evt); + } + }); + + javax.swing.GroupLayout pnButtonsLayout = new javax.swing.GroupLayout(pnButtons); + pnButtons.setLayout(pnButtonsLayout); + pnButtonsLayout.setHorizontalGroup( + pnButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnButtonsLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(bnOk) + .addGap(11, 11, 11) + .addComponent(bnCancel) + .addContainerGap()) + ); + pnButtonsLayout.setVerticalGroup( + pnButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnButtonsLayout.createSequentialGroup() + .addGap(0, 0, 0) + .addGroup(pnButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(bnOk) + .addComponent(bnCancel)) + .addGap(0, 0, 0)) + ); pnSQLiteSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder()); @@ -140,32 +173,6 @@ public class EamDbSettingsDialog extends JDialog { } }); - javax.swing.GroupLayout pnSQLiteSettingsLayout = new javax.swing.GroupLayout(pnSQLiteSettings); - pnSQLiteSettings.setLayout(pnSQLiteSettingsLayout); - pnSQLiteSettingsLayout.setHorizontalGroup( - pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnSQLiteSettingsLayout.createSequentialGroup() - .addContainerGap() - .addComponent(lbDatabasePath) - .addGap(18, 18, 18) - .addComponent(tfDatabasePath, javax.swing.GroupLayout.PREFERRED_SIZE, 343, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(bnDatabasePathFileOpen) - .addContainerGap()) - ); - pnSQLiteSettingsLayout.setVerticalGroup( - pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnSQLiteSettingsLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lbDatabasePath, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(tfDatabasePath, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(bnDatabasePathFileOpen)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - pnPostgreSQLSettings.setBorder(javax.swing.BorderFactory.createEtchedBorder()); - org.openide.awt.Mnemonics.setLocalizedText(lbHostName, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.lbHostName.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(lbPort, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.lbPort.text")); // NOI18N @@ -174,286 +181,151 @@ public class EamDbSettingsDialog extends JDialog { org.openide.awt.Mnemonics.setLocalizedText(lbUserPassword, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.lbUserPassword.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(lbDatabaseName, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.lbDatabaseName.text")); // NOI18N + jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new EamDbPlatformEnum[]{EamDbPlatformEnum.POSTGRESQL, EamDbPlatformEnum.SQLITE})); + jComboBox1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jComboBox1ActionPerformed(evt); + } + }); - javax.swing.GroupLayout pnPostgreSQLSettingsLayout = new javax.swing.GroupLayout(pnPostgreSQLSettings); - pnPostgreSQLSettings.setLayout(pnPostgreSQLSettingsLayout); - pnPostgreSQLSettingsLayout.setHorizontalGroup( - pnPostgreSQLSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnPostgreSQLSettingsLayout.createSequentialGroup() + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.jLabel1.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.jLabel2.text")); // NOI18N + + javax.swing.GroupLayout pnSQLiteSettingsLayout = new javax.swing.GroupLayout(pnSQLiteSettings); + pnSQLiteSettings.setLayout(pnSQLiteSettingsLayout); + pnSQLiteSettingsLayout.setHorizontalGroup( + pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnSQLiteSettingsLayout.createSequentialGroup() .addContainerGap() - .addGroup(pnPostgreSQLSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(lbHostName) - .addComponent(lbPort) - .addComponent(lbDatabaseName) - .addComponent(lbUserName) - .addComponent(lbUserPassword)) - .addGap(18, 18, 18) - .addGroup(pnPostgreSQLSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(tbDbUsername, javax.swing.GroupLayout.DEFAULT_SIZE, 439, Short.MAX_VALUE) - .addComponent(tbDbName) - .addComponent(tbDbPort) - .addComponent(tbDbHostname) - .addComponent(jpDbPassword)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnSQLiteSettingsLayout.createSequentialGroup() + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(lbHostName) + .addComponent(lbPort) + .addComponent(lbUserName) + .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(10, 10, 10)) + .addGroup(pnSQLiteSettingsLayout.createSequentialGroup() + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(lbDatabasePath) + .addComponent(lbUserPassword, javax.swing.GroupLayout.Alignment.TRAILING)) + .addGap(14, 14, 14))) + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnSQLiteSettingsLayout.createSequentialGroup() + .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 467, Short.MAX_VALUE) + .addGap(9, 9, 9)) + .addGroup(pnSQLiteSettingsLayout.createSequentialGroup() + .addComponent(tfDatabasePath) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(bnDatabasePathFileOpen) + .addGap(11, 11, 11)) + .addGroup(pnSQLiteSettingsLayout.createSequentialGroup() + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(tbDbHostname) + .addComponent(jpDbPassword) + .addComponent(tbDbUsername, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(tbDbPort)) + .addGap(10, 10, 10)))) ); - pnPostgreSQLSettingsLayout.setVerticalGroup( - pnPostgreSQLSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnPostgreSQLSettingsLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pnPostgreSQLSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + pnSQLiteSettingsLayout.setVerticalGroup( + pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnSQLiteSettingsLayout.createSequentialGroup() + .addGap(6, 6, 6) + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1)) + .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lbDatabasePath, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(tfDatabasePath, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(bnDatabasePathFileOpen)) + .addGap(0, 0, 0) + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(tbDbHostname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lbHostName, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pnPostgreSQLSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(tbDbPort) + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(tbDbPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lbPort, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pnPostgreSQLSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(tbDbName) - .addComponent(lbDatabaseName, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pnPostgreSQLSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(tbDbUsername) + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(tbDbUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lbUserName, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(pnPostgreSQLSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addGroup(pnSQLiteSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lbUserPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jpDbPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(19, Short.MAX_VALUE)) - ); - - org.openide.awt.Mnemonics.setLocalizedText(rdioBnSQLite, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.rdioBnSQLite.text")); // NOI18N - rdioBnSQLite.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - rdioBnSQLiteActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(rdioBnPostgreSQL, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.rdioBnPostgreSQL.text")); // NOI18N - rdioBnPostgreSQL.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - rdioBnPostgreSQLActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(rdioBnDisabled, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.rdioBnDisabled.text")); // NOI18N - rdioBnDisabled.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - rdioBnDisabledActionPerformed(evt); - } - }); - - javax.swing.GroupLayout pnDatabaseConnectionSettingsLayout = new javax.swing.GroupLayout(pnDatabaseConnectionSettings); - pnDatabaseConnectionSettings.setLayout(pnDatabaseConnectionSettingsLayout); - pnDatabaseConnectionSettingsLayout.setHorizontalGroup( - pnDatabaseConnectionSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnDatabaseConnectionSettingsLayout.createSequentialGroup() - .addComponent(rdioBnPostgreSQL) - .addGap(0, 0, Short.MAX_VALUE)) - .addGroup(pnDatabaseConnectionSettingsLayout.createSequentialGroup() - .addGroup(pnDatabaseConnectionSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rdioBnSQLite) - .addComponent(rdioBnDisabled)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGroup(pnDatabaseConnectionSettingsLayout.createSequentialGroup() - .addContainerGap() - .addGroup(pnDatabaseConnectionSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(pnSQLiteSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(pnPostgreSQLSettings, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - ); - pnDatabaseConnectionSettingsLayout.setVerticalGroup( - pnDatabaseConnectionSettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnDatabaseConnectionSettingsLayout.createSequentialGroup() - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(rdioBnDisabled) - .addGap(13, 13, 13) - .addComponent(rdioBnSQLite) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(pnSQLiteSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(12, 12, 12) - .addComponent(rdioBnPostgreSQL) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(pnPostgreSQLSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(329, 329, 329)) - ); - - org.openide.awt.Mnemonics.setLocalizedText(bnCancel, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.bnCancel.text")); // NOI18N - bnCancel.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - bnCancelActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(bnOk, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.bnOk.text")); // NOI18N - bnOk.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - bnOkActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(bnTest, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.bnTest.text")); // NOI18N - bnTest.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - bnTestActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(bnCreateDb, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.bnCreateDb.text")); // NOI18N - bnCreateDb.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - bnCreateDbActionPerformed(evt); - } - }); - - javax.swing.GroupLayout pnButtonsLayout = new javax.swing.GroupLayout(pnButtons); - pnButtons.setLayout(pnButtonsLayout); - pnButtonsLayout.setHorizontalGroup( - pnButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnButtonsLayout.createSequentialGroup() - .addContainerGap() - .addComponent(bnTest) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(lbTestIcon, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(bnCreateDb) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(lbCreateIcon, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(bnOk) - .addGap(11, 11, 11) - .addComponent(bnCancel) - .addContainerGap()) - ); - pnButtonsLayout.setVerticalGroup( - pnButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnButtonsLayout.createSequentialGroup() - .addGap(0, 0, 0) - .addGroup(pnButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(lbCreateIcon, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(lbTestIcon, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(pnButtonsLayout.createSequentialGroup() - .addGroup(pnButtonsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(bnOk) - .addComponent(bnCancel) - .addComponent(bnTest) - .addComponent(bnCreateDb)) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) - ); - - pnSetupGuidance.setBorder(javax.swing.BorderFactory.createTitledBorder(null, org.openide.util.NbBundle.getMessage(EamDbSettingsDialog.class, "EamDbSettingsDialog.pnSetupGuidance.border.title"), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 12))); // NOI18N - - jScrollPane1.setBorder(null); - - taSetupGuidance.setEditable(false); - taSetupGuidance.setBackground(new java.awt.Color(240, 240, 240)); - taSetupGuidance.setColumns(20); - taSetupGuidance.setFont(new java.awt.Font("Monospaced", 0, 12)); // NOI18N - taSetupGuidance.setLineWrap(true); - taSetupGuidance.setRows(3); - taSetupGuidance.setTabSize(4); - taSetupGuidance.setWrapStyleWord(true); - taSetupGuidance.setAutoscrolls(false); - taSetupGuidance.setBorder(null); - taSetupGuidance.setRequestFocusEnabled(false); - taSetupGuidance.setVerifyInputWhenFocusTarget(false); - jScrollPane1.setViewportView(taSetupGuidance); - - javax.swing.GroupLayout pnSetupGuidanceLayout = new javax.swing.GroupLayout(pnSetupGuidance); - pnSetupGuidance.setLayout(pnSetupGuidanceLayout); - pnSetupGuidanceLayout.setHorizontalGroup( - pnSetupGuidanceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnSetupGuidanceLayout.createSequentialGroup() - .addContainerGap() - .addComponent(jScrollPane1) - .addContainerGap()) - ); - pnSetupGuidanceLayout.setVerticalGroup( - pnSetupGuidanceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(pnSetupGuidanceLayout.createSequentialGroup() - .addContainerGap() - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(10, 10, 10)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createSequentialGroup() .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(pnSetupGuidance, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(pnDatabaseConnectionSettings, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(pnButtons, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(pnButtons, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(pnSQLiteSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(pnSetupGuidance, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(10, 10, 10) + .addComponent(pnSQLiteSettings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(pnDatabaseConnectionSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 348, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(pnButtons, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, 0)) + .addGap(10, 10, 10)) ); pack(); }// //GEN-END:initComponents private void customizeComponents() { - bnGrpDatabasePlatforms.add(rdioBnDisabled); - bnGrpDatabasePlatforms.add(rdioBnPostgreSQL); - bnGrpDatabasePlatforms.add(rdioBnSQLite); - + setTextPrompts(); + setTextBoxListeners(); switch (selectedPlatform) { - case POSTGRESQL: - rdioBnPostgreSQL.setSelected(true); - testingStatus = DatabaseTestResult.UNTESTED; - updatePostgresFields(true); - updateSqliteFields(false); - break; case SQLITE: - rdioBnSQLite.setSelected(true); testingStatus = DatabaseTestResult.UNTESTED; updatePostgresFields(false); updateSqliteFields(true); break; default: - rdioBnDisabled.setSelected(true); - testingStatus = DatabaseTestResult.TESTEDOK; - updatePostgresFields(false); + POSTGRESQL: + testingStatus = DatabaseTestResult.UNTESTED; + updatePostgresFields(true); updateSqliteFields(false); break; - } - setTextPrompts(); - setTextBoxListeners(); - lbTestIcon.setIcon(null); + } + displayDatabaseSettings(selectedPlatform.equals(EamDbPlatformEnum.POSTGRESQL)); } - + private void display() { Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); setLocation((screenDimension.width - getSize().width) / 2, (screenDimension.height - getSize().height) / 2); setVisible(true); } + private void setGuidanceMessage(String message, boolean isError) { - taSetupGuidance.setText(message); + if (isError) { - taSetupGuidance.setForeground(new Color(255, 102, 102)); // light red color + } else { - taSetupGuidance.setForeground(new Color(0, 0, 0)); // black color + } } - + private void clearIcons() { - lbTestIcon.setIcon(null); - lbCreateIcon.setIcon(null); + } - + @Messages({"EamDbSettingsDialog.chooserPath.failedToGetDbPathMsg=Selected database path is invalid. Try again."}) private void bnDatabasePathFileOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnDatabasePathFileOpenActionPerformed fcDatabasePath.setCurrentDirectory(new File(dbSettingsSqlite.getDbDirectory())); @@ -461,11 +333,7 @@ public class EamDbSettingsDialog extends JDialog { if (fcDatabasePath.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { File databaseFile = fcDatabasePath.getSelectedFile(); try { - String fullPath = databaseFile.getCanonicalPath(); - if (!fullPath.endsWith(".db")) { - fullPath = fullPath + ".db"; // NON-NLS - } - tfDatabasePath.setText(fullPath); + tfDatabasePath.setText(databaseFile.getCanonicalPath()); valid(); } catch (IOException ex) { LOGGER.log(Level.SEVERE, "Failed to get path of selected database file", ex); // NON-NLS @@ -474,9 +342,7 @@ public class EamDbSettingsDialog extends JDialog { } }//GEN-LAST:event_bnDatabasePathFileOpenActionPerformed - private void bnTestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnTestActionPerformed - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - + private void testDbSettings() { switch (selectedPlatform) { case POSTGRESQL: if (dbSettingsPostgres.verifyConnection()) { @@ -484,39 +350,30 @@ public class EamDbSettingsDialog extends JDialog { && dbSettingsPostgres.verifyDatabaseSchema()) { testingStatus = DatabaseTestResult.TESTEDOK; } else { - testingStatus = DatabaseTestResult.SCHEMA_INVALID; + testingStatus = DatabaseTestResult.SCHEMA_INVALID; } } else { testingStatus = DatabaseTestResult.CONNECTION_FAILED; - } + } break; case SQLITE: if (dbSettingsSqlite.dbDirectoryExists() && dbSettingsSqlite.verifyConnection()) { if (dbSettingsSqlite.verifyDatabaseSchema()) { - testingStatus = DatabaseTestResult.TESTEDOK; - } else { - testingStatus = DatabaseTestResult.SCHEMA_INVALID; + testingStatus = DatabaseTestResult.TESTEDOK; + } else { + testingStatus = DatabaseTestResult.SCHEMA_INVALID; } } else { - testingStatus = DatabaseTestResult.SCHEMA_INVALID; + testingStatus = DatabaseTestResult.SCHEMA_INVALID; } break; } - setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - if (testingStatus == DatabaseTestResult.TESTEDOK) { - lbTestIcon.setIcon(goodIcon); - } else { - lbTestIcon.setIcon(badIcon); - } valid(); - }//GEN-LAST:event_bnTestActionPerformed + } - @Messages({"EamDbSettingsDialog.creation.failed=Database initialization failed."}) - private void bnCreateDbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnCreateDbActionPerformed - - setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + private void createDb() { clearIcons(); boolean result = false; switch (selectedPlatform) { @@ -526,7 +383,7 @@ public class EamDbSettingsDialog extends JDialog { } result = dbSettingsPostgres.initializeDatabaseSchema() && dbSettingsPostgres.insertDefaultDatabaseContent(); - + break; case SQLITE: if (!dbSettingsSqlite.dbDirectoryExists()) { @@ -536,26 +393,45 @@ public class EamDbSettingsDialog extends JDialog { && dbSettingsSqlite.insertDefaultDatabaseContent(); break; } - setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + if (false == result) { - setGuidanceMessage(Bundle.EamDbSettingsDialog_creation_failed(), true); - lbCreateIcon.setIcon(badIcon); } else { testingStatus = DatabaseTestResult.TESTEDOK; - lbCreateIcon.setIcon(goodIcon); valid(); } - }//GEN-LAST:event_bnCreateDbActionPerformed + } @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 bnOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnOkActionPerformed + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + testDbSettings(); + if (testingStatus == DatabaseTestResult.CONNECTION_FAILED) { + JOptionPane.showConfirmDialog(WindowManager.getDefault().getMainWindow(), + "Connection to database failed, check your settings", + "Connection failed", + JOptionPane.OK_OPTION); + } else if (testingStatus == DatabaseTestResult.SCHEMA_INVALID) { + //database doesn't exist do you want to create + if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(WindowManager.getDefault().getMainWindow(), + "DO YOU WANT TO CREATE DB", + "DB DOESNT EXIST", + JOptionPane.YES_NO_OPTION)) { + createDb(); + } + } + + if (testingStatus != DatabaseTestResult.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. */ @@ -568,7 +444,7 @@ public class EamDbSettingsDialog extends JDialog { } catch (EamDbException ex) { LOGGER.log(Level.SEVERE, "Failed to close database connections in previously selected platform.", ex); // NON-NLS SwingUtilities.invokeLater(() -> { - JOptionPane.showMessageDialog(null, + JOptionPane.showMessageDialog(null, Bundle.EamDbSettingsDialog_okButton_errorMsg_text(), Bundle.EamDbSettingsDialog_okButton_errorTitle_text(), JOptionPane.WARNING_MESSAGE); @@ -592,6 +468,7 @@ public class EamDbSettingsDialog extends JDialog { } catch (EamDbException ex) { LOGGER.log(Level.SEVERE, "Failed to connect to Central Repository database.", ex); setGuidanceMessage(Bundle.EamDbSettingsDialog_okButton_connectionErrorMsg_text(), true); + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); return; } @@ -606,6 +483,7 @@ public class EamDbSettingsDialog extends JDialog { } catch (EamDbException ex) { LOGGER.log(Level.SEVERE, "Failed to connect to Central Repository database.", ex); setGuidanceMessage(Bundle.EamDbSettingsDialog_okButton_connectionErrorMsg_text(), true); + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); return; } break; @@ -613,6 +491,7 @@ public class EamDbSettingsDialog extends JDialog { break; } + setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); dispose(); }//GEN-LAST:event_bnOkActionPerformed @@ -620,31 +499,6 @@ public class EamDbSettingsDialog extends JDialog { dispose(); }//GEN-LAST:event_bnCancelActionPerformed - private void rdioBnDisabledActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdioBnDisabledActionPerformed - selectedPlatform = EamDbPlatformEnum.DISABLED; - testingStatus = DatabaseTestResult.TESTEDOK; - - updateSqliteFields(false); - updatePostgresFields(false); - }//GEN-LAST:event_rdioBnDisabledActionPerformed - - - private void rdioBnPostgreSQLActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdioBnPostgreSQLActionPerformed - selectedPlatform = EamDbPlatformEnum.POSTGRESQL; - testingStatus = DatabaseTestResult.UNTESTED; - - updateSqliteFields(false); - updatePostgresFields(true); - }//GEN-LAST:event_rdioBnPostgreSQLActionPerformed - - private void rdioBnSQLiteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdioBnSQLiteActionPerformed - selectedPlatform = EamDbPlatformEnum.SQLITE; - testingStatus = DatabaseTestResult.UNTESTED; - - updateSqliteFields(true); - updatePostgresFields(false); - - }//GEN-LAST:event_rdioBnSQLiteActionPerformed private void tfDatabasePathFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_tfDatabasePathFocusLost String fullPath = tfDatabasePath.getText(); @@ -654,37 +508,35 @@ public class EamDbSettingsDialog extends JDialog { tfDatabasePath.setText(fullPath); }//GEN-LAST:event_tfDatabasePathFocusLost - /** - * Update the fields for the Postgres platform depending on whether the - * Postgres radioButton is enabled. - * - * @param enabled - */ - private void updatePostgresFields(boolean enabled) { - tbDbHostname.setText(enabled ? dbSettingsPostgres.getHost() : ""); - tbDbHostname.setEnabled(enabled); - tbDbPort.setText(enabled ? Integer.toString(dbSettingsPostgres.getPort()) : ""); - tbDbPort.setEnabled(enabled); - tbDbName.setText(enabled ? dbSettingsPostgres.getDbName() : ""); - tbDbName.setEnabled(enabled); - tbDbUsername.setText(enabled ? dbSettingsPostgres.getUserName() : ""); - tbDbUsername.setEnabled(enabled); - jpDbPassword.setText(enabled ? dbSettingsPostgres.getPassword() : ""); - jpDbPassword.setEnabled(enabled); + private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBox1ActionPerformed + selectedPlatform = (EamDbPlatformEnum) jComboBox1.getSelectedItem(); + customizeComponents(); + //displayDatabaseSettings(selectedPlatform.equals(EamDbPlatformEnum.POSTGRESQL)); + // toggleWaitCursor(jComboBox1.getSelectedItem().equals(EamDbPlatformEnum.POSTGRESQL)); + }//GEN-LAST:event_jComboBox1ActionPerformed + +// private void toggleWaitCursor(boolean off) { +// if (!off) { +// setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); +// } else { +// setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); +// } +// } + private void displayDatabaseSettings(boolean isPostgres) { + lbDatabasePath.setVisible(!isPostgres); + tfDatabasePath.setVisible(!isPostgres); + jLabel1.setVisible(!isPostgres); + bnDatabasePathFileOpen.setVisible(!isPostgres); + lbHostName.setVisible(isPostgres); + tbDbHostname.setVisible(isPostgres); + lbPort.setVisible(isPostgres); + tbDbPort.setVisible(isPostgres); + lbUserName.setVisible(isPostgres); + tbDbUsername.setVisible(isPostgres); + lbUserPassword.setVisible(isPostgres); + jpDbPassword.setVisible(isPostgres); } - - /** - * Update the fields for the SQLite platform depending on whether the - * SQLite radioButton is enabled. - * - * @param enabled - */ - private void updateSqliteFields(boolean enabled) { - tfDatabasePath.setText(enabled ? dbSettingsSqlite.getFileNameWithPath() : ""); - tfDatabasePath.setEnabled(enabled); - bnDatabasePathFileOpen.setEnabled(enabled); - } - + /** * Add text prompts to all of the text fields. */ @@ -697,11 +549,36 @@ public class EamDbSettingsDialog extends JDialog { Collection textPrompts = new ArrayList<>(); textPrompts.add(new TextPrompt(Bundle.EamDbSettingsDialog_textPrompt_hostnameOrIP(), tbDbHostname)); textPrompts.add(new TextPrompt(Bundle.EamDbSettingsDialog_textPrompt_port(), tbDbPort)); - textPrompts.add(new TextPrompt(Bundle.EamDbSettingsDialog_textPrompt_dbName(), tbDbName)); + // textPrompts.add(new TextPrompt(Bundle.EamDbSettingsDialog_textPrompt_dbName(), tbDbName)); textPrompts.add(new TextPrompt(Bundle.EamDbSettingsDialog_textPrompt_user(), tbDbUsername)); configureTextPrompts(textPrompts); } + private void updatePostgresFields(boolean enabled) { + tbDbHostname.setText(enabled ? dbSettingsPostgres.getHost() : ""); + tbDbHostname.setEnabled(enabled); + tbDbPort.setText(enabled ? Integer.toString(dbSettingsPostgres.getPort()) : ""); + tbDbPort.setEnabled(enabled); + // tbDbName.setText(enabled ? dbSettingsPostgres.getDbName() : ""); + // tbDbName.setEnabled(enabled); + tbDbUsername.setText(enabled ? dbSettingsPostgres.getUserName() : ""); + tbDbUsername.setEnabled(enabled); + jpDbPassword.setText(enabled ? dbSettingsPostgres.getPassword() : ""); + jpDbPassword.setEnabled(enabled); + } + + /** + * Update the fields for the SQLite platform depending on whether the SQLite + * radioButton is enabled. + * + * @param enabled + */ + private void updateSqliteFields(boolean enabled) { + tfDatabasePath.setText(enabled ? dbSettingsSqlite.getFileNameWithPath() : ""); + tfDatabasePath.setEnabled(enabled); + bnDatabasePathFileOpen.setEnabled(enabled); + } + /** * Register for notifications when the text boxes get updated. */ @@ -709,7 +586,7 @@ public class EamDbSettingsDialog extends JDialog { textBoxes.add(tfDatabasePath); textBoxes.add(tbDbHostname); textBoxes.add(tbDbPort); - textBoxes.add(tbDbName); + // textBoxes.add(tbDbName); textBoxes.add(tbDbUsername); textBoxes.add(jpDbPassword); addDocumentListeners(textBoxes, textBoxChangedListener); @@ -754,17 +631,17 @@ public class EamDbSettingsDialog extends JDialog { case POSTGRESQL: result = !tbDbHostname.getText().trim().isEmpty() && !tbDbPort.getText().trim().isEmpty() - && !tbDbName.getText().trim().isEmpty() + // && !tbDbName.getText().trim().isEmpty() && !tbDbUsername.getText().trim().isEmpty() && 0 < jpDbPassword.getPassword().length; break; - + case SQLITE: result = !tfDatabasePath.getText().trim().isEmpty(); break; } - + if (!result) { setGuidanceMessage(Bundle.EamDbSettingsDialog_validation_incompleteFields(), true); } @@ -808,7 +685,7 @@ public class EamDbSettingsDialog extends JDialog { } try { - dbSettingsPostgres.setDbName(tbDbName.getText().trim()); + dbSettingsPostgres.setDbName(CENTRAL_REPO_DB_NAME); } catch (EamDbException ex) { guidanceText.append(ex.getMessage()); result = false; @@ -831,7 +708,7 @@ public class EamDbSettingsDialog extends JDialog { case SQLITE: try { File databasePath = new File(tfDatabasePath.getText()); - dbSettingsSqlite.setDbName(databasePath.getName()); + dbSettingsSqlite.setDbName(CENTRAL_REPO_DB_NAME + CENTRAL_REPO_SQLITE_EXT); dbSettingsSqlite.setDbDirectory(databasePath.getParent()); } catch (EamDbException ex) { guidanceText.append(ex.getMessage()); @@ -850,65 +727,27 @@ public class EamDbSettingsDialog extends JDialog { * @return true if it's okay, false otherwise. */ private boolean valid() { - taSetupGuidance.setText(""); - return enableTestButton(checkFields()) - && enableCreateButton() - && enableOkButton(); + return enableOkButton(checkFields()); } /** - * Enable the "Test" button once all fields are valid. - * - * @return true - */ - @Messages({"EamDbSettingsDialog.validation.mustTest=Once you are statisfied with the database settings, click the Test button to test the database connection, settings, and schema. SQLite should only be used by one examiner at a time.", - "EamDbSettingsDialog.validation.failedConnection=The connection to the database failed. Update the settings and try the Test again."}) - private boolean enableTestButton(boolean isValidInput) { - if (selectedPlatform != EamDbPlatformEnum.DISABLED && isValidInput) { - bnTest.setEnabled(true); - if (testingStatus == DatabaseTestResult.UNTESTED) { - setGuidanceMessage(Bundle.EamDbSettingsDialog_validation_mustTest(), false); - } else if (testingStatus == DatabaseTestResult.CONNECTION_FAILED) { - setGuidanceMessage(Bundle.EamDbSettingsDialog_validation_failedConnection(), true); - } - } else { - bnTest.setEnabled(false); - } - return true; - } - - /** - * Enable the "Create" button if the db is not created. - * - * @return true if db is created, else false - */ - @Messages({"EamDbSettingsDialog.validation.dbNotCreated=The database does not exist. Click the Create button to create and initialize the database."}) - private boolean enableCreateButton() { - if (testingStatus == DatabaseTestResult.SCHEMA_INVALID) { - bnCreateDb.setEnabled(true); - setGuidanceMessage(Bundle.EamDbSettingsDialog_validation_dbNotCreated(), false); - } else { - bnCreateDb.setEnabled(false); - } - return true; - } - - /** - * Enable the "OK" button if the db test passed. Disabled defaults to db test passed. - * + * 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() { - if (testingStatus == DatabaseTestResult.TESTEDOK || selectedPlatform == EamDbPlatformEnum.DISABLED) { + private boolean enableOkButton(boolean isValidInput) { + if (isValidInput) { bnOk.setEnabled(true); setGuidanceMessage(Bundle.EamDbSettingsDialog_validation_finished(), false); } 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. @@ -937,45 +776,35 @@ public class EamDbSettingsDialog extends JDialog { clearIcons(); testingStatus = DatabaseTestResult.UNTESTED; valid(); + } } - + private enum DatabaseTestResult { UNTESTED, CONNECTION_FAILED, SCHEMA_INVALID, - TESTEDOK; + TESTEDOK; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton bnCancel; - private javax.swing.JButton bnCreateDb; private javax.swing.JButton bnDatabasePathFileOpen; private javax.swing.ButtonGroup bnGrpDatabasePlatforms; private javax.swing.JButton bnOk; - private javax.swing.JButton bnTest; private javax.swing.JFileChooser fcDatabasePath; - private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JComboBox jComboBox1; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; private javax.swing.JPasswordField jpDbPassword; - private javax.swing.JLabel lbCreateIcon; - private javax.swing.JLabel lbDatabaseName; private javax.swing.JLabel lbDatabasePath; private javax.swing.JLabel lbHostName; private javax.swing.JLabel lbPort; - private javax.swing.JLabel lbTestIcon; private javax.swing.JLabel lbUserName; private javax.swing.JLabel lbUserPassword; private javax.swing.JPanel pnButtons; - private javax.swing.JPanel pnDatabaseConnectionSettings; - private javax.swing.JPanel pnPostgreSQLSettings; private javax.swing.JPanel pnSQLiteSettings; - private javax.swing.JPanel pnSetupGuidance; - private javax.swing.JRadioButton rdioBnDisabled; - private javax.swing.JRadioButton rdioBnPostgreSQL; - private javax.swing.JRadioButton rdioBnSQLite; - private javax.swing.JTextArea taSetupGuidance; private javax.swing.JTextField tbDbHostname; - private javax.swing.JTextField tbDbName; private javax.swing.JTextField tbDbPort; private javax.swing.JTextField tbDbUsername; private javax.swing.JTextField tfDatabasePath; diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.form b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.form index ec0056d904..ab0b5922fb 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.form @@ -25,6 +25,10 @@ + + + + @@ -33,13 +37,14 @@ - + + - + @@ -240,5 +245,15 @@ + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java index d6e5873319..ba54241a66 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/GlobalSettingsPanel.java @@ -29,6 +29,7 @@ import org.sleuthkit.autopsy.events.AutopsyEvent; import org.sleuthkit.autopsy.ingest.IngestManager; import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbPlatformEnum; +import static org.sleuthkit.autopsy.centralrepository.datamodel.EamDbPlatformEnum.DISABLED; import org.sleuthkit.autopsy.centralrepository.datamodel.PostgresEamDbSettings; import org.sleuthkit.autopsy.centralrepository.datamodel.SqliteEamDbSettings; @@ -85,6 +86,7 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i bnManageTags = new javax.swing.JButton(); bnManageTypes = new javax.swing.JButton(); tbOops = new javax.swing.JTextField(); + jCheckBox1 = new javax.swing.JCheckBox(); setName(""); // NOI18N @@ -198,6 +200,13 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i tbOops.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.tbOops.text")); // NOI18N tbOops.setBorder(null); + org.openide.awt.Mnemonics.setLocalizedText(jCheckBox1, org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.jCheckBox1.text")); // NOI18N + jCheckBox1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jCheckBox1ActionPerformed(evt); + } + }); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -207,19 +216,23 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(pnDatabaseContentButtons, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(tbOops, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(pnDatabaseConfiguration, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(pnDatabaseConfiguration, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(jCheckBox1, javax.swing.GroupLayout.PREFERRED_SIZE, 186, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() + .addComponent(jCheckBox1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(pnDatabaseConfiguration, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(tbOops, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(pnDatabaseContentButtons, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 18, Short.MAX_VALUE)) + .addContainerGap()) ); }// //GEN-END:initComponents @@ -243,6 +256,12 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i load(); // reload db settings content and update buttons }//GEN-LAST:event_bnDbConfigureActionPerformed + private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox1ActionPerformed + //if saved setting is disabled checkbox should be disabled already + enableDatabaseConfigureButton(jCheckBox1.isSelected()); + enableButtonSubComponents(jCheckBox1.isSelected() && !EamDbPlatformEnum.getSelectedPlatform().equals(DISABLED)); + }//GEN-LAST:event_jCheckBox1ActionPerformed + @Override @Messages({"GlobalSettingsPanel.validationerrMsg.mustConfigure=Configure the database to enable this module."}) public void load() { @@ -250,7 +269,7 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i enableAllSubComponents(false); EamDbPlatformEnum selectedPlatform = EamDbPlatformEnum.getSelectedPlatform(); - + switch (selectedPlatform) { case POSTGRESQL: PostgresEamDbSettings dbSettingsPg = new PostgresEamDbSettings(); @@ -270,7 +289,7 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i lbDbPlatformValue.setText(EamDbPlatformEnum.DISABLED.toString()); lbDbNameValue.setText(""); lbDbLocationValue.setText(""); - enableDatabaseConfigureButton(true); + enableDatabaseConfigureButton(jCheckBox1.isSelected()); tbOops.setText(Bundle.GlobalSettingsPanel_validationerrMsg_mustConfigure()); break; } @@ -347,8 +366,8 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i * @return True */ private boolean enableAllSubComponents(Boolean enable) { - enableDatabaseConfigureButton(enable); - enableButtonSubComponents(enable); + enableDatabaseConfigureButton(jCheckBox1.isSelected() && enable); + enableButtonSubComponents(jCheckBox1.isSelected() && enable); return true; } @@ -359,9 +378,17 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i * * @return True */ - private boolean enableDatabaseConfigureButton(Boolean enable) { + private void enableDatabaseConfigureButton(Boolean enable) { + pnDatabaseConfiguration.setEnabled(enable); + pnDatabaseContentButtons.setEnabled(enable); bnDbConfigure.setEnabled(enable); - return true; + lbDbLocationLabel.setEnabled(enable); + lbDbLocationValue.setEnabled(enable); + lbDbNameLabel.setEnabled(enable); + lbDbNameValue.setEnabled(enable); + lbDbPlatformTypeLabel.setEnabled(enable); + lbDbPlatformValue.setEnabled(enable); + tbOops.setEnabled(enable); } /** @@ -384,6 +411,7 @@ public final class GlobalSettingsPanel extends IngestModuleGlobalSettingsPanel i private javax.swing.JButton bnImportDatabase; private javax.swing.JButton bnManageTags; private javax.swing.JButton bnManageTypes; + private javax.swing.JCheckBox jCheckBox1; private javax.swing.JLabel lbDbLocationLabel; private javax.swing.JLabel lbDbLocationValue; private javax.swing.JLabel lbDbNameLabel;