Autopsy  4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
CasePropertiesForm.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2016 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 
20  /*
21  * CasePropertiesForm.java
22  *
23  * Created on Mar 14, 2011, 1:48:20 PM
24  */
25 package org.sleuthkit.autopsy.casemodule;
26 
27 import java.io.File;
28 import java.util.Map;
29 import java.util.logging.Level;
30 import javax.swing.JOptionPane;
31 import javax.swing.JPanel;
32 import org.openide.DialogDescriptor;
33 import org.openide.DialogDisplayer;
34 import org.openide.NotifyDescriptor;
35 import org.openide.util.NbBundle;
36 import org.openide.util.actions.CallableSystemAction;
38 
43 class CasePropertiesForm extends javax.swing.JPanel {
44 
45  private static final long serialVersionUID = 1L;
46 
47  private Case current = null;
48  private static JPanel caller; // panel for error
49 
50  // Shrink a path to fit in targetLength (if necessary), by replaceing part
51  // of the path with "...". Ex: "C:\Users\bob\...\folder\other\Image.img"
52  private String shrinkPath(String path, int targetLength) {
53  if (path.length() > targetLength) {
54  String fill = "...";
55 
56  int partsLength = targetLength - fill.length();
57 
58  String front = path.substring(0, partsLength / 4);
59  int frontSep = front.lastIndexOf(File.separatorChar);
60  if (frontSep != -1) {
61  front = front.substring(0, frontSep + 1);
62  }
63 
64  String back = path.substring(partsLength * 3 / 4);
65  int backSep = back.indexOf(File.separatorChar);
66  if (backSep != -1) {
67  back = back.substring(backSep);
68  }
69  return back + fill + front;
70  } else {
71  return path;
72  }
73  }
74 
78  CasePropertiesForm(Case currentCase, String crDate, String caseDir, Map<Long, String> imgPaths) throws CaseMetadata.CaseMetadataException {
79  initComponents();
80  caseNameTextField.setText(currentCase.getName());
81  String caseNumber = currentCase.getNumber();
82  if (!caseNumber.equals("")) {
83  caseNumberField.setText(caseNumber);
84  } else {
85  caseNumberField.setText("N/A");
86  }
87  String examiner = currentCase.getExaminer();
88  if (!examiner.equals("")) {
89  examinerField.setText(examiner);
90  } else {
91  examinerField.setText("N/A");
92  }
93  crDateField.setText(crDate);
94  caseDirField.setText(caseDir);
95  current = currentCase;
96 
97  CaseMetadata caseMetadata = currentCase.getCaseMetadata();
98  if (caseMetadata.getCaseType() == Case.CaseType.SINGLE_USER_CASE) {
99  dbNameField.setText(caseMetadata.getCaseDatabasePath());
100  } else {
101  dbNameField.setText(caseMetadata.getCaseDatabaseName());
102  }
103  Case.CaseType caseType = caseMetadata.getCaseType();
104  caseTypeField.setText(caseType.getLocalizedDisplayName());
105  if (caseType == Case.CaseType.SINGLE_USER_CASE) {
106  deleteCaseButton.setEnabled(true);
107  } else {
108  deleteCaseButton.setEnabled(false);
109  }
110  }
111 
126  @SuppressWarnings("unchecked")
127  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
128  private void initComponents() {
129 
130  jScrollPane1 = new javax.swing.JScrollPane();
131  jTextArea1 = new javax.swing.JTextArea();
132  jPanel1 = new javax.swing.JPanel();
133  caseNameLabel = new javax.swing.JLabel();
134  crDateLabel = new javax.swing.JLabel();
135  caseDirLabel = new javax.swing.JLabel();
136  caseNameTextField = new javax.swing.JTextField();
137  updateCaseNameButton = new javax.swing.JButton();
138  deleteCaseButton = new javax.swing.JButton();
139  caseNumberLabel = new javax.swing.JLabel();
140  examinerLabel = new javax.swing.JLabel();
141  lbDbType = new javax.swing.JLabel();
142  lbDbName = new javax.swing.JLabel();
143  caseNumberField = new javax.swing.JLabel();
144  examinerField = new javax.swing.JLabel();
145  crDateField = new javax.swing.JLabel();
146  caseDirField = new javax.swing.JLabel();
147  dbNameField = new javax.swing.JLabel();
148  caseTypeField = new javax.swing.JLabel();
149 
150  jTextArea1.setColumns(20);
151  jTextArea1.setRows(5);
152  jScrollPane1.setViewportView(jTextArea1);
153 
154  caseNameLabel.setFont(caseNameLabel.getFont().deriveFont(caseNameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
155  caseNameLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.caseNameLabel.text")); // NOI18N
156 
157  crDateLabel.setFont(crDateLabel.getFont().deriveFont(crDateLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
158  crDateLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.crDateLabel.text")); // NOI18N
159 
160  caseDirLabel.setFont(caseDirLabel.getFont().deriveFont(caseDirLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
161  caseDirLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.caseDirLabel.text")); // NOI18N
162 
163  caseNameTextField.setFont(caseNameTextField.getFont().deriveFont(caseNameTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
164  caseNameTextField.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.caseNameTextField.text")); // NOI18N
165  caseNameTextField.addActionListener(new java.awt.event.ActionListener() {
166  public void actionPerformed(java.awt.event.ActionEvent evt) {
167  caseNameTextFieldActionPerformed(evt);
168  }
169  });
170 
171  updateCaseNameButton.setFont(updateCaseNameButton.getFont().deriveFont(updateCaseNameButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
172  updateCaseNameButton.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.updateCaseNameButton.text")); // NOI18N
173  updateCaseNameButton.addActionListener(new java.awt.event.ActionListener() {
174  public void actionPerformed(java.awt.event.ActionEvent evt) {
175  updateCaseNameButtonActionPerformed(evt);
176  }
177  });
178 
179  deleteCaseButton.setFont(deleteCaseButton.getFont().deriveFont(deleteCaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
180  deleteCaseButton.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.deleteCaseButton.text")); // NOI18N
181  deleteCaseButton.addActionListener(new java.awt.event.ActionListener() {
182  public void actionPerformed(java.awt.event.ActionEvent evt) {
183  deleteCaseButtonActionPerformed(evt);
184  }
185  });
186 
187  caseNumberLabel.setFont(caseNumberLabel.getFont().deriveFont(caseNumberLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
188  caseNumberLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.caseNumberLabel.text")); // NOI18N
189 
190  examinerLabel.setFont(examinerLabel.getFont().deriveFont(examinerLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
191  examinerLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.examinerLabel.text")); // NOI18N
192 
193  lbDbType.setFont(lbDbType.getFont().deriveFont(lbDbType.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
194  lbDbType.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.lbDbType.text")); // NOI18N
195 
196  lbDbName.setFont(lbDbName.getFont().deriveFont(lbDbName.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
197  lbDbName.setText(org.openide.util.NbBundle.getMessage(CasePropertiesForm.class, "CasePropertiesForm.lbDbName.text")); // NOI18N
198 
199  caseDirField.setMinimumSize(new java.awt.Dimension(25, 14));
200 
201  dbNameField.setMinimumSize(new java.awt.Dimension(25, 14));
202 
203  caseTypeField.setMaximumSize(new java.awt.Dimension(1, 0));
204 
205  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
206  jPanel1.setLayout(jPanel1Layout);
207  jPanel1Layout.setHorizontalGroup(
208  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
209  .addGroup(jPanel1Layout.createSequentialGroup()
210  .addContainerGap()
211  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
212  .addGroup(jPanel1Layout.createSequentialGroup()
213  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
214  .addComponent(lbDbName)
215  .addComponent(lbDbType)
216  .addComponent(caseDirLabel))
217  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
218  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
219  .addComponent(caseDirField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
220  .addComponent(caseTypeField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
221  .addComponent(dbNameField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
222  .addGroup(jPanel1Layout.createSequentialGroup()
223  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
224  .addComponent(crDateLabel)
225  .addComponent(examinerLabel)
226  .addComponent(caseNumberLabel))
227  .addGap(18, 18, 18)
228  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
229  .addComponent(examinerField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
230  .addComponent(caseNumberField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
231  .addGroup(jPanel1Layout.createSequentialGroup()
232  .addComponent(caseNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
233  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
234  .addComponent(updateCaseNameButton, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE))
235  .addComponent(crDateField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
236  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
237  .addGap(0, 0, Short.MAX_VALUE)
238  .addComponent(deleteCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)))
239  .addContainerGap())
240  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
241  .addGroup(jPanel1Layout.createSequentialGroup()
242  .addContainerGap()
243  .addComponent(caseNameLabel)
244  .addContainerGap(392, Short.MAX_VALUE)))
245  );
246  jPanel1Layout.setVerticalGroup(
247  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
248  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
249  .addContainerGap()
250  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
251  .addComponent(caseNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
252  .addComponent(updateCaseNameButton))
253  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
254  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
255  .addGroup(jPanel1Layout.createSequentialGroup()
256  .addComponent(caseNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
257  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
258  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
259  .addComponent(examinerField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
260  .addComponent(examinerLabel))
261  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
262  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
263  .addComponent(crDateField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
264  .addComponent(crDateLabel, javax.swing.GroupLayout.Alignment.TRAILING))
265  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
266  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
267  .addComponent(caseDirLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
268  .addComponent(caseDirField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
269  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
270  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
271  .addComponent(caseTypeField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
272  .addComponent(lbDbType))
273  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
274  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
275  .addComponent(lbDbName)
276  .addComponent(dbNameField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)))
277  .addComponent(caseNumberLabel))
278  .addGap(10, 10, 10)
279  .addComponent(deleteCaseButton)
280  .addContainerGap())
281  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
282  .addGroup(jPanel1Layout.createSequentialGroup()
283  .addContainerGap()
284  .addComponent(caseNameLabel)
285  .addContainerGap(173, Short.MAX_VALUE)))
286  );
287 
288  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
289  this.setLayout(layout);
290  layout.setHorizontalGroup(
291  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
292  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
293  );
294  layout.setVerticalGroup(
295  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
296  .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
297  );
298  }// </editor-fold>//GEN-END:initComponents
299 
305  private void updateCaseNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_updateCaseNameButtonActionPerformed
306  String oldCaseName = Case.getCurrentCase().getName();
307  String newCaseName = caseNameTextField.getText();
308  // check if the old and new case name is not equal
309  if (!oldCaseName.equals(newCaseName)) {
310 
311  // check if the case name is empty
312  if (newCaseName.trim().equals("")) {
313  JOptionPane.showMessageDialog(caller,
314  NbBundle.getMessage(this.getClass(),
315  "CasePropertiesForm.updateCaseName.msgDlg.empty.msg"),
316  NbBundle.getMessage(this.getClass(),
317  "CasePropertiesForm.updateCaseName.msgDlg.empty.title"),
318  JOptionPane.ERROR_MESSAGE);
319  } else // check if case Name contain one of this following symbol:
320  // \ / : * ? " < > |
321  if (newCaseName.contains("\\") || newCaseName.contains("/") || newCaseName.contains(":")
322  || newCaseName.contains("*") || newCaseName.contains("?") || newCaseName.contains("\"")
323  || newCaseName.contains("<") || newCaseName.contains(">") || newCaseName.contains("|")) {
324  String errorMsg = NbBundle
325  .getMessage(this.getClass(), "CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.msg");
326  JOptionPane.showMessageDialog(caller, errorMsg,
327  NbBundle.getMessage(this.getClass(),
328  "CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.title"),
329  JOptionPane.ERROR_MESSAGE);
330  } else {
331  // ask for the confirmation first
332  String confMsg = NbBundle
333  .getMessage(this.getClass(), "CasePropertiesForm.updateCaseName.confMsg.msg", oldCaseName,
334  newCaseName);
335  NotifyDescriptor d = new NotifyDescriptor.Confirmation(confMsg,
336  NbBundle.getMessage(this.getClass(),
337  "CasePropertiesForm.updateCaseName.confMsg.title"),
338  NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE);
339  d.setValue(NotifyDescriptor.NO_OPTION);
340 
341  Object res = DialogDisplayer.getDefault().notify(d);
342  if (res != null && res == DialogDescriptor.YES_OPTION) {
343  // if user select "Yes"
344  String oldPath = current.getCaseMetadata().getFilePath().toString();
345  try {
346  current.updateCaseName(oldCaseName, oldPath, newCaseName, oldPath);
347  } catch (Exception ex) {
348  Logger.getLogger(CasePropertiesForm.class.getName()).log(Level.WARNING, "Error: problem updating case name.", ex); //NON-NLS
349  }
350  }
351  }
352  }
353  }//GEN-LAST:event_updateCaseNameButtonActionPerformed
354 
355  private void deleteCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteCaseButtonActionPerformed
356  CallableSystemAction.get(CaseDeleteAction.class).actionPerformed(evt);
357  }//GEN-LAST:event_deleteCaseButtonActionPerformed
358 
359  private void caseNameTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_caseNameTextFieldActionPerformed
360  // TODO add your handling code here:
361  }//GEN-LAST:event_caseNameTextFieldActionPerformed
362 
363 
364  // Variables declaration - do not modify//GEN-BEGIN:variables
365  private javax.swing.JLabel caseDirField;
366  private javax.swing.JLabel caseDirLabel;
367  private javax.swing.JLabel caseNameLabel;
368  private javax.swing.JTextField caseNameTextField;
369  private javax.swing.JLabel caseNumberField;
370  private javax.swing.JLabel caseNumberLabel;
371  private javax.swing.JLabel caseTypeField;
372  private javax.swing.JLabel crDateField;
373  private javax.swing.JLabel crDateLabel;
374  private javax.swing.JLabel dbNameField;
375  private javax.swing.JButton deleteCaseButton;
376  private javax.swing.JLabel examinerField;
377  private javax.swing.JLabel examinerLabel;
378  private javax.swing.JPanel jPanel1;
379  private javax.swing.JScrollPane jScrollPane1;
380  private javax.swing.JTextArea jTextArea1;
381  private javax.swing.JLabel lbDbName;
382  private javax.swing.JLabel lbDbType;
383  private javax.swing.JButton updateCaseNameButton;
384  // End of variables declaration//GEN-END:variables
385 
386 }

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.