19 package org.sleuthkit.autopsy.casemodule;
21 import java.nio.file.Paths;
22 import java.util.logging.Level;
23 import org.openide.util.NbBundle;
31 class CasePropertiesPanel
extends javax.swing.JPanel {
33 private static final long serialVersionUID = 1L;
34 private static final Logger LOGGER = Logger.getLogger(CasePropertiesPanel.class.getName());
35 private final Case theCase;
43 CasePropertiesPanel(Case aCase) {
46 caseNameTextField.setText(theCase.getDisplayName());
47 String caseNumber = theCase.getNumber();
48 if (!caseNumber.isEmpty()) {
49 caseNumberField.setText(caseNumber);
51 caseNumberField.setText(
"N/A");
53 String examiner = theCase.getExaminer();
54 if (!examiner.isEmpty()) {
55 examinerField.setText(examiner);
57 examinerField.setText(
"N/A");
59 crDateField.setText(theCase.getCreatedDate());
60 caseDirField.setText(theCase.getCaseDirectory());
61 if (Case.CaseType.SINGLE_USER_CASE == theCase.getCaseType()) {
62 dbNameField.setText(Paths.get(theCase.getCaseDirectory(), theCase.getMetadata().getCaseDatabaseName()).toString());
64 dbNameField.setText(theCase.getMetadata().getCaseDatabaseName());
66 Case.CaseType caseType = theCase.getCaseType();
67 caseTypeField.setText(caseType.getLocalizedDisplayName());
84 @SuppressWarnings(
"unchecked")
86 private
void initComponents() {
88 jScrollPane1 =
new javax.swing.JScrollPane();
89 jTextArea1 =
new javax.swing.JTextArea();
90 jPanel1 =
new javax.swing.JPanel();
91 caseNameLabel =
new javax.swing.JLabel();
92 crDateLabel =
new javax.swing.JLabel();
93 caseDirLabel =
new javax.swing.JLabel();
94 caseNameTextField =
new javax.swing.JTextField();
95 updateCaseNameButton =
new javax.swing.JButton();
96 caseNumberLabel =
new javax.swing.JLabel();
97 examinerLabel =
new javax.swing.JLabel();
98 lbDbType =
new javax.swing.JLabel();
99 lbDbName =
new javax.swing.JLabel();
100 caseNumberField =
new javax.swing.JLabel();
101 examinerField =
new javax.swing.JLabel();
102 crDateField =
new javax.swing.JLabel();
103 caseDirField =
new javax.swing.JLabel();
104 dbNameField =
new javax.swing.JLabel();
105 caseTypeField =
new javax.swing.JLabel();
107 jTextArea1.setColumns(20);
108 jTextArea1.setRows(5);
109 jScrollPane1.setViewportView(jTextArea1);
111 caseNameLabel.setFont(caseNameLabel.getFont().deriveFont(caseNameLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
112 caseNameLabel.setText(
org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class,
"CasePropertiesPanel.caseNameLabel.text"));
114 crDateLabel.setFont(crDateLabel.getFont().deriveFont(crDateLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
115 crDateLabel.setText(
org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class,
"CasePropertiesPanel.crDateLabel.text"));
117 caseDirLabel.setFont(caseDirLabel.getFont().deriveFont(caseDirLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
118 caseDirLabel.setText(
org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class,
"CasePropertiesPanel.caseDirLabel.text"));
120 caseNameTextField.setFont(caseNameTextField.getFont().deriveFont(caseNameTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
121 caseNameTextField.setText(
org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class,
"CasePropertiesPanel.caseNameTextField.text"));
123 updateCaseNameButton.setFont(updateCaseNameButton.getFont().deriveFont(updateCaseNameButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
124 updateCaseNameButton.setText(
org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class,
"CasePropertiesPanel.updateCaseNameButton.text"));
125 updateCaseNameButton.addActionListener(
new java.awt.event.ActionListener() {
126 public void actionPerformed(java.awt.event.ActionEvent evt) {
127 updateCaseNameButtonActionPerformed(evt);
131 caseNumberLabel.setFont(caseNumberLabel.getFont().deriveFont(caseNumberLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
132 caseNumberLabel.setText(
org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class,
"CasePropertiesPanel.caseNumberLabel.text"));
134 examinerLabel.setFont(examinerLabel.getFont().deriveFont(examinerLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
135 examinerLabel.setText(
org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class,
"CasePropertiesPanel.examinerLabel.text"));
137 lbDbType.setFont(lbDbType.getFont().deriveFont(lbDbType.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
138 lbDbType.setText(
org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class,
"CasePropertiesPanel.lbDbType.text"));
140 lbDbName.setFont(lbDbName.getFont().deriveFont(lbDbName.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
141 lbDbName.setText(
org.openide.util.NbBundle.getMessage(CasePropertiesPanel.class,
"CasePropertiesPanel.lbDbName.text"));
143 caseDirField.setMinimumSize(
new java.awt.Dimension(25, 14));
145 dbNameField.setMinimumSize(
new java.awt.Dimension(25, 14));
147 caseTypeField.setMaximumSize(
new java.awt.Dimension(1, 0));
149 javax.swing.GroupLayout jPanel1Layout =
new javax.swing.GroupLayout(jPanel1);
150 jPanel1.setLayout(jPanel1Layout);
151 jPanel1Layout.setHorizontalGroup(
152 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
153 .addGroup(jPanel1Layout.createSequentialGroup()
155 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
156 .addGroup(jPanel1Layout.createSequentialGroup()
157 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
158 .addComponent(lbDbName)
159 .addComponent(lbDbType)
160 .addComponent(caseDirLabel))
161 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
162 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
163 .addComponent(caseDirField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
164 .addComponent(caseTypeField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
165 .addComponent(dbNameField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
166 .addGroup(jPanel1Layout.createSequentialGroup()
167 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
168 .addComponent(crDateLabel)
169 .addComponent(examinerLabel)
170 .addComponent(caseNumberLabel))
172 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
173 .addComponent(examinerField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
174 .addComponent(caseNumberField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
175 .addGroup(jPanel1Layout.createSequentialGroup()
176 .addComponent(caseNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
177 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
178 .addComponent(updateCaseNameButton, javax.swing.GroupLayout.PREFERRED_SIZE, 104, javax.swing.GroupLayout.PREFERRED_SIZE))
179 .addComponent(crDateField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
181 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
182 .addGroup(jPanel1Layout.createSequentialGroup()
184 .addComponent(caseNameLabel)
185 .addContainerGap(392, Short.MAX_VALUE)))
187 jPanel1Layout.setVerticalGroup(
188 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
189 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
191 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
192 .addComponent(caseNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
193 .addComponent(updateCaseNameButton))
194 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
195 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
196 .addGroup(jPanel1Layout.createSequentialGroup()
197 .addComponent(caseNumberField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
198 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
199 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
200 .addComponent(examinerField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
201 .addComponent(examinerLabel))
202 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
203 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
204 .addComponent(crDateField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
205 .addComponent(crDateLabel, javax.swing.GroupLayout.Alignment.TRAILING))
206 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
207 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING,
false)
208 .addComponent(caseDirLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
209 .addComponent(caseDirField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
210 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
211 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
212 .addComponent(caseTypeField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
213 .addComponent(lbDbType))
214 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
215 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
216 .addComponent(lbDbName)
217 .addComponent(dbNameField, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)))
218 .addComponent(caseNumberLabel))
220 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
221 .addGroup(jPanel1Layout.createSequentialGroup()
223 .addComponent(caseNameLabel)
224 .addContainerGap(173, Short.MAX_VALUE)))
227 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
228 this.setLayout(layout);
229 layout.setHorizontalGroup(
230 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
231 .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
233 layout.setVerticalGroup(
234 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
235 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE)
245 "CasePropertiesPanel.errorDialog.emptyCaseNameMessage=No case name entered.",
246 "CasePropertiesPanel.errorDialog.invalidCaseNameMessage=Case names cannot include the following symbols: \\, /, :, *, ?, \", <, >, |"
248 private void updateCaseNameButtonActionPerformed(java.awt.event.ActionEvent evt) {
249 String newCaseDisplayName = caseNameTextField.getText();
250 if (newCaseDisplayName.equals(theCase.getDisplayName())) {
254 if (newCaseDisplayName.trim().isEmpty()) {
255 MessageNotifyUtil.Message.error(Bundle.CasePropertiesPanel_errorDialog_emptyCaseNameMessage());
259 if (!Case.isValidName(newCaseDisplayName)) {
260 MessageNotifyUtil.Message.error(Bundle.CasePropertiesPanel_errorDialog_invalidCaseNameMessage());
265 theCase.updateDisplayName(newCaseDisplayName);
266 }
catch (CaseActionException ex) {
267 MessageNotifyUtil.Message.error(ex.getLocalizedMessage());
268 LOGGER.log(Level.SEVERE,
"Failed to update case display name", ex);
274 private javax.swing.JLabel caseDirField;
275 private javax.swing.JLabel caseDirLabel;
276 private javax.swing.JLabel caseNameLabel;
277 private javax.swing.JTextField caseNameTextField;
278 private javax.swing.JLabel caseNumberField;
279 private javax.swing.JLabel caseNumberLabel;
280 private javax.swing.JLabel caseTypeField;
281 private javax.swing.JLabel crDateField;
282 private javax.swing.JLabel crDateLabel;
283 private javax.swing.JLabel dbNameField;
284 private javax.swing.JLabel examinerField;
285 private javax.swing.JLabel examinerLabel;
286 private javax.swing.JPanel jPanel1;
287 private javax.swing.JScrollPane jScrollPane1;
288 private javax.swing.JTextArea jTextArea1;
289 private javax.swing.JLabel lbDbName;
290 private javax.swing.JLabel lbDbType;
291 private javax.swing.JButton updateCaseNameButton;