19 package org.sleuthkit.autopsy.casemodule;
 
   21 import org.openide.util.NbBundle;
 
   25 import javax.swing.JFileChooser;
 
   26 import javax.swing.JPanel;
 
   27 import javax.swing.event.DocumentEvent;
 
   28 import javax.swing.event.DocumentListener;
 
   36 final class NewCaseVisualPanel1 
extends JPanel implements DocumentListener {
 
   38     private final JFileChooser fileChooser = 
new JFileChooser();
 
   39     private final NewCaseWizardPanel1 wizPanel;
 
   46     NewCaseVisualPanel1(NewCaseWizardPanel1 wizPanel) {
 
   47         this.wizPanel = wizPanel;
 
   49         TextFieldListener listener = 
new TextFieldListener();
 
   50         caseNameTextField.getDocument().addDocumentListener(listener);
 
   51         caseParentDirTextField.getDocument().addDocumentListener(listener);
 
   52         caseParentDirWarningLabel.setVisible(
false);
 
   61         caseNameTextField.setText(
"");
 
   62         if (UserPreferences.getIsMultiUserModeEnabled()) {
 
   63             multiUserCaseRadioButton.setEnabled(
true);
 
   64             multiUserCaseRadioButton.setSelected(
true);
 
   66             multiUserCaseRadioButton.setEnabled(
false);
 
   67             singleUserCaseRadioButton.setSelected(
true);
 
   79     public String getName() {
 
   80         return NbBundle.getMessage(this.getClass(), 
"NewCaseVisualPanel1.getName.text");
 
   88     String getCaseName() {
 
   89         return this.caseNameTextField.getText();
 
   98     void setCaseParentDir(String caseParentDir) {
 
   99         caseParentDirTextField.setText(caseParentDir);
 
  109     String getCaseParentDir() {
 
  110         String parentDir = this.caseParentDirTextField.getText();
 
  111         if (parentDir.endsWith(File.separator) == 
false) {
 
  112             parentDir = parentDir + File.separator;
 
  122     CaseType getCaseType() {
 
  123         CaseType value = CaseType.SINGLE_USER_CASE;
 
  124         if (singleUserCaseRadioButton.isSelected()) {
 
  125             value = CaseType.SINGLE_USER_CASE;
 
  126         } 
else if (multiUserCaseRadioButton.isSelected()) {
 
  127             value = CaseType.MULTI_USER_CASE;
 
  137     private void handleUpdate() {
 
  138         wizPanel.fireChangeEvent();
 
  146     private void validateSettings() {
 
  151         caseParentDirWarningLabel.setVisible(
false);
 
  152         String parentDir = getCaseParentDir();
 
  153         if (!PathValidator.isValid(parentDir, getCaseType())) {
 
  154             caseParentDirWarningLabel.setVisible(
true);
 
  155             caseParentDirWarningLabel.setText(NbBundle.getMessage(
this.getClass(), 
"NewCaseVisualPanel1.CaseFolderOnCDriveError.text"));
 
  163         String caseName = getCaseName();
 
  164         if (!caseName.equals(
"") && !parentDir.equals(
"")) {
 
  165             caseDirTextField.setText(parentDir + caseName);
 
  166             wizPanel.setIsFinish(
true);
 
  168             caseDirTextField.setText(
"");
 
  169             wizPanel.setIsFinish(
false);
 
  202     private void initComponents() {
 
  204         caseTypeButtonGroup = 
new javax.swing.ButtonGroup();
 
  205         jLabel1 = 
new javax.swing.JLabel();
 
  206         caseNameLabel = 
new javax.swing.JLabel();
 
  207         caseDirLabel = 
new javax.swing.JLabel();
 
  208         caseNameTextField = 
new javax.swing.JTextField();
 
  209         caseParentDirTextField = 
new javax.swing.JTextField();
 
  210         caseDirBrowseButton = 
new javax.swing.JButton();
 
  211         jLabel2 = 
new javax.swing.JLabel();
 
  212         caseDirTextField = 
new javax.swing.JTextField();
 
  213         singleUserCaseRadioButton = 
new javax.swing.JRadioButton();
 
  214         multiUserCaseRadioButton = 
new javax.swing.JRadioButton();
 
  215         caseParentDirWarningLabel = 
new javax.swing.JLabel();
 
  216         caseTypeLabel = 
new javax.swing.JLabel();
 
  218         jLabel1.setFont(jLabel1.getFont().deriveFont(jLabel1.getFont().getStyle() | java.awt.Font.BOLD, 14));
 
  219         org.openide.awt.Mnemonics.setLocalizedText(jLabel1, 
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.jLabel1.text_1")); 
 
  221         caseNameLabel.setFont(caseNameLabel.getFont().deriveFont(caseNameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  222         org.openide.awt.Mnemonics.setLocalizedText(caseNameLabel, 
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.caseNameLabel.text_1")); 
 
  224         caseDirLabel.setFont(caseDirLabel.getFont().deriveFont(caseDirLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  225         org.openide.awt.Mnemonics.setLocalizedText(caseDirLabel, 
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.caseDirLabel.text")); 
 
  227         caseNameTextField.setFont(caseNameTextField.getFont().deriveFont(caseNameTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  228         caseNameTextField.setText(
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.caseNameTextField.text_1")); 
 
  230         caseParentDirTextField.setFont(caseParentDirTextField.getFont().deriveFont(caseParentDirTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  231         caseParentDirTextField.setText(
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.caseParentDirTextField.text")); 
 
  233         caseDirBrowseButton.setFont(caseDirBrowseButton.getFont().deriveFont(caseDirBrowseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  234         org.openide.awt.Mnemonics.setLocalizedText(caseDirBrowseButton, 
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.caseDirBrowseButton.text")); 
 
  235         caseDirBrowseButton.addActionListener(
new java.awt.event.ActionListener() {
 
  236             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  237                 caseDirBrowseButtonActionPerformed(evt);
 
  241         jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  242         org.openide.awt.Mnemonics.setLocalizedText(jLabel2, 
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.jLabel2.text_1")); 
 
  244         caseDirTextField.setEditable(
false);
 
  245         caseDirTextField.setFont(caseDirTextField.getFont().deriveFont(caseDirTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  246         caseDirTextField.setText(
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.caseDirTextField.text_1")); 
 
  248         caseTypeButtonGroup.add(singleUserCaseRadioButton);
 
  249         singleUserCaseRadioButton.setFont(singleUserCaseRadioButton.getFont().deriveFont(singleUserCaseRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  250         org.openide.awt.Mnemonics.setLocalizedText(singleUserCaseRadioButton, 
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.singleUserCaseRadioButton.text")); 
 
  251         singleUserCaseRadioButton.addActionListener(
new java.awt.event.ActionListener() {
 
  252             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  253                 singleUserCaseRadioButtonActionPerformed(evt);
 
  257         caseTypeButtonGroup.add(multiUserCaseRadioButton);
 
  258         multiUserCaseRadioButton.setFont(multiUserCaseRadioButton.getFont().deriveFont(multiUserCaseRadioButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  259         org.openide.awt.Mnemonics.setLocalizedText(multiUserCaseRadioButton, 
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.multiUserCaseRadioButton.text")); 
 
  260         multiUserCaseRadioButton.addActionListener(
new java.awt.event.ActionListener() {
 
  261             public void actionPerformed(java.awt.event.ActionEvent evt) {
 
  262                 multiUserCaseRadioButtonActionPerformed(evt);
 
  266         caseParentDirWarningLabel.setFont(caseParentDirWarningLabel.getFont().deriveFont(caseParentDirWarningLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  267         caseParentDirWarningLabel.setForeground(
new java.awt.Color(255, 0, 0));
 
  268         org.openide.awt.Mnemonics.setLocalizedText(caseParentDirWarningLabel, 
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.caseParentDirWarningLabel.text")); 
 
  270         caseTypeLabel.setFont(caseTypeLabel.getFont().deriveFont(caseTypeLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
 
  271         org.openide.awt.Mnemonics.setLocalizedText(caseTypeLabel, 
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class, 
"NewCaseVisualPanel1.caseTypeLabel.text")); 
 
  273         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  274         this.setLayout(layout);
 
  275         layout.setHorizontalGroup(
 
  276             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  277             .addGroup(layout.createSequentialGroup()
 
  279                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  280                     .addGroup(layout.createSequentialGroup()
 
  281                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  282                             .addComponent(jLabel2)
 
  283                             .addGroup(layout.createSequentialGroup()
 
  284                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
 
  285                                     .addComponent(caseDirTextField, javax.swing.GroupLayout.Alignment.LEADING)
 
  286                                     .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
 
  287                                         .addComponent(jLabel1)
 
  288                                         .addGap(0, 227, Short.MAX_VALUE))
 
  289                                     .addGroup(layout.createSequentialGroup()
 
  290                                         .addComponent(caseNameLabel)
 
  292                                         .addComponent(caseNameTextField))
 
  293                                     .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
 
  294                                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  295                                             .addComponent(caseDirLabel)
 
  296                                             .addComponent(caseTypeLabel))
 
  297                                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  298                                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  299                                             .addGroup(layout.createSequentialGroup()
 
  300                                                 .addComponent(singleUserCaseRadioButton)
 
  301                                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  302                                                 .addComponent(multiUserCaseRadioButton)
 
  303                                                 .addGap(0, 0, Short.MAX_VALUE))
 
  304                                             .addComponent(caseParentDirTextField))))
 
  305                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  306                                 .addComponent(caseDirBrowseButton)))
 
  308                     .addGroup(layout.createSequentialGroup()
 
  309                         .addComponent(caseParentDirWarningLabel)
 
  310                         .addGap(0, 0, Short.MAX_VALUE))))
 
  312         layout.setVerticalGroup(
 
  313             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  314             .addGroup(layout.createSequentialGroup()
 
  316                 .addComponent(jLabel1)
 
  318                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  319                     .addComponent(caseNameLabel)
 
  320                     .addComponent(caseNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 
  321                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  322                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  323                     .addComponent(caseDirLabel)
 
  324                     .addComponent(caseParentDirTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  325                     .addComponent(caseDirBrowseButton))
 
  326                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  327                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  328                     .addComponent(singleUserCaseRadioButton)
 
  329                     .addComponent(multiUserCaseRadioButton)
 
  330                     .addComponent(caseTypeLabel))
 
  331                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
 
  332                 .addComponent(jLabel2)
 
  333                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  334                 .addComponent(caseDirTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  336                 .addComponent(caseParentDirWarningLabel)
 
  337                 .addContainerGap(21, Short.MAX_VALUE))
 
  348     private void caseDirBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  349         fileChooser.setDragEnabled(
false);
 
  350         if (!caseParentDirTextField.getText().trim().equals(
"")) {
 
  351             fileChooser.setCurrentDirectory(
new File(caseParentDirTextField.getText()));
 
  353         fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
 
  354         int choice = fileChooser.showDialog((Component) evt.getSource(), NbBundle.getMessage(this.getClass(),
 
  355                 "NewCaseVisualPanel1.caseDirBrowse.selectButton.text"));
 
  356         if (JFileChooser.APPROVE_OPTION == choice) {
 
  357             String path = fileChooser.getSelectedFile().getPath();
 
  358             caseParentDirTextField.setText(path);
 
  362     private void singleUserCaseRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  366     private void multiUserCaseRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {
 
  371     private javax.swing.JButton caseDirBrowseButton;
 
  372     private javax.swing.JLabel caseDirLabel;
 
  373     private javax.swing.JTextField caseDirTextField;
 
  374     private javax.swing.JLabel caseNameLabel;
 
  375     private javax.swing.JTextField caseNameTextField;
 
  376     private javax.swing.JTextField caseParentDirTextField;
 
  377     private javax.swing.JLabel caseParentDirWarningLabel;
 
  378     private javax.swing.ButtonGroup caseTypeButtonGroup;
 
  379     private javax.swing.JLabel caseTypeLabel;
 
  380     private javax.swing.JLabel jLabel1;
 
  381     private javax.swing.JLabel jLabel2;
 
  382     private javax.swing.JRadioButton multiUserCaseRadioButton;
 
  383     private javax.swing.JRadioButton singleUserCaseRadioButton;
 
  393     public void insertUpdate(DocumentEvent e) {
 
  394         this.wizPanel.fireChangeEvent();
 
  406     public void removeUpdate(DocumentEvent e) {
 
  407         this.wizPanel.fireChangeEvent();
 
  417     public void changedUpdate(DocumentEvent e) {
 
  418         this.wizPanel.fireChangeEvent();
 
  429     public void updateUI(DocumentEvent e) {
 
  431         String caseName = getCaseName();
 
  432         String parentDir = getCaseParentDir();
 
  434         if (!caseName.equals(
"") && !parentDir.equals(
"")) {
 
  435             caseDirTextField.setText(parentDir + caseName);
 
  436             wizPanel.setIsFinish(
true);
 
  438             caseDirTextField.setText(
"");
 
  439             wizPanel.setIsFinish(
false);
 
void insertUpdate(DocumentEvent e)
void removeUpdate(DocumentEvent e)
void changedUpdate(DocumentEvent e)