diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties
index c3cfeb9b7a..dd1e0b211b 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties
@@ -232,14 +232,10 @@ Detail\: \n\
Cannot open a non-Autopsy config file (at {1}).
XMLCaseManagement.open.msgDlg.notAutCase.title=Error
AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=Cancel
-NewCaseVisualPanel1.rbSingleUserCase.text=Single-user
-NewCaseVisualPanel1.rbMultiUserCase.text=Multi-user
-NewCaseVisualPanel1.lbBadMultiUserSettings.text=
ImageFilePanel.errorLabel.text=Error Label
DataSourceOnCDriveError.text=Warning: Path to multi-user data source is on \"C:\" drive
NewCaseVisualPanel1.CaseFolderOnCDriveError.text=Warning: Path to multi-user case folder is on \"C:\" drive
LocalFilesPanel.errorLabel.text=Error Label
-NewCaseVisualPanel1.errorLabel.text=Error Label
CollaborationMonitor.addingDataSourceStatus.msg={0} adding data source
CollaborationMonitor.analyzingDataSourceStatus.msg={0} analyzing {1}
MissingImageDialog.lbWarning.text=
@@ -257,3 +253,7 @@ CaseConverter.ConvertedToMultiUser=This case was converted to a Multi-user colla
CaseConverter.UnableToCopySourceImages=Unable to copy source images
CaseConverter.ConversionSuccessful=. Conversion successful:
CaseConverter.DeletingCase=Deleting original case folder
+NewCaseVisualPanel1.caseParentDirWarningLabel.text=Case directory warning label
+NewCaseVisualPanel1.multiUserCaseRadioButton.text=Multi-user
+NewCaseVisualPanel1.singleUserCaseRadioButton.text=Single-user
+NewCaseVisualPanel1.multiUserSettingsWarningLabel.text=Multi-user settings warning label
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties
index a3d3832f82..5dff497d16 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle_ja.properties
@@ -217,4 +217,4 @@ LocalDiskPanel.noFatOrphansCheckbox.text=FAT\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9
AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=\u30ad\u30e3\u30f3\u30bb\u30eb
ImageFilePanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
LocalFilesPanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
-NewCaseVisualPanel1.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
+NewCaseVisualPanel1.caseParentDirWarningLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.form b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.form
index ea13f6114b..c30aa65b0b 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.form
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.form
@@ -43,7 +43,7 @@
-
+
@@ -54,11 +54,11 @@
-
+
-
+
-
+
@@ -88,13 +88,13 @@
-
-
+
+
-
+
-
+
@@ -164,52 +164,49 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
+
-
+
-
+
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java
index 5f4765b930..08883a4796 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel1.java
@@ -1,7 +1,7 @@
/*
* Autopsy Forensic Browser
*
- * Copyright 2011 Basis Technology Corp.
+ * Copyright 2011-2015 Basis Technology Corp.
* Contact: carrier sleuthkit org
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,33 +24,51 @@ import java.awt.*;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
-import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.sleuthkit.autopsy.casemodule.Case.CaseType;
import org.sleuthkit.autopsy.core.UserPreferences;
import org.sleuthkit.autopsy.coreutils.PathValidator;
-import org.sleuthkit.datamodel.CaseDbConnectionInfo;
-import org.sleuthkit.datamodel.TskData.DbType;
/**
- * The wizard panel for the new case creation.
- *
- * @author jantonius
+ * The JPanel for the first page of the new case wizard.
*/
-final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
+final class NewCaseVisualPanel1 extends JPanel {
- private JFileChooser fc = new JFileChooser();
- private NewCaseWizardPanel1 wizPanel;
+ private final JFileChooser fileChooser = new JFileChooser();
+ private final NewCaseWizardPanel1 wizPanel;
+ /**
+ * Constructs the JPanel for the first page of the new case wizard.
+ *
+ * @param wizPanel The wizard panmel that owns this panel.
+ */
NewCaseVisualPanel1(NewCaseWizardPanel1 wizPanel) {
- initComponents();
- errorLabel.setVisible(false);
- lbBadMultiUserSettings.setText("");
this.wizPanel = wizPanel;
- caseNameTextField.getDocument().addDocumentListener(this);
- caseParentDirTextField.getDocument().addDocumentListener(this);
- rbMultiUserCase.setSelected(true); // default to multi-user if available
+ initComponents();
+ TextFieldListener listener = new TextFieldListener();
+ caseNameTextField.getDocument().addDocumentListener(listener);
+ caseParentDirTextField.getDocument().addDocumentListener(listener);
+ caseParentDirWarningLabel.setVisible(false);
+ }
+
+ /**
+ * Should be called by the readSettings() of the wizard panel that owns this
+ * UI panel so that this panel can read settings for each invocation of the
+ * wizard as well.
+ */
+ void readSettings() {
+ caseNameTextField.setText("");
+ if (UserPreferences.getIsMultiUserModeEnabled()) {
+ multiUserCaseRadioButton.setEnabled(true);
+ multiUserCaseRadioButton.setSelected(true);
+ multiUserSettingsWarningLabel.setVisible(false);
+ } else {
+ multiUserCaseRadioButton.setEnabled(false);
+ singleUserCaseRadioButton.setSelected(true);
+ multiUserSettingsWarningLabel.setText(NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel1.MultiUserDisabled.text"));
+ }
+ validateSettings();
}
/**
@@ -69,44 +87,114 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
*
* @return caseName the case name from the case name text field
*/
- public String getCaseName() {
+ String getCaseName() {
return this.caseNameTextField.getText();
}
+ /**
+ * Allows the the wizard panel that owns this UI panel to set the base case
+ * directory to a persisted vlaue.
+ *
+ * @param caseParentDir The persisted path to the base case directory.
+ */
+ void setCaseParentDir(String caseParentDir) {
+ caseParentDirTextField.setText(caseParentDir);
+ validateSettings();
+ }
+
/**
* Gets the base directory that the user typed on the base directory text
* field. Will add file separator if it was not added.
*
* @return baseDirectory the base directory from the case dir text field
*/
- public String getCaseParentDir() {
+ String getCaseParentDir() {
String parentDir = this.caseParentDirTextField.getText();
-
if (parentDir.endsWith(File.separator) == false) {
parentDir = parentDir + File.separator;
}
return parentDir;
}
- public JTextField getCaseParentDirTextField() {
- return this.caseParentDirTextField;
- }
-
/**
* Gets the case type.
*
* @return CaseType as set via radio buttons
*/
- public CaseType getCaseType() {
+ CaseType getCaseType() {
CaseType value = CaseType.SINGLE_USER_CASE;
- if (rbSingleUserCase.isSelected()) {
+ if (singleUserCaseRadioButton.isSelected()) {
value = CaseType.SINGLE_USER_CASE;
- } else if (rbMultiUserCase.isSelected()) {
+ } else if (multiUserCaseRadioButton.isSelected()) {
value = CaseType.MULTI_USER_CASE;
}
return value;
}
+ /**
+ * Called when the user interacts with a child UI component of this panel,
+ * this method notifies the wizard panel that owns this panel and then
+ * validates the user's settings.
+ */
+ private void handleUpdate() {
+ wizPanel.fireChangeEvent();
+ validateSettings();
+ }
+
+ /**
+ * Does validation of the current settings and enables or disables the
+ * "Next" button of the wizard panel that owns this panel.
+ */
+ private void validateSettings() {
+ /**
+ * Check the base case directory for the selected case type and show a
+ * warning if it is a dubious choice.
+ */
+ caseParentDirWarningLabel.setVisible(false);
+ String parentDir = getCaseParentDir();
+ if (!PathValidator.isValid(parentDir, getCaseType())) {
+ caseParentDirWarningLabel.setVisible(true);
+ caseParentDirWarningLabel.setText(NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel1.CaseFolderOnCDriveError.text"));
+ }
+
+ /**
+ * Enable the "Next" button for the wizard if there is text entered for
+ * the case name and base case directory. Also make sure that multi-user
+ * cases are enabled if the multi-user case radio button is selected.
+ */
+ String caseName = getCaseName();
+ if (!caseName.equals("") && !parentDir.equals("")) {
+ caseDirTextField.setText(parentDir + caseName);
+ wizPanel.setIsFinish(true);
+ } else {
+ caseDirTextField.setText("");
+ wizPanel.setIsFinish(false);
+ }
+ }
+
+ /**
+ * Handles validation when the user provides input to text field components
+ * of this panel.
+ */
+ private class TextFieldListener implements DocumentListener {
+
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ handleUpdate();
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e) {
+ handleUpdate();
+ }
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {
+ handleUpdate();
+ }
+
+ }
+
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
@@ -124,10 +212,10 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
caseDirBrowseButton = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
caseDirTextField = new javax.swing.JTextField();
- rbSingleUserCase = new javax.swing.JRadioButton();
- rbMultiUserCase = new javax.swing.JRadioButton();
- lbBadMultiUserSettings = new javax.swing.JLabel();
- errorLabel = new javax.swing.JLabel();
+ singleUserCaseRadioButton = new javax.swing.JRadioButton();
+ multiUserCaseRadioButton = new javax.swing.JRadioButton();
+ multiUserSettingsWarningLabel = new javax.swing.JLabel();
+ caseParentDirWarningLabel = new javax.swing.JLabel();
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.jLabel1.text_1")); // NOI18N
@@ -152,28 +240,27 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
caseDirTextField.setEditable(false);
caseDirTextField.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.caseDirTextField.text_1")); // NOI18N
- caseTypeButtonGroup.add(rbSingleUserCase);
- org.openide.awt.Mnemonics.setLocalizedText(rbSingleUserCase, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.rbSingleUserCase.text")); // NOI18N
- rbSingleUserCase.addActionListener(new java.awt.event.ActionListener() {
+ caseTypeButtonGroup.add(singleUserCaseRadioButton);
+ org.openide.awt.Mnemonics.setLocalizedText(singleUserCaseRadioButton, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.singleUserCaseRadioButton.text")); // NOI18N
+ singleUserCaseRadioButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
- rbSingleUserCaseActionPerformed(evt);
+ singleUserCaseRadioButtonActionPerformed(evt);
}
});
- caseTypeButtonGroup.add(rbMultiUserCase);
- org.openide.awt.Mnemonics.setLocalizedText(rbMultiUserCase, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.rbMultiUserCase.text")); // NOI18N
- rbMultiUserCase.addActionListener(new java.awt.event.ActionListener() {
+ caseTypeButtonGroup.add(multiUserCaseRadioButton);
+ org.openide.awt.Mnemonics.setLocalizedText(multiUserCaseRadioButton, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.multiUserCaseRadioButton.text")); // NOI18N
+ multiUserCaseRadioButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
- rbMultiUserCaseActionPerformed(evt);
+ multiUserCaseRadioButtonActionPerformed(evt);
}
});
- lbBadMultiUserSettings.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
- lbBadMultiUserSettings.setForeground(new java.awt.Color(255, 0, 0));
- org.openide.awt.Mnemonics.setLocalizedText(lbBadMultiUserSettings, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.lbBadMultiUserSettings.text")); // NOI18N
+ multiUserSettingsWarningLabel.setForeground(new java.awt.Color(255, 0, 0));
+ org.openide.awt.Mnemonics.setLocalizedText(multiUserSettingsWarningLabel, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.multiUserSettingsWarningLabel.text")); // NOI18N
- errorLabel.setForeground(new java.awt.Color(255, 0, 0));
- org.openide.awt.Mnemonics.setLocalizedText(errorLabel, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.errorLabel.text")); // NOI18N
+ caseParentDirWarningLabel.setForeground(new java.awt.Color(255, 0, 0));
+ org.openide.awt.Mnemonics.setLocalizedText(caseParentDirWarningLabel, org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, "NewCaseVisualPanel1.caseParentDirWarningLabel.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
@@ -199,17 +286,17 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
.addComponent(caseNameLabel)
.addGap(26, 26, 26)
.addComponent(caseNameTextField))
- .addComponent(lbBadMultiUserSettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addComponent(multiUserSettingsWarningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(caseDirBrowseButton)))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
- .addComponent(rbSingleUserCase)
+ .addComponent(singleUserCaseRadioButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
- .addComponent(rbMultiUserCase))
- .addComponent(errorLabel))
+ .addComponent(multiUserCaseRadioButton))
+ .addComponent(caseParentDirWarningLabel))
.addGap(0, 0, Short.MAX_VALUE))))
);
layout.setVerticalGroup(
@@ -232,12 +319,12 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
.addComponent(caseDirTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
- .addComponent(rbSingleUserCase)
- .addComponent(rbMultiUserCase))
+ .addComponent(singleUserCaseRadioButton)
+ .addComponent(multiUserCaseRadioButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(errorLabel)
+ .addComponent(caseParentDirWarningLabel)
.addGap(1, 1, 1)
- .addComponent(lbBadMultiUserSettings, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(multiUserSettingsWarningLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// //GEN-END:initComponents
@@ -250,32 +337,26 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
* @param evt the action event
*/
private void caseDirBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_caseDirBrowseButtonActionPerformed
- // show the directory chooser where the case directory will be created
- fc.setDragEnabled(false);
+ fileChooser.setDragEnabled(false);
if (!caseParentDirTextField.getText().trim().equals("")) {
- fc.setCurrentDirectory(new File(caseParentDirTextField.getText()));
+ fileChooser.setCurrentDirectory(new File(caseParentDirTextField.getText()));
}
- fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
- //fc.setSelectedFile(new File("C:\\Program Files\\"));
- //disableTextField(fc); // disable all the text field on the file chooser
-
- int returnValue = fc.showDialog((Component) evt.getSource(), NbBundle.getMessage(this.getClass(),
+ fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+ int choice = fileChooser.showDialog((Component) evt.getSource(), NbBundle.getMessage(this.getClass(),
"NewCaseVisualPanel1.caseDirBrowse.selectButton.text"));
- if (returnValue == JFileChooser.APPROVE_OPTION) {
- String path = fc.getSelectedFile().getPath();
- caseParentDirTextField.setText(path); // put the path to the textfield
+ if (JFileChooser.APPROVE_OPTION == choice) {
+ String path = fileChooser.getSelectedFile().getPath();
+ caseParentDirTextField.setText(path);
}
}//GEN-LAST:event_caseDirBrowseButtonActionPerformed
- private void rbSingleUserCaseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbSingleUserCaseActionPerformed
- this.wizPanel.fireChangeEvent();
- updateUI(null); // DocumentEvent is not used inside updateUI
- }//GEN-LAST:event_rbSingleUserCaseActionPerformed
+ private void singleUserCaseRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_singleUserCaseRadioButtonActionPerformed
+ handleUpdate();
+ }//GEN-LAST:event_singleUserCaseRadioButtonActionPerformed
- private void rbMultiUserCaseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rbMultiUserCaseActionPerformed
- this.wizPanel.fireChangeEvent();
- updateUI(null); // DocumentEvent is not used inside updateUI
- }//GEN-LAST:event_rbMultiUserCaseActionPerformed
+ private void multiUserCaseRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_multiUserCaseRadioButtonActionPerformed
+ handleUpdate();
+ }//GEN-LAST:event_multiUserCaseRadioButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton caseDirBrowseButton;
@@ -284,127 +365,13 @@ final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
private javax.swing.JLabel caseNameLabel;
private javax.swing.JTextField caseNameTextField;
private javax.swing.JTextField caseParentDirTextField;
+ private javax.swing.JLabel caseParentDirWarningLabel;
private javax.swing.ButtonGroup caseTypeButtonGroup;
- private javax.swing.JLabel errorLabel;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
- private javax.swing.JLabel lbBadMultiUserSettings;
- private javax.swing.JRadioButton rbMultiUserCase;
- private javax.swing.JRadioButton rbSingleUserCase;
+ private javax.swing.JRadioButton multiUserCaseRadioButton;
+ private javax.swing.JLabel multiUserSettingsWarningLabel;
+ private javax.swing.JRadioButton singleUserCaseRadioButton;
// End of variables declaration//GEN-END:variables
- /**
- * Gives notification that there was an insert into the document. The range
- * given by the DocumentEvent bounds the freshly inserted region.
- *
- * @param e the document event
- */
- @Override
- public void insertUpdate(DocumentEvent e) {
- this.wizPanel.fireChangeEvent();
- /*
- NOTE: verifyMultiUserSettings() is called from here as opposed to updateUI()
- because updateUI() is called several times when this wizard is loaded.
- */
- verifyMultiUserSettings();
- updateUI(e);
- }
-
- /**
- * Gives notification that a portion of the document has been removed. The
- * range is given in terms of what the view last saw (that is, before
- * updating sticky positions).
- *
- * @param e the document event
- */
- @Override
- public void removeUpdate(DocumentEvent e) {
- this.wizPanel.fireChangeEvent();
- updateUI(e);
- }
-
- /**
- * Gives notification that an attribute or set of attributes changed.
- *
- * @param e the document event
- */
- @Override
- public void changedUpdate(DocumentEvent e) {
- this.wizPanel.fireChangeEvent();
- updateUI(e);
- }
-
- /**
- * The "listener" that listens when the fields in this form are updated.
- * This method is used to determine when to enable / disable the "Finish"
- * button.
- *
- * @param e the document event
- */
- public void updateUI(DocumentEvent e) {
-
- // Note: DocumentEvent e can be null when called from rbSingleUserCaseActionPerformed()
- // and rbMultiUserCaseActionPerformed().
-
- String caseName = getCaseName();
- String parentDir = getCaseParentDir();
-
- if (!caseName.equals("") && !parentDir.equals("")) {
- caseDirTextField.setText(parentDir + caseName);
- wizPanel.setIsFinish(true);
- } else {
- caseDirTextField.setText("");
- wizPanel.setIsFinish(false);
- }
-
- // display warning if there is one (but don't disable "next" button)
- warnIfPathIsInvalid(parentDir);
- }
-
- /**
- * Tests multi-user settings by verifying connectivity to all required
- * multi-user services.
- */
- private void verifyMultiUserSettings(){
- CaseDbConnectionInfo info = UserPreferences.getDatabaseConnectionInfo();
- if (info.getDbType() == DbType.SQLITE) {
- rbSingleUserCase.setSelected(true);
- rbSingleUserCase.setEnabled(false);
- rbMultiUserCase.setEnabled(false);
- lbBadMultiUserSettings.setForeground(new java.awt.Color(153, 153, 153)); // Gray
- lbBadMultiUserSettings.setText(NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel1.MultiUserDisabled.text"));
- } else {
- rbSingleUserCase.setEnabled(true);
- rbMultiUserCase.setEnabled(true);
- // multi-user cases must have multi-user database service running
- if (info.canConnect()) {
- /* NOTE: natural way would be to call lbBadMultiUserSettings.setVisible(false)
- but if you do that Netbeans for some reason resizes the entire panel so it
- becomes much narrower horizontally.
- */
- lbBadMultiUserSettings.setText("");
- } else {
- // if we cannot connect to the shared database, don't present the option
- lbBadMultiUserSettings.setForeground(new java.awt.Color(255, 0, 0)); // Red
- lbBadMultiUserSettings.setText(NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel1.badCredentials.text"));
- lbBadMultiUserSettings.setVisible(true);
- rbSingleUserCase.setSelected(true);
- rbSingleUserCase.setEnabled(false);
- rbMultiUserCase.setEnabled(false);
- }
- }
- }
-
- /**
- * Validates path to selected case output folder. Displays warning if path is invalid.
- *
- * @param path Absolute path to the selected case folder
- */
- private void warnIfPathIsInvalid(String path) {
- errorLabel.setVisible(false);
- if (!PathValidator.isValid(path, getCaseType())) {
- errorLabel.setVisible(true);
- errorLabel.setText(NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel1.CaseFolderOnCDriveError.text"));
- }
- }
}
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java
index ccdb48b951..072f0d58f6 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseWizardPanel1.java
@@ -170,7 +170,8 @@ class NewCaseWizardPanel1 implements WizardDescriptor.ValidatingPanel