19 package org.sleuthkit.autopsy.casemodule;
22 import java.awt.Component;
23 import org.openide.util.NbBundle;
26 import javax.swing.JFileChooser;
27 import javax.swing.JPanel;
28 import javax.swing.event.DocumentEvent;
29 import javax.swing.event.DocumentListener;
37 @SuppressWarnings(
"PMD.SingularField")
38 final class NewCaseVisualPanel1 extends JPanel implements DocumentListener {
40 private final JFileChooser fileChooser =
new JFileChooser();
41 private final NewCaseWizardPanel1 wizPanel;
48 NewCaseVisualPanel1(NewCaseWizardPanel1 wizPanel) {
49 this.wizPanel = wizPanel;
51 TextFieldListener listener =
new TextFieldListener();
52 caseNameTextField.getDocument().addDocumentListener(listener);
53 caseParentDirTextField.getDocument().addDocumentListener(listener);
54 caseParentDirWarningLabel.setVisible(
false);
63 caseNameTextField.setText(
"");
64 if (FeatureAccessUtils.canCreateMultiUserCases()) {
65 multiUserCaseRadioButton.setEnabled(
true);
66 multiUserCaseRadioButton.setSelected(
true);
68 multiUserCaseRadioButton.setEnabled(
false);
69 singleUserCaseRadioButton.setSelected(
true);
81 public String getName() {
82 return NbBundle.getMessage(this.getClass(),
"NewCaseVisualPanel1.getName.text");
90 String getCaseName() {
91 return this.caseNameTextField.getText().trim();
100 void setCaseParentDir(String caseParentDir) {
101 caseParentDirTextField.setText(caseParentDir);
111 String getCaseParentDir() {
112 String parentDir = this.caseParentDirTextField.getText().trim();
113 if (parentDir.endsWith(File.separator) ==
false) {
114 parentDir = parentDir + File.separator;
124 CaseType getCaseType() {
125 CaseType value = CaseType.SINGLE_USER_CASE;
126 if (singleUserCaseRadioButton.isSelected()) {
127 value = CaseType.SINGLE_USER_CASE;
128 }
else if (multiUserCaseRadioButton.isSelected()) {
129 value = CaseType.MULTI_USER_CASE;
139 private void handleUpdate() {
140 wizPanel.fireChangeEvent();
148 private void validateSettings() {
154 caseParentDirWarningLabel.setVisible(
false);
155 String parentDir = getCaseParentDir();
156 if (!PathValidator.isValidForCaseType(parentDir, getCaseType())) {
157 if (getCaseType() == CaseType.MULTI_USER_CASE) {
158 caseParentDirWarningLabel.setVisible(
true);
159 caseParentDirWarningLabel.setText(NbBundle.getMessage(
this.getClass(),
"NewCaseVisualPanel1.CaseFolderOnCDriveError.text"));
162 caseParentDirWarningLabel.setVisible(
true);
163 caseParentDirWarningLabel.setText(NbBundle.getMessage(
this.getClass(),
"NewCaseVisualPanel1.uncPath.error"));
164 wizPanel.setIsFinish(
false);
173 if(!PathValidator.isValidForRunningOnTarget(parentDir)){
174 caseParentDirWarningLabel.setVisible(
true);
175 if(PlatformUtil.isWindowsOS()){
176 caseParentDirWarningLabel.setText(NbBundle.getMessage(
this.getClass(),
"NewCaseVisualPanel1.CaseFolderOnInternalDriveWindowsError.text" ));
177 }
else if(System.getProperty(
"os.name").toLowerCase().contains(
"nux")) {
178 caseParentDirWarningLabel.setText(NbBundle.getMessage(
this.getClass(),
"NewCaseVisualPanel1.CaseFolderOnInternalDriveLinuxError.text"));
187 String caseName = getCaseName();
188 if (!caseName.equals(
"") && !parentDir.equals(
"")) {
189 caseDirTextField.setText(parentDir + caseName);
190 wizPanel.setIsFinish(
true);
192 caseDirTextField.setText(
"");
193 wizPanel.setIsFinish(
false);
226 private void initComponents() {
228 caseTypeButtonGroup =
new javax.swing.ButtonGroup();
229 caseNameLabel =
new javax.swing.JLabel();
230 caseDirLabel =
new javax.swing.JLabel();
231 caseNameTextField =
new javax.swing.JTextField();
232 caseParentDirTextField =
new javax.swing.JTextField();
233 caseDirBrowseButton =
new javax.swing.JButton();
234 caseDataStoredLabel =
new javax.swing.JLabel();
235 caseDirTextField =
new javax.swing.JTextField();
236 singleUserCaseRadioButton =
new javax.swing.JRadioButton();
237 multiUserCaseRadioButton =
new javax.swing.JRadioButton();
238 caseParentDirWarningLabel =
new javax.swing.JLabel();
239 caseTypeLabel =
new javax.swing.JLabel();
241 org.openide.awt.Mnemonics.setLocalizedText(caseNameLabel,
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.caseNameLabel.text_1"));
243 org.openide.awt.Mnemonics.setLocalizedText(caseDirLabel,
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.caseDirLabel.text"));
245 caseNameTextField.setText(
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.caseNameTextField.text_1"));
247 caseParentDirTextField.setText(
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.caseParentDirTextField.text"));
249 org.openide.awt.Mnemonics.setLocalizedText(caseDirBrowseButton,
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.caseDirBrowseButton.text"));
250 caseDirBrowseButton.addActionListener(
new java.awt.event.ActionListener() {
251 public void actionPerformed(java.awt.event.ActionEvent evt) {
252 caseDirBrowseButtonActionPerformed(evt);
256 org.openide.awt.Mnemonics.setLocalizedText(caseDataStoredLabel,
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.caseDataStoredLabel.text_1"));
258 caseDirTextField.setEditable(
false);
259 caseDirTextField.setText(
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.caseDirTextField.text_1"));
261 caseTypeButtonGroup.add(singleUserCaseRadioButton);
262 org.openide.awt.Mnemonics.setLocalizedText(singleUserCaseRadioButton,
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.singleUserCaseRadioButton.text"));
263 singleUserCaseRadioButton.addActionListener(
new java.awt.event.ActionListener() {
264 public void actionPerformed(java.awt.event.ActionEvent evt) {
265 singleUserCaseRadioButtonActionPerformed(evt);
269 caseTypeButtonGroup.add(multiUserCaseRadioButton);
270 org.openide.awt.Mnemonics.setLocalizedText(multiUserCaseRadioButton,
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.multiUserCaseRadioButton.text"));
271 multiUserCaseRadioButton.addActionListener(
new java.awt.event.ActionListener() {
272 public void actionPerformed(java.awt.event.ActionEvent evt) {
273 multiUserCaseRadioButtonActionPerformed(evt);
277 caseParentDirWarningLabel.setForeground(
new java.awt.Color(255, 0, 0));
278 org.openide.awt.Mnemonics.setLocalizedText(caseParentDirWarningLabel,
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.caseParentDirWarningLabel.text"));
280 org.openide.awt.Mnemonics.setLocalizedText(caseTypeLabel,
org.openide.util.NbBundle.getMessage(NewCaseVisualPanel1.class,
"NewCaseVisualPanel1.caseTypeLabel.text"));
282 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
283 this.setLayout(layout);
284 layout.setHorizontalGroup(
285 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
286 .addGroup(layout.createSequentialGroup()
288 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
289 .addGroup(layout.createSequentialGroup()
290 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
291 .addComponent(caseDataStoredLabel)
292 .addGroup(layout.createSequentialGroup()
293 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
294 .addComponent(caseDirTextField, javax.swing.GroupLayout.Alignment.LEADING)
295 .addGroup(layout.createSequentialGroup()
296 .addComponent(caseNameLabel)
297 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
298 .addComponent(caseNameTextField))
299 .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
300 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
301 .addComponent(caseDirLabel)
302 .addComponent(caseTypeLabel))
303 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
304 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
305 .addGroup(layout.createSequentialGroup()
306 .addComponent(singleUserCaseRadioButton)
307 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
308 .addComponent(multiUserCaseRadioButton)
309 .addGap(0, 192, Short.MAX_VALUE))
310 .addComponent(caseParentDirTextField))))
311 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
312 .addComponent(caseDirBrowseButton)))
314 .addGroup(layout.createSequentialGroup()
315 .addComponent(caseParentDirWarningLabel)
316 .addGap(0, 0, Short.MAX_VALUE))))
319 layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
new java.awt.Component[] {caseDirLabel, caseNameLabel, caseTypeLabel});
321 layout.setVerticalGroup(
322 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
323 .addGroup(layout.createSequentialGroup()
325 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
326 .addComponent(caseNameLabel)
327 .addComponent(caseNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
328 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
329 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
330 .addComponent(caseDirLabel)
331 .addComponent(caseParentDirTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
332 .addComponent(caseDirBrowseButton))
333 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
334 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
335 .addComponent(singleUserCaseRadioButton)
336 .addComponent(multiUserCaseRadioButton)
337 .addComponent(caseTypeLabel))
338 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
339 .addComponent(caseDataStoredLabel)
340 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
341 .addComponent(caseDirTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
343 .addComponent(caseParentDirWarningLabel)
344 .addContainerGap(115, Short.MAX_VALUE))
355 private void caseDirBrowseButtonActionPerformed(java.awt.event.ActionEvent evt) {
356 fileChooser.setDragEnabled(
false);
357 if (!caseParentDirTextField.getText().trim().equals(
"")) {
358 fileChooser.setCurrentDirectory(
new File(caseParentDirTextField.getText()));
360 fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
361 int choice = fileChooser.showDialog((Component) evt.getSource(), NbBundle.getMessage(this.getClass(),
362 "NewCaseVisualPanel1.caseDirBrowse.selectButton.text"));
363 if (JFileChooser.APPROVE_OPTION == choice) {
364 String path = fileChooser.getSelectedFile().getPath();
365 caseParentDirTextField.setText(path);
369 private void singleUserCaseRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {
373 private void multiUserCaseRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {
378 private javax.swing.JLabel caseDataStoredLabel;
379 private javax.swing.JButton caseDirBrowseButton;
380 private javax.swing.JLabel caseDirLabel;
381 private javax.swing.JTextField caseDirTextField;
382 private javax.swing.JLabel caseNameLabel;
383 private javax.swing.JTextField caseNameTextField;
384 private javax.swing.JTextField caseParentDirTextField;
385 private javax.swing.JLabel caseParentDirWarningLabel;
386 private javax.swing.ButtonGroup caseTypeButtonGroup;
387 private javax.swing.JLabel caseTypeLabel;
388 private javax.swing.JRadioButton multiUserCaseRadioButton;
389 private javax.swing.JRadioButton singleUserCaseRadioButton;
399 public void insertUpdate(DocumentEvent e) {
400 this.wizPanel.fireChangeEvent();
412 public void removeUpdate(DocumentEvent e) {
413 this.wizPanel.fireChangeEvent();
423 public void changedUpdate(DocumentEvent e) {
424 this.wizPanel.fireChangeEvent();
435 public void updateUI(DocumentEvent e) {
437 String caseName = getCaseName();
438 String parentDir = getCaseParentDir();
440 if (!caseName.equals(
"") && !parentDir.equals(
"")) {
441 caseDirTextField.setText(parentDir + caseName);
442 wizPanel.setIsFinish(
true);
444 caseDirTextField.setText(
"");
445 wizPanel.setIsFinish(
false);
void insertUpdate(DocumentEvent e)
void removeUpdate(DocumentEvent e)
void changedUpdate(DocumentEvent e)