Autopsy  4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
NewCaseVisualPanel1.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2015 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.casemodule;
20 
21 import org.openide.util.NbBundle;
22 
23 import java.awt.*;
24 import java.io.File;
25 import javax.swing.JFileChooser;
26 import javax.swing.JPanel;
27 import javax.swing.event.DocumentEvent;
28 import javax.swing.event.DocumentListener;
32 
36 final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
37 
38  private final JFileChooser fileChooser = new JFileChooser();
39  private final NewCaseWizardPanel1 wizPanel;
40 
46  NewCaseVisualPanel1(NewCaseWizardPanel1 wizPanel) {
47  this.wizPanel = wizPanel;
48  initComponents();
49  TextFieldListener listener = new TextFieldListener();
50  caseNameTextField.getDocument().addDocumentListener(listener);
51  caseParentDirTextField.getDocument().addDocumentListener(listener);
52  caseParentDirWarningLabel.setVisible(false);
53  }
54 
60  void readSettings() {
61  caseNameTextField.setText("");
62  if (UserPreferences.getIsMultiUserModeEnabled()) {
63  multiUserCaseRadioButton.setEnabled(true);
64  multiUserCaseRadioButton.setSelected(true);
65  } else {
66  multiUserCaseRadioButton.setEnabled(false);
67  singleUserCaseRadioButton.setSelected(true);
68  }
69  validateSettings();
70  }
71 
78  @Override
79  public String getName() {
80  return NbBundle.getMessage(this.getClass(), "NewCaseVisualPanel1.getName.text");
81  }
82 
88  String getCaseName() {
89  return this.caseNameTextField.getText();
90  }
91 
98  void setCaseParentDir(String caseParentDir) {
99  caseParentDirTextField.setText(caseParentDir);
100  validateSettings();
101  }
102 
109  String getCaseParentDir() {
110  String parentDir = this.caseParentDirTextField.getText();
111  if (parentDir.endsWith(File.separator) == false) {
112  parentDir = parentDir + File.separator;
113  }
114  return parentDir;
115  }
116 
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;
128  }
129  return value;
130  }
131 
137  private void handleUpdate() {
138  wizPanel.fireChangeEvent();
139  validateSettings();
140  }
141 
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"));
156  }
157 
163  String caseName = getCaseName();
164  if (!caseName.equals("") && !parentDir.equals("")) {
165  caseDirTextField.setText(parentDir + caseName);
166  wizPanel.setIsFinish(true);
167  } else {
168  caseDirTextField.setText("");
169  wizPanel.setIsFinish(false);
170  }
171  }
172 
177  private class TextFieldListener implements DocumentListener {
178 
179  @Override
180  public void insertUpdate(DocumentEvent e) {
181  handleUpdate();
182  }
183 
184  @Override
185  public void removeUpdate(DocumentEvent e) {
186  handleUpdate();
187  }
188 
189  @Override
190  public void changedUpdate(DocumentEvent e) {
191  handleUpdate();
192  }
193 
194  }
195 
201  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
202  private void initComponents() {
203 
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();
217 
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")); // NOI18N
220 
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")); // NOI18N
223 
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")); // NOI18N
226 
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")); // NOI18N
229 
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")); // NOI18N
232 
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")); // NOI18N
235  caseDirBrowseButton.addActionListener(new java.awt.event.ActionListener() {
236  public void actionPerformed(java.awt.event.ActionEvent evt) {
237  caseDirBrowseButtonActionPerformed(evt);
238  }
239  });
240 
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")); // NOI18N
243 
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")); // NOI18N
247 
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")); // NOI18N
251  singleUserCaseRadioButton.addActionListener(new java.awt.event.ActionListener() {
252  public void actionPerformed(java.awt.event.ActionEvent evt) {
253  singleUserCaseRadioButtonActionPerformed(evt);
254  }
255  });
256 
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")); // NOI18N
260  multiUserCaseRadioButton.addActionListener(new java.awt.event.ActionListener() {
261  public void actionPerformed(java.awt.event.ActionEvent evt) {
262  multiUserCaseRadioButtonActionPerformed(evt);
263  }
264  });
265 
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")); // NOI18N
269 
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")); // NOI18N
272 
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()
278  .addContainerGap()
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)
291  .addGap(26, 26, 26)
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)))
307  .addContainerGap())
308  .addGroup(layout.createSequentialGroup()
309  .addComponent(caseParentDirWarningLabel)
310  .addGap(0, 0, Short.MAX_VALUE))))
311  );
312  layout.setVerticalGroup(
313  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
314  .addGroup(layout.createSequentialGroup()
315  .addGap(31, 31, 31)
316  .addComponent(jLabel1)
317  .addGap(18, 18, 18)
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)
335  .addGap(27, 27, 27)
336  .addComponent(caseParentDirWarningLabel)
337  .addContainerGap(21, Short.MAX_VALUE))
338  );
339  }// </editor-fold>//GEN-END:initComponents
340 
348  private void caseDirBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_caseDirBrowseButtonActionPerformed
349  fileChooser.setDragEnabled(false);
350  if (!caseParentDirTextField.getText().trim().equals("")) {
351  fileChooser.setCurrentDirectory(new File(caseParentDirTextField.getText()));
352  }
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);
359  }
360  }//GEN-LAST:event_caseDirBrowseButtonActionPerformed
361 
362  private void singleUserCaseRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_singleUserCaseRadioButtonActionPerformed
363  handleUpdate();
364  }//GEN-LAST:event_singleUserCaseRadioButtonActionPerformed
365 
366  private void multiUserCaseRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_multiUserCaseRadioButtonActionPerformed
367  handleUpdate();
368  }//GEN-LAST:event_multiUserCaseRadioButtonActionPerformed
369 
370  // Variables declaration - do not modify//GEN-BEGIN:variables
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;
384  // End of variables declaration//GEN-END:variables
385 
392  @Override
393  public void insertUpdate(DocumentEvent e) {
394  this.wizPanel.fireChangeEvent();
395  updateUI(e);
396  }
397 
405  @Override
406  public void removeUpdate(DocumentEvent e) {
407  this.wizPanel.fireChangeEvent();
408  updateUI(e);
409  }
410 
416  @Override
417  public void changedUpdate(DocumentEvent e) {
418  this.wizPanel.fireChangeEvent();
419  updateUI(e);
420  }
421 
429  public void updateUI(DocumentEvent e) {
430 
431  String caseName = getCaseName();
432  String parentDir = getCaseParentDir();
433 
434  if (!caseName.equals("") && !parentDir.equals("")) {
435  caseDirTextField.setText(parentDir + caseName);
436  wizPanel.setIsFinish(true);
437  } else {
438  caseDirTextField.setText("");
439  wizPanel.setIsFinish(false);
440  }
441  }
442 }

Copyright © 2012-2016 Basis Technology. Generated on: Mon Jan 2 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.