Autopsy  3.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
OpenRecentCasePanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011 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.casemodule;
20 
21 import java.awt.Dimension;
22 import java.awt.Event;
23 import java.awt.EventQueue;
24 import java.awt.event.ActionListener;
25 import java.awt.event.KeyEvent;
26 import java.io.File;
27 import java.util.logging.Level;
28 import javax.swing.JOptionPane;
29 import javax.swing.JTable;
30 import javax.swing.table.AbstractTableModel;
31 
32 import org.openide.util.NbBundle;
34 
39 class OpenRecentCasePanel extends javax.swing.JPanel {
40 
41  static String[] caseNames;
42  static String[] casePaths;
43  private static Logger logger = Logger.getLogger(OpenRecentCasePanel.class.getName());
44  private static OpenRecentCasePanel instance;
45  private RecentCasesTableModel model;
46 
47  private OpenRecentCasePanel() {
48  initComponents();
49  }
50 
54  private void generateRecentCases() {
55  caseNames = RecentCases.getInstance().getRecentCaseNames();
56  casePaths = RecentCases.getInstance().getRecentCasePaths();
57  model = new RecentCasesTableModel();
58  imagesTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
59  imagesTable.setModel(model);
60 
61  int width = tableScrollPane.getPreferredSize().width;
62  imagesTable.getColumnModel().getColumn(0).setPreferredWidth((int) (.30 * width));
63  imagesTable.getColumnModel().getColumn(1).setPreferredWidth((int) (.70 * width));
64  // If there are any images, let's select the first one
65  if (imagesTable.getRowCount() > 0) {
66  imagesTable.setRowSelectionInterval(0, 0);
67  openButton.setEnabled(true);
68  } else {
69  openButton.setEnabled(false);
70  }
71  }
72 
73  static OpenRecentCasePanel getInstance() {
74  if (instance == null) {
75  instance = new OpenRecentCasePanel();
76  }
77  instance.generateRecentCases(); // refresh the case list
78  return instance;
79  }
80 
86  @SuppressWarnings("unchecked")
87  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
88  private void initComponents() {
89 
90  jLabel1 = new javax.swing.JLabel();
91  cancelButton = new javax.swing.JButton();
92  openButton = new javax.swing.JButton();
93  tableScrollPane = new javax.swing.JScrollPane();
94  imagesTable = new javax.swing.JTable();
95 
96  jLabel1.setText(org.openide.util.NbBundle.getMessage(OpenRecentCasePanel.class, "OpenRecentCasePanel.jLabel1.text")); // NOI18N
97 
98  cancelButton.setText(org.openide.util.NbBundle.getMessage(OpenRecentCasePanel.class, "OpenRecentCasePanel.cancelButton.text")); // NOI18N
99 
100  openButton.setText(org.openide.util.NbBundle.getMessage(OpenRecentCasePanel.class, "OpenRecentCasePanel.openButton.text")); // NOI18N
101  openButton.addActionListener(new java.awt.event.ActionListener() {
102  public void actionPerformed(java.awt.event.ActionEvent evt) {
103  openButtonActionPerformed(evt);
104  }
105  });
106 
107  imagesTable.setModel(new javax.swing.table.DefaultTableModel(
108  new Object [][] {
109 
110  },
111  new String [] {
112 
113  }
114  ));
115  imagesTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
116  imagesTable.setShowHorizontalLines(false);
117  imagesTable.setShowVerticalLines(false);
118  imagesTable.getTableHeader().setReorderingAllowed(false);
119  imagesTable.setUpdateSelectionOnSort(false);
120  imagesTable.addMouseListener(new java.awt.event.MouseAdapter() {
121  public void mouseClicked(java.awt.event.MouseEvent evt) {
122  imagesTableMouseClicked(evt);
123  }
124  });
125  imagesTable.addKeyListener(new java.awt.event.KeyAdapter() {
126  public void keyPressed(java.awt.event.KeyEvent evt) {
127  imagesTableKeyPressed(evt);
128  }
129  });
130  tableScrollPane.setViewportView(imagesTable);
131 
132  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
133  this.setLayout(layout);
134  layout.setHorizontalGroup(
135  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
136  .addGroup(layout.createSequentialGroup()
137  .addContainerGap()
138  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
139  .addGroup(layout.createSequentialGroup()
140  .addComponent(jLabel1)
141  .addGap(292, 414, Short.MAX_VALUE))
142  .addGroup(layout.createSequentialGroup()
143  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
144  .addComponent(tableScrollPane)
145  .addGroup(layout.createSequentialGroup()
146  .addGap(0, 0, Short.MAX_VALUE)
147  .addComponent(openButton)
148  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
149  .addComponent(cancelButton)))
150  .addContainerGap())))
151  );
152  layout.setVerticalGroup(
153  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
154  .addGroup(layout.createSequentialGroup()
155  .addContainerGap()
156  .addComponent(jLabel1)
157  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
158  .addComponent(tableScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE)
159  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
160  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
161  .addComponent(cancelButton)
162  .addComponent(openButton))
163  .addContainerGap())
164  );
165  }// </editor-fold>//GEN-END:initComponents
166 
167  private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed
168  openCase();
169  }//GEN-LAST:event_openButtonActionPerformed
170 
171  private void imagesTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_imagesTableMouseClicked
172  // If it's a doubleclick
173  if (evt.getClickCount() == 2) {
174  openCase();
175  }
176  }//GEN-LAST:event_imagesTableMouseClicked
177 
178  private void imagesTableKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_imagesTableKeyPressed
179  if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
180  openCase();
181  }
182  }//GEN-LAST:event_imagesTableKeyPressed
183 
184  // Open the selected case
185  private void openCase() {
186  if (casePaths.length < 1) {
187  logger.log(Level.INFO, "No Case paths exist, cannot open the case"); //NON-NLS
188  return;
189  }
190  String casePath = casePaths[imagesTable.getSelectedRow()];
191  String caseName = caseNames[imagesTable.getSelectedRow()];
192  if (!casePath.equals("")) {
193  // Close the startup menu
194  try {
195  StartupWindowProvider.getInstance().close();
196  CueBannerPanel.closeOpenRecentCasesWindow();
197  } catch (Exception ex) {
198  logger.log(Level.WARNING, "Error: couldn't open case: " + caseName, ex); //NON-NLS
199  }
200  // Open the recent cases
201  try {
202  if (caseName.equals("") || casePath.equals("") || (!new File(casePath).exists())) {
203  JOptionPane.showMessageDialog(null,
204  NbBundle.getMessage(this.getClass(),
205  "OpenRecentCasePanel.openCase.msgDlg.caseDoesntExist.msg",
206  caseName),
207  NbBundle.getMessage(this.getClass(),
208  "OpenRecentCasePanel.openCase.msgDlg.err"),
209  JOptionPane.ERROR_MESSAGE);
210  RecentCases.getInstance().removeRecentCase(caseName, casePath); // remove the recent case if it doesn't exist anymore
211 
212  //if case is not opened, open the start window
213  if (Case.isCaseOpen() == false) {
214  StartupWindowProvider.getInstance().open();
215  }
216 
217  } else {
218  Case.open(casePath); // open the case
219  }
220  } catch (CaseActionException ex) {
221  logger.log(Level.WARNING, "Error: couldn't open case: " + caseName, ex); //NON-NLS
222  }
223  }
224  }
225  // Variables declaration - do not modify//GEN-BEGIN:variables
226  private javax.swing.JButton cancelButton;
227  private javax.swing.JTable imagesTable;
228  private javax.swing.JLabel jLabel1;
229  private javax.swing.JButton openButton;
230  private javax.swing.JScrollPane tableScrollPane;
231  // End of variables declaration//GEN-END:variables
232 
238  public void setCloseButtonActionListener(ActionListener e) {
239  this.cancelButton.addActionListener(e);
240  }
241 
245  private class RecentCasesTableModel extends AbstractTableModel {
246 
247  @Override
248  public int getRowCount() {
249  int count = 0;
250  for (String s : caseNames) {
251  if (!s.equals("")) {
252  count++;
253  }
254  }
255  return count;
256  }
257 
258  @Override
259  public int getColumnCount() {
260  return 2;
261  }
262 
263  @Override
264  public String getColumnName(int column) {
265  String colName = null;
266 
267  switch (column) {
268  case 0:
269  colName = NbBundle.getMessage(this.getClass(), "OpenRecentCasePanel.colName.caseName");
270  break;
271  case 1:
272  colName = NbBundle.getMessage(this.getClass(), "OpenRecentCasePanel.colName.path");
273  break;
274  default:
275  ;
276 
277  }
278  return colName;
279  }
280 
281  @Override
282  public Object getValueAt(int rowIndex, int columnIndex) {
283  Object ret = null;
284  switch (columnIndex) {
285  case 0:
286  ret = caseNames[rowIndex];
287  break;
288  case 1:
289  ret = shortenPath(casePaths[rowIndex]);
290  break;
291  default:
292  logger.log(Level.SEVERE, "Invalid table column index: " + columnIndex); //NON-NLS
293  break;
294  }
295  return ret;
296  }
297 
298  @Override
299  public boolean isCellEditable(int rowIndex, int columnIndex) {
300  return false;
301  }
302 
303  @Override
304  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
305  }
306 
307  private String shortenPath(String path) {
308  if (path.length() > 50) {
309  path = path.substring(0, 10 + path.substring(10).indexOf(File.separator) + 1) + "..."
310  + path.substring((path.length() - 20) + path.substring(path.length() - 20).indexOf(File.separator));
311  }
312  return path;
313  }
314  }
315 }
static Logger getLogger(String name)
Definition: Logger.java:131

Copyright © 2012-2015 Basis Technology. Generated on: Mon Oct 19 2015
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.