19 package org.sleuthkit.autopsy.casemodule;
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;
27 import java.util.logging.Level;
28 import javax.swing.JOptionPane;
29 import javax.swing.JTable;
30 import javax.swing.table.AbstractTableModel;
32 import org.openide.util.NbBundle;
39 class OpenRecentCasePanel
extends javax.swing.JPanel {
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;
47 private OpenRecentCasePanel() {
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);
61 int width = tableScrollPane.getPreferredSize().width;
62 imagesTable.getColumnModel().getColumn(0).setPreferredWidth((
int) (.30 * width));
63 imagesTable.getColumnModel().getColumn(1).setPreferredWidth((
int) (.70 * width));
65 if (imagesTable.getRowCount() > 0) {
66 imagesTable.setRowSelectionInterval(0, 0);
67 openButton.setEnabled(
true);
69 openButton.setEnabled(
false);
73 static OpenRecentCasePanel getInstance() {
74 if (instance == null) {
75 instance =
new OpenRecentCasePanel();
77 instance.generateRecentCases();
86 @SuppressWarnings(
"unchecked")
88 private
void initComponents() {
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();
96 jLabel1.setText(
org.openide.util.NbBundle.getMessage(OpenRecentCasePanel.class,
"OpenRecentCasePanel.jLabel1.text"));
98 cancelButton.setText(
org.openide.util.NbBundle.getMessage(OpenRecentCasePanel.class,
"OpenRecentCasePanel.cancelButton.text"));
100 openButton.setText(
org.openide.util.NbBundle.getMessage(OpenRecentCasePanel.class,
"OpenRecentCasePanel.openButton.text"));
101 openButton.addActionListener(
new java.awt.event.ActionListener() {
102 public void actionPerformed(java.awt.event.ActionEvent evt) {
103 openButtonActionPerformed(evt);
107 imagesTable.setModel(
new javax.swing.table.DefaultTableModel(
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);
125 imagesTable.addKeyListener(
new java.awt.event.KeyAdapter() {
126 public void keyPressed(java.awt.event.KeyEvent evt) {
127 imagesTableKeyPressed(evt);
130 tableScrollPane.setViewportView(imagesTable);
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()
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())))
152 layout.setVerticalGroup(
153 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
154 .addGroup(layout.createSequentialGroup()
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))
167 private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {
171 private void imagesTableMouseClicked(java.awt.event.MouseEvent evt) {
173 if (evt.getClickCount() == 2) {
178 private void imagesTableKeyPressed(java.awt.event.KeyEvent evt) {
179 if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
185 private void openCase() {
186 if (casePaths.length < 1) {
187 logger.log(Level.INFO,
"No Case paths exist, cannot open the case");
190 String casePath = casePaths[imagesTable.getSelectedRow()];
191 String caseName = caseNames[imagesTable.getSelectedRow()];
192 if (!casePath.equals(
"")) {
195 StartupWindowProvider.getInstance().close();
196 CueBannerPanel.closeOpenRecentCasesWindow();
197 }
catch (Exception ex) {
198 logger.log(Level.WARNING,
"Error: couldn't open case: " + caseName, ex);
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",
207 NbBundle.getMessage(
this.getClass(),
208 "OpenRecentCasePanel.openCase.msgDlg.err"),
209 JOptionPane.ERROR_MESSAGE);
210 RecentCases.getInstance().removeRecentCase(caseName, casePath);
213 if (Case.isCaseOpen() ==
false) {
214 StartupWindowProvider.getInstance().open();
220 }
catch (CaseActionException ex) {
221 logger.log(Level.WARNING,
"Error: couldn't open case: " + caseName, ex);
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;
238 public void setCloseButtonActionListener(ActionListener e) {
239 this.cancelButton.addActionListener(e);
250 for (String s : caseNames) {
265 String colName = null;
269 colName = NbBundle.getMessage(this.getClass(),
"OpenRecentCasePanel.colName.caseName");
272 colName = NbBundle.getMessage(this.getClass(),
"OpenRecentCasePanel.colName.path");
284 switch (columnIndex) {
286 ret = caseNames[rowIndex];
292 logger.log(Level.SEVERE,
"Invalid table column index: " + columnIndex);
304 public void setValueAt(Object aValue,
int rowIndex,
int columnIndex) {
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));
String getColumnName(int column)
String shortenPath(String path)
Object getValueAt(int rowIndex, int columnIndex)
boolean isCellEditable(int rowIndex, int columnIndex)
void setValueAt(Object aValue, int rowIndex, int columnIndex)
static Logger getLogger(String name)