Autopsy  4.12.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
ManageCasesDialog.java
Go to the documentation of this file.
1 /*
2  * Central Repository
3  *
4  * Copyright 2018 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.centralrepository.optionspanel;
20 
21 import java.util.ArrayList;
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25 import java.util.logging.Level;
26 import javax.swing.event.ListSelectionEvent;
27 import javax.swing.event.ListSelectionListener;
28 import org.openide.windows.WindowManager;
34 import org.openide.util.NbBundle.Messages;
35 
41 final class ManageCasesDialog extends javax.swing.JDialog {
42 
43  private static final long serialVersionUID = 1L;
44  private final CasesTableModel casesTableModel = new CasesTableModel();
45  private final DataSourcesTableModel dataSourcesTableModel = new DataSourcesTableModel();
46  private final static Logger logger = Logger.getLogger(ManageCasesDialog.class.getName());
47 
51  @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives
52  @Messages({"ManageCasesDialog.title.text=Manage Cases"})
53  private ManageCasesDialog() {
54  super(WindowManager.getDefault().getMainWindow(), Bundle.ManageCasesDialog_title_text(),
55  true);
56  initComponents();
57  try {
58  EamDb dbManager = EamDb.getInstance();
59  Map<Integer, List<CorrelationDataSource>> dataSourcesByCaseId = new HashMap<>();
60  for (CorrelationDataSource dataSource : dbManager.getDataSources()) {
61  int caseID = dataSource.getCaseID();
62  List<CorrelationDataSource> dataSourceNames = dataSourcesByCaseId.getOrDefault(caseID, new ArrayList<>());
63  dataSourceNames.add(dataSource);
64  dataSourcesByCaseId.put(caseID, dataSourceNames);
65  }
66  for (CorrelationCase eamCase : dbManager.getCases()) {
67  casesTableModel.addEamCase(eamCase, dataSourcesByCaseId.getOrDefault(eamCase.getID(), new ArrayList<>()));
68  }
69  } catch (EamDbException ex) {
70  logger.log(Level.SEVERE, "Error getting list of cases from database.", ex); // NON-NLS
71  }
72 
73  casesTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
74  @Override
75  public void valueChanged(ListSelectionEvent e) {
76  if (!e.getValueIsAdjusting()) {
77  updateSelection();
78  }
79  }
80  });
81  //sort on first column by default
82  casesTable.getRowSorter().toggleSortOrder(0);
83  }
84 
89  static void displayManageCasesDialog() {
90  ManageCasesDialog caseInfoDialog = new ManageCasesDialog();
91  caseInfoDialog.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
92  caseInfoDialog.setVisible(true);
93  }
94 
100  @SuppressWarnings("unchecked")
101  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
102  private void initComponents() {
103 
104  casesSplitPane = new javax.swing.JSplitPane();
105  caseInfoPanel = new javax.swing.JPanel();
106  dataSourcesScrollPane = new javax.swing.JScrollPane();
107  dataSourcesTable = new javax.swing.JTable();
108  notesScrollPane = new javax.swing.JScrollPane();
109  notesTextArea = new javax.swing.JTextArea();
110  caseInfoLabel = new javax.swing.JLabel();
111  dataSourcesLabel = new javax.swing.JLabel();
112  notesLabel = new javax.swing.JLabel();
113  orgLabel = new javax.swing.JLabel();
114  caseNumberLabel = new javax.swing.JLabel();
115  examinerEmailLabel = new javax.swing.JLabel();
116  examinerNameLabel = new javax.swing.JLabel();
117  examinerPhoneLabel = new javax.swing.JLabel();
118  orgValueLabel = new javax.swing.JLabel();
119  caseNumberValueLabel = new javax.swing.JLabel();
120  examinerNameValueLabel = new javax.swing.JLabel();
121  examinerEmailValueLabel = new javax.swing.JLabel();
122  examinerPhoneValueLabel = new javax.swing.JLabel();
123  closeButton = new javax.swing.JButton();
124  casesPanel = new javax.swing.JPanel();
125  casesScrollPane = new javax.swing.JScrollPane();
126  casesTable = new javax.swing.JTable();
127 
128  setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
129  setMinimumSize(new java.awt.Dimension(400, 400));
130 
131  casesSplitPane.setDividerLocation(380);
132 
133  dataSourcesTable.setAutoCreateRowSorter(true);
134  dataSourcesTable.setModel(dataSourcesTableModel);
135  dataSourcesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
136  dataSourcesScrollPane.setViewportView(dataSourcesTable);
137 
138  notesScrollPane.setBorder(null);
139 
140  notesTextArea.setEditable(false);
141  notesTextArea.setBackground(new java.awt.Color(240, 240, 240));
142  notesTextArea.setColumns(20);
143  notesTextArea.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N
144  notesTextArea.setLineWrap(true);
145  notesTextArea.setRows(3);
146  notesTextArea.setWrapStyleWord(true);
147  notesTextArea.setBorder(null);
148  notesScrollPane.setViewportView(notesTextArea);
149 
150  org.openide.awt.Mnemonics.setLocalizedText(caseInfoLabel, org.openide.util.NbBundle.getMessage(ManageCasesDialog.class, "ManageCasesDialog.caseInfoLabel.text")); // NOI18N
151 
152  org.openide.awt.Mnemonics.setLocalizedText(dataSourcesLabel, org.openide.util.NbBundle.getMessage(ManageCasesDialog.class, "ManageCasesDialog.dataSourcesLabel.text")); // NOI18N
153 
154  org.openide.awt.Mnemonics.setLocalizedText(notesLabel, org.openide.util.NbBundle.getMessage(ManageCasesDialog.class, "ManageCasesDialog.notesLabel.text")); // NOI18N
155 
156  org.openide.awt.Mnemonics.setLocalizedText(orgLabel, org.openide.util.NbBundle.getMessage(ManageCasesDialog.class, "ManageCasesDialog.orgLabel.text")); // NOI18N
157 
158  org.openide.awt.Mnemonics.setLocalizedText(caseNumberLabel, org.openide.util.NbBundle.getMessage(ManageCasesDialog.class, "ManageCasesDialog.caseNumberLabel.text")); // NOI18N
159 
160  org.openide.awt.Mnemonics.setLocalizedText(examinerEmailLabel, org.openide.util.NbBundle.getMessage(ManageCasesDialog.class, "ManageCasesDialog.examinerEmailLabel.text")); // NOI18N
161 
162  org.openide.awt.Mnemonics.setLocalizedText(examinerNameLabel, org.openide.util.NbBundle.getMessage(ManageCasesDialog.class, "ManageCasesDialog.examinerNameLabel.text")); // NOI18N
163 
164  org.openide.awt.Mnemonics.setLocalizedText(examinerPhoneLabel, org.openide.util.NbBundle.getMessage(ManageCasesDialog.class, "ManageCasesDialog.examinerPhoneLabel.text")); // NOI18N
165 
166  org.openide.awt.Mnemonics.setLocalizedText(closeButton, org.openide.util.NbBundle.getMessage(ManageCasesDialog.class, "ManageCasesDialog.closeButton.text")); // NOI18N
167  closeButton.setMaximumSize(new java.awt.Dimension(65, 23));
168  closeButton.setMinimumSize(new java.awt.Dimension(65, 23));
169  closeButton.setPreferredSize(new java.awt.Dimension(65, 23));
170  closeButton.addActionListener(new java.awt.event.ActionListener() {
171  public void actionPerformed(java.awt.event.ActionEvent evt) {
172  closeButtonActionPerformed(evt);
173  }
174  });
175 
176  javax.swing.GroupLayout caseInfoPanelLayout = new javax.swing.GroupLayout(caseInfoPanel);
177  caseInfoPanel.setLayout(caseInfoPanelLayout);
178  caseInfoPanelLayout.setHorizontalGroup(
179  caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
180  .addGroup(caseInfoPanelLayout.createSequentialGroup()
181  .addContainerGap()
182  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
183  .addGroup(caseInfoPanelLayout.createSequentialGroup()
184  .addGap(10, 10, 10)
185  .addComponent(dataSourcesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
186  .addGroup(caseInfoPanelLayout.createSequentialGroup()
187  .addGap(6, 6, 6)
188  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
189  .addGroup(caseInfoPanelLayout.createSequentialGroup()
190  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
191  .addComponent(orgLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
192  .addComponent(caseNumberLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
193  .addComponent(examinerNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
194  .addComponent(examinerEmailLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
195  .addComponent(examinerPhoneLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE))
196  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
197  .addGroup(caseInfoPanelLayout.createSequentialGroup()
198  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
199  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
200  .addComponent(caseNumberValueLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
201  .addComponent(orgValueLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
202  .addGroup(caseInfoPanelLayout.createSequentialGroup()
203  .addGap(6, 6, 6)
204  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
205  .addComponent(examinerNameValueLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
206  .addComponent(examinerEmailValueLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
207  .addComponent(examinerPhoneValueLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))
208  .addComponent(notesLabel)
209  .addGroup(caseInfoPanelLayout.createSequentialGroup()
210  .addGap(10, 10, 10)
211  .addComponent(notesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 428, Short.MAX_VALUE))))
212  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, caseInfoPanelLayout.createSequentialGroup()
213  .addGap(0, 0, Short.MAX_VALUE)
214  .addComponent(closeButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
215  .addGroup(caseInfoPanelLayout.createSequentialGroup()
216  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
217  .addComponent(caseInfoLabel)
218  .addComponent(dataSourcesLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE))
219  .addGap(0, 0, Short.MAX_VALUE)))
220  .addContainerGap())
221  );
222  caseInfoPanelLayout.setVerticalGroup(
223  caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
224  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, caseInfoPanelLayout.createSequentialGroup()
225  .addContainerGap()
226  .addComponent(caseInfoLabel)
227  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
228  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
229  .addGroup(caseInfoPanelLayout.createSequentialGroup()
230  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
231  .addGroup(caseInfoPanelLayout.createSequentialGroup()
232  .addComponent(orgLabel)
233  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
234  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
235  .addComponent(caseNumberLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
236  .addComponent(caseNumberValueLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
237  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
238  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
239  .addComponent(examinerNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
240  .addComponent(examinerNameValueLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
241  .addComponent(orgValueLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
242  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
243  .addComponent(examinerEmailLabel))
244  .addComponent(examinerEmailValueLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
245  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
246  .addGroup(caseInfoPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
247  .addComponent(examinerPhoneLabel)
248  .addComponent(examinerPhoneValueLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
249  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
250  .addComponent(notesLabel)
251  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
252  .addComponent(notesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 55, Short.MAX_VALUE)
253  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
254  .addComponent(dataSourcesLabel)
255  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
256  .addComponent(dataSourcesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 129, Short.MAX_VALUE)
257  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
258  .addComponent(closeButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
259  .addContainerGap())
260  );
261 
262  casesSplitPane.setRightComponent(caseInfoPanel);
263 
264  casesTable.setAutoCreateRowSorter(true);
265  casesTable.setModel(casesTableModel);
266  casesTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
267  casesScrollPane.setViewportView(casesTable);
268 
269  javax.swing.GroupLayout casesPanelLayout = new javax.swing.GroupLayout(casesPanel);
270  casesPanel.setLayout(casesPanelLayout);
271  casesPanelLayout.setHorizontalGroup(
272  casesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
273  .addGroup(casesPanelLayout.createSequentialGroup()
274  .addComponent(casesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 379, Short.MAX_VALUE)
275  .addGap(0, 0, 0))
276  );
277  casesPanelLayout.setVerticalGroup(
278  casesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
279  .addGroup(casesPanelLayout.createSequentialGroup()
280  .addComponent(casesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
281  .addGap(40, 40, 40))
282  );
283 
284  casesSplitPane.setLeftComponent(casesPanel);
285 
286  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
287  getContentPane().setLayout(layout);
288  layout.setHorizontalGroup(
289  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
290  .addComponent(casesSplitPane, javax.swing.GroupLayout.Alignment.TRAILING)
291  );
292  layout.setVerticalGroup(
293  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
294  .addComponent(casesSplitPane)
295  );
296 
297  pack();
298  }// </editor-fold>//GEN-END:initComponents
299 
300  private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed
301  this.dispose();
302  }//GEN-LAST:event_closeButtonActionPerformed
303 
307  private void updateSelection() {
308  dataSourcesTableModel.clearTable();
309  if (casesTable.getSelectedRow() >= 0 && casesTable.getSelectedRow() < casesTable.getRowCount()) {
310  CaseDataSourcesWrapper caseWrapper = casesTableModel.getEamCase(casesTable.convertRowIndexToModel(casesTable.getSelectedRow()));
311  orgValueLabel.setText(caseWrapper.getOrganizationName());
312  caseNumberValueLabel.setText(caseWrapper.getCaseNumber());
313  examinerNameValueLabel.setText(caseWrapper.getExaminerName());
314  examinerPhoneValueLabel.setText(caseWrapper.getExaminerPhone());
315  examinerEmailValueLabel.setText(caseWrapper.getExaminerEmail());
316  notesTextArea.setText(caseWrapper.getNotes());
317  dataSourcesTableModel.addDataSources(caseWrapper.getDataSources());
318  } else {
319  orgValueLabel.setText("");
320  caseNumberValueLabel.setText("");
321  examinerNameValueLabel.setText("");
322  examinerPhoneValueLabel.setText("");
323  examinerEmailValueLabel.setText("");
324  notesTextArea.setText("");
325  }
326  }
327 
328  // Variables declaration - do not modify//GEN-BEGIN:variables
329  private javax.swing.JLabel caseInfoLabel;
330  private javax.swing.JPanel caseInfoPanel;
331  private javax.swing.JLabel caseNumberLabel;
332  private javax.swing.JLabel caseNumberValueLabel;
333  private javax.swing.JPanel casesPanel;
334  private javax.swing.JScrollPane casesScrollPane;
335  private javax.swing.JSplitPane casesSplitPane;
336  private javax.swing.JTable casesTable;
337  private javax.swing.JButton closeButton;
338  private javax.swing.JLabel dataSourcesLabel;
339  private javax.swing.JScrollPane dataSourcesScrollPane;
340  private javax.swing.JTable dataSourcesTable;
341  private javax.swing.JLabel examinerEmailLabel;
342  private javax.swing.JLabel examinerEmailValueLabel;
343  private javax.swing.JLabel examinerNameLabel;
344  private javax.swing.JLabel examinerNameValueLabel;
345  private javax.swing.JLabel examinerPhoneLabel;
346  private javax.swing.JLabel examinerPhoneValueLabel;
347  private javax.swing.JLabel notesLabel;
348  private javax.swing.JScrollPane notesScrollPane;
349  private javax.swing.JTextArea notesTextArea;
350  private javax.swing.JLabel orgLabel;
351  private javax.swing.JLabel orgValueLabel;
352  // End of variables declaration//GEN-END:variables
353 }

Copyright © 2012-2018 Basis Technology. Generated on: Wed Sep 18 2019
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.