Autopsy  4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
CasePropertiesPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2017 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 package org.sleuthkit.autopsy.casemodule;
21 
22 import java.nio.file.Paths;
23 import java.util.Map;
24 import java.util.logging.Level;
25 import javax.swing.JOptionPane;
26 import javax.swing.JPanel;
27 import org.openide.DialogDescriptor;
28 import org.openide.DialogDisplayer;
29 import org.openide.NotifyDescriptor;
30 import org.openide.util.NbBundle;
31 import org.openide.util.actions.CallableSystemAction;
33 
38 class CasePropertiesPanel extends javax.swing.JPanel {
39 
40  private static final long serialVersionUID = 1L;
41  private Case current = null;
42  private static JPanel caller; // panel for error
43 
44  CasePropertiesPanel(Case currentCase, String crDate, String caseDir, Map<Long, String> imgPaths) throws CaseMetadata.CaseMetadataException {
45  initComponents();
46  caseNameTextField.setText(currentCase.getDisplayName());
47  String caseNumber = currentCase.getNumber();
48  if (!caseNumber.isEmpty()) {
49  caseNumberField.setText(caseNumber);
50  } else {
51  caseNumberField.setText("N/A");
52  }
53  String examiner = currentCase.getExaminer();
54  if (!examiner.isEmpty()) {
55  examinerField.setText(examiner);
56  } else {
57  examinerField.setText("N/A");
58  }
59  crDateField.setText(crDate);
60  caseDirField.setText(caseDir);
61  current = currentCase;
62 
63  CaseMetadata caseMetadata = currentCase.getCaseMetadata();
64  if (caseMetadata.getCaseType() == Case.CaseType.SINGLE_USER_CASE) {
65  dbNameField.setText(Paths.get(caseMetadata.getCaseDirectory(), caseMetadata.getCaseDatabaseName()).toString());
66  } else {
67  dbNameField.setText(caseMetadata.getCaseDatabaseName());
68  }
69  Case.CaseType caseType = caseMetadata.getCaseType();
70  caseTypeField.setText(caseType.getLocalizedDisplayName());
71  if (caseType == Case.CaseType.SINGLE_USER_CASE) {
72  deleteCaseButton.setEnabled(true);
73  } else {
74  deleteCaseButton.setEnabled(false);
75  }
76  }
77 
92  @SuppressWarnings("unchecked")
93  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
94  private void initComponents() {
95 
96  jScrollPane1 = new javax.swing.JScrollPane();
97  jTextArea1 = new javax.swing.JTextArea();
98  jPanel1 = new javax.swing.JPanel();
99  caseNameLabel = new javax.swing.JLabel();
100  crDateLabel = new javax.swing.JLabel();
101  caseDirLabel = new javax.swing.JLabel();
102  caseNameTextField = new javax.swing.JTextField();
103  updateCaseNameButton = new javax.swing.JButton();
104  deleteCaseButton = new javax.swing.JButton();
105  caseNumberLabel = new javax.swing.JLabel();
106  examinerLabel = new javax.swing.JLabel();
107  lbDbType = new javax.swing.JLabel();
108  lbDbName = new javax.swing.JLabel();
109  caseNumberField = new javax.swing.JLabel();
110  examinerField = new javax.swing.JLabel();
111  crDateField = new javax.swing.JLabel();
112  caseDirField = new javax.swing.JLabel();
113  dbNameField = new javax.swing.JLabel();
114  caseTypeField = new javax.swing.JLabel();
115 
116  jTextArea1.setColumns(20);
117  jTextArea1.setRows(5);
118  jScrollPane1.setViewportView(jTextArea1);
119 
120  caseNameLabel.setFont(caseNameLabel.getFont().deriveFont(caseNameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
121  caseNameLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.caseNameLabel.text")); // NOI18N
122 
123  crDateLabel.setFont(crDateLabel.getFont().deriveFont(crDateLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
124  crDateLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.crDateLabel.text")); // NOI18N
125 
126  caseDirLabel.setFont(caseDirLabel.getFont().deriveFont(caseDirLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
127  caseDirLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.caseDirLabel.text")); // NOI18N
128 
129  caseNameTextField.setFont(caseNameTextField.getFont().deriveFont(caseNameTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
130  caseNameTextField.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.caseNameTextField.text")); // NOI18N
131 
132  updateCaseNameButton.setFont(updateCaseNameButton.getFont().deriveFont(updateCaseNameButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
133  updateCaseNameButton.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.updateCaseNameButton.text")); // NOI18N
134  updateCaseNameButton.addActionListener(new java.awt.event.ActionListener() {
135  public void actionPerformed(java.awt.event.ActionEvent evt) {
136  updateCaseNameButtonActionPerformed(evt);
137  }
138  });
139 
140  deleteCaseButton.setFont(deleteCaseButton.getFont().deriveFont(deleteCaseButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
141  deleteCaseButton.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.deleteCaseButton.text")); // NOI18N
142  deleteCaseButton.addActionListener(new java.awt.event.ActionListener() {
143  public void actionPerformed(java.awt.event.ActionEvent evt) {
144  deleteCaseButtonActionPerformed(evt);
145  }
146  });
147 
148  caseNumberLabel.setFont(caseNumberLabel.getFont().deriveFont(caseNumberLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
149  caseNumberLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.caseNumberLabel.text")); // NOI18N
150 
151  examinerLabel.setFont(examinerLabel.getFont().deriveFont(examinerLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
152  examinerLabel.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.examinerLabel.text")); // NOI18N
153 
154  lbDbType.setFont(lbDbType.getFont().deriveFont(lbDbType.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
155  lbDbType.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.lbDbType.text")); // NOI18N
156 
157  lbDbName.setFont(lbDbName.getFont().deriveFont(lbDbName.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
158  lbDbName.setText(org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class, "CasePropertiesPanel.lbDbName.text")); // NOI18N
159 
160  caseDirField.setMinimumSize(new java.awt.Dimension(25, 14));
161 
162  dbNameField.setMinimumSize(new java.awt.Dimension(25, 14));
163 
164  caseTypeField.setMaximumSize(new java.awt.Dimension(1, 0));
165 
166  javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
167  jPanel1.setLayout(jPanel1Layout);
168  jPanel1Layout.setHorizontalGroup(
169  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
170  .addGroup(jPanel1Layout.createSequentialGroup()
171  .addContainerGap()
172  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
173  .addGroup(jPanel1Layout.createSequentialGroup()
174  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
175  .addComponent(lbDbName)
176  .addComponent(lbDbType)
177  .addComponent(caseDirLabel))
178  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
179  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
180  .addComponent(caseDirField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
181  .addComponent(caseTypeField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
182  .addComponent(dbNameField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
183  .addGroup(jPanel1Layout.createSequentialGroup()
184  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
185  .addComponent(crDateLabel)
186  .addComponent(examinerLabel)
187  .addComponent(caseNumberLabel))
188  .addGap(18, 18, 18)
189  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
190  .addComponent(examinerField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
191  .addComponent(caseNumberField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
192  .addGroup(jPanel1Layout.createSequentialGroup()
193  .addComponent(caseNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
194  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
195  .addComponent(updateCaseNameButton, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE))
196  .addComponent(crDateField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
197  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
198  .addGap(0, 0, Short.MAX_VALUE)
199  .addComponent(deleteCaseButton, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)))
200  .addContainerGap())
201  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
202  .addGroup(jPanel1Layout.createSequentialGroup()
203  .addContainerGap()
204  .addComponent(caseNameLabel)
205  .addContainerGap(392, Short.MAX_VALUE)))
206  );
207  jPanel1Layout.setVerticalGroup(
208  jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
209  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
210  .addContainerGap()
211  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
212  .addComponent(caseNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
213  .addComponent(updateCaseNameButton))
214  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
215  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
216  .addGroup(jPanel1Layout.createSequentialGroup()
217  .addComponent(caseNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
218  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
219  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
220  .addComponent(examinerField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
221  .addComponent(examinerLabel))
222  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
223  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
224  .addComponent(crDateField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
225  .addComponent(crDateLabel, javax.swing.GroupLayout.Alignment.TRAILING))
226  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
227  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
228  .addComponent(caseDirLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
229  .addComponent(caseDirField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
230  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
231  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
232  .addComponent(caseTypeField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
233  .addComponent(lbDbType))
234  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
235  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
236  .addComponent(lbDbName)
237  .addComponent(dbNameField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)))
238  .addComponent(caseNumberLabel))
239  .addGap(10, 10, 10)
240  .addComponent(deleteCaseButton)
241  .addContainerGap())
242  .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
243  .addGroup(jPanel1Layout.createSequentialGroup()
244  .addContainerGap()
245  .addComponent(caseNameLabel)
246  .addContainerGap(173, Short.MAX_VALUE)))
247  );
248 
249  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
250  this.setLayout(layout);
251  layout.setHorizontalGroup(
252  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
253  .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
254  );
255  layout.setVerticalGroup(
256  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
257  .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
258  );
259  }// </editor-fold>//GEN-END:initComponents
260 
266  private void updateCaseNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_updateCaseNameButtonActionPerformed
267  String oldCaseName = Case.getCurrentCase().getDisplayName();
268  String newCaseName = caseNameTextField.getText();
269  // check if the old and new case name is not equal
270  if (!oldCaseName.equals(newCaseName)) {
271 
272  // check if the case name is empty
273  if (newCaseName.trim().isEmpty()) {
274  JOptionPane.showMessageDialog(caller,
275  NbBundle.getMessage(this.getClass(),
276  "CasePropertiesForm.updateCaseName.msgDlg.empty.msg"),
277  NbBundle.getMessage(this.getClass(),
278  "CasePropertiesForm.updateCaseName.msgDlg.empty.title"),
279  JOptionPane.ERROR_MESSAGE);
280  } else // check if case Name contain one of this following symbol:
281  // \ / : * ? " < > |
282  {
283  if (newCaseName.contains("\\") || newCaseName.contains("/") || newCaseName.contains(":")
284  || newCaseName.contains("*") || newCaseName.contains("?") || newCaseName.contains("\"")
285  || newCaseName.contains("<") || newCaseName.contains(">") || newCaseName.contains("|")) {
286  String errorMsg = NbBundle
287  .getMessage(this.getClass(), "CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.msg");
288  JOptionPane.showMessageDialog(caller, errorMsg,
289  NbBundle.getMessage(this.getClass(),
290  "CasePropertiesForm.updateCaseName.msgDlg.invalidSymbols.title"),
291  JOptionPane.ERROR_MESSAGE);
292  } else {
293  // ask for the confirmation first
294  String confMsg = NbBundle
295  .getMessage(this.getClass(), "CasePropertiesForm.updateCaseName.confMsg.msg", oldCaseName,
296  newCaseName);
297  NotifyDescriptor d = new NotifyDescriptor.Confirmation(confMsg,
298  NbBundle.getMessage(this.getClass(),
299  "CasePropertiesForm.updateCaseName.confMsg.title"),
300  NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.WARNING_MESSAGE);
301  d.setValue(NotifyDescriptor.NO_OPTION);
302 
303  Object res = DialogDisplayer.getDefault().notify(d);
304  if (res != null && res == DialogDescriptor.YES_OPTION) {
305  // if user select "Yes"
306  String oldPath = current.getCaseMetadata().getFilePath().toString();
307  try {
308  current.updateCaseName(oldCaseName, oldPath, newCaseName, oldPath);
309  } catch (CaseActionException ex) {
310  Logger.getLogger(CasePropertiesPanel.class.getName()).log(Level.WARNING, "Error: problem updating case name.", ex); //NON-NLS
311  }
312  }
313  }
314  }
315  }
316  }//GEN-LAST:event_updateCaseNameButtonActionPerformed
317 
318  private void deleteCaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteCaseButtonActionPerformed
319  CallableSystemAction.get(CaseDeleteAction.class).actionPerformed(evt);
320  }//GEN-LAST:event_deleteCaseButtonActionPerformed
321 
322 
323  // Variables declaration - do not modify//GEN-BEGIN:variables
324  private javax.swing.JLabel caseDirField;
325  private javax.swing.JLabel caseDirLabel;
326  private javax.swing.JLabel caseNameLabel;
327  private javax.swing.JTextField caseNameTextField;
328  private javax.swing.JLabel caseNumberField;
329  private javax.swing.JLabel caseNumberLabel;
330  private javax.swing.JLabel caseTypeField;
331  private javax.swing.JLabel crDateField;
332  private javax.swing.JLabel crDateLabel;
333  private javax.swing.JLabel dbNameField;
334  private javax.swing.JButton deleteCaseButton;
335  private javax.swing.JLabel examinerField;
336  private javax.swing.JLabel examinerLabel;
337  private javax.swing.JPanel jPanel1;
338  private javax.swing.JScrollPane jScrollPane1;
339  private javax.swing.JTextArea jTextArea1;
340  private javax.swing.JLabel lbDbName;
341  private javax.swing.JLabel lbDbType;
342  private javax.swing.JButton updateCaseNameButton;
343  // End of variables declaration//GEN-END:variables
344 
345 }

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