Autopsy  4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
DateSearchPanel.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.filesearch;
20 
21 import java.awt.event.ActionEvent;
22 import java.awt.event.ActionListener;
23 import java.text.DateFormat;
24 import java.text.ParseException;
25 import java.util.Date;
26 import java.util.List;
27 import javax.swing.JCheckBox;
28 import javax.swing.JComboBox;
29 import javax.swing.JFormattedTextField;
30 import javax.swing.JMenuItem;
31 import javax.swing.JPopupMenu;
32 
36 class DateSearchPanel extends javax.swing.JPanel {
37 
38  DateFormat dateFormat;
39  List<String> timeZones;
40 
41  DateSearchPanel(DateFormat dateFormat, List<String> timeZones) {
42  this.dateFormat = dateFormat;
43  this.timeZones = timeZones;
44 
45  initComponents();
46  customizeComponents();
47  }
48 
49  private void customizeComponents() {
50 
51  dateFromTextField.setComponentPopupMenu(rightClickMenu);
52  dateToTextField.setComponentPopupMenu(rightClickMenu);
53  ActionListener actList = new ActionListener() {
54  @Override
55  public void actionPerformed(ActionEvent e) {
56  JMenuItem jmi = (JMenuItem) e.getSource();
57  /*
58  * Because there are two text fields, we have to determine which
59  * invoked the popupmenu
60  */
61  JFormattedTextField jftf = (JFormattedTextField) ((JPopupMenu) jmi.getParent()).getInvoker();
62  if (jmi.equals(cutMenuItem)) {
63  jftf.cut();
64  } else if (jmi.equals(copyMenuItem)) {
65  jftf.copy();
66  } else if (jmi.equals(pasteMenuItem)) {
67  jftf.paste();
68  } else if (jmi.equals(selectAllMenuItem)) {
69  jftf.selectAll();
70  }
71  }
72  };
73  cutMenuItem.addActionListener(actList);
74  copyMenuItem.addActionListener(actList);
75  pasteMenuItem.addActionListener(actList);
76  selectAllMenuItem.addActionListener(actList);
77  this.setComponentsEnabled();
78  }
79 
80  JCheckBox getAccessedCheckBox() {
81  return accessedCheckBox;
82  }
83 
84  JCheckBox getChangedCheckBox() {
85  return changedCheckBox;
86  }
87 
88  JCheckBox getCreatedCheckBox() {
89  return createdCheckBox;
90  }
91 
92  JCheckBox getDateCheckBox() {
93  return dateCheckBox;
94  }
95 
96  JFormattedTextField getDateFromTextField() {
97  return dateFromTextField;
98  }
99 
100  JFormattedTextField getDateToTextField() {
101  return dateToTextField;
102  }
103 
104  JCheckBox getModifiedCheckBox() {
105  return modifiedCheckBox;
106  }
107 
108  JComboBox<String> getTimeZoneComboBox() {
109  return timeZoneComboBox;
110  }
111 
112  void setTimeZones(List<String> newTimeZones) {
113  this.timeZones = newTimeZones;
114  this.timeZoneComboBox.removeAllItems();
115  for (String tz : newTimeZones) {
116  this.timeZoneComboBox.addItem(tz);
117  }
118  }
119 
120  private void setComponentsEnabled() {
121  boolean enable = this.dateCheckBox.isSelected();
122  this.dateFromTextField.setEnabled(enable);
123  this.dateFromButtonCalendar.setEnabled(enable);
124  this.jLabel1.setEnabled(enable);
125  this.dateToTextField.setEnabled(enable);
126  this.dateToButtonCalendar.setEnabled(enable);
127  this.jLabel2.setEnabled(enable);
128  this.jLabel3.setEnabled(enable);
129  this.jLabel4.setEnabled(enable);
130  this.timeZoneComboBox.setEnabled(enable);
131  this.modifiedCheckBox.setEnabled(enable);
132  this.accessedCheckBox.setEnabled(enable);
133  this.changedCheckBox.setEnabled(enable);
134  this.createdCheckBox.setEnabled(enable);
135  }
136 
142  @SuppressWarnings("unchecked")
143  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
144  private void initComponents() {
145 
146  rightClickMenu = new javax.swing.JPopupMenu();
147  cutMenuItem = new javax.swing.JMenuItem();
148  copyMenuItem = new javax.swing.JMenuItem();
149  pasteMenuItem = new javax.swing.JMenuItem();
150  selectAllMenuItem = new javax.swing.JMenuItem();
151  dateToTextField = new JFormattedTextField(this.dateFormat);
152  jLabel1 = new javax.swing.JLabel();
153  jLabel4 = new javax.swing.JLabel();
154  dateCheckBox = new javax.swing.JCheckBox();
155  timeZoneComboBox = new JComboBox<>(this.timeZones.toArray(new String[this.timeZones.size()]));
156  timeZoneComboBox.setRenderer(new DateSearchFilter.ComboBoxRenderer());
157  jLabel3 = new javax.swing.JLabel();
158  dateFromTextField = new JFormattedTextField(this.dateFormat);
159  jLabel2 = new javax.swing.JLabel();
160  modifiedCheckBox = new javax.swing.JCheckBox();
161  changedCheckBox = new javax.swing.JCheckBox();
162  accessedCheckBox = new javax.swing.JCheckBox();
163  createdCheckBox = new javax.swing.JCheckBox();
164  dateFromButtonCalendar = new org.jbundle.thin.base.screen.jcalendarbutton.JCalendarButton();
165  dateToButtonCalendar = new org.jbundle.thin.base.screen.jcalendarbutton.JCalendarButton();
166 
167  cutMenuItem.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.cutMenuItem.text")); // NOI18N
168  rightClickMenu.add(cutMenuItem);
169 
170  copyMenuItem.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.copyMenuItem.text")); // NOI18N
171  rightClickMenu.add(copyMenuItem);
172 
173  pasteMenuItem.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.pasteMenuItem.text")); // NOI18N
174  rightClickMenu.add(pasteMenuItem);
175 
176  selectAllMenuItem.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.selectAllMenuItem.text")); // NOI18N
177  rightClickMenu.add(selectAllMenuItem);
178 
179  dateToTextField.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateToTextField.text")); // NOI18N
180  dateToTextField.addFocusListener(new java.awt.event.FocusAdapter() {
181  public void focusLost(java.awt.event.FocusEvent evt) {
182  dateToTextFieldFocusLost(evt);
183  }
184  });
185 
186  jLabel1.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.jLabel1.text")); // NOI18N
187 
188  jLabel4.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.jLabel4.text")); // NOI18N
189 
190  dateCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateCheckBox.text")); // NOI18N
191  dateCheckBox.addActionListener(new java.awt.event.ActionListener() {
192  public void actionPerformed(java.awt.event.ActionEvent evt) {
193  dateCheckBoxActionPerformed(evt);
194  }
195  });
196 
197  jLabel3.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
198  jLabel3.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.jLabel3.text")); // NOI18N
199 
200  dateFromTextField.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateFromTextField.text")); // NOI18N
201  dateFromTextField.addFocusListener(new java.awt.event.FocusAdapter() {
202  public void focusLost(java.awt.event.FocusEvent evt) {
203  dateFromTextFieldFocusLost(evt);
204  }
205  });
206 
207  jLabel2.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
208  jLabel2.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.jLabel2.text")); // NOI18N
209 
210  modifiedCheckBox.setSelected(true);
211  modifiedCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.modifiedCheckBox.text")); // NOI18N
212  modifiedCheckBox.addActionListener(new java.awt.event.ActionListener() {
213  public void actionPerformed(java.awt.event.ActionEvent evt) {
214  modifiedCheckBoxActionPerformed(evt);
215  }
216  });
217 
218  changedCheckBox.setSelected(true);
219  changedCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.changedCheckBox.text")); // NOI18N
220  changedCheckBox.addActionListener(new java.awt.event.ActionListener() {
221  public void actionPerformed(java.awt.event.ActionEvent evt) {
222  changedCheckBoxActionPerformed(evt);
223  }
224  });
225 
226  accessedCheckBox.setSelected(true);
227  accessedCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.accessedCheckBox.text")); // NOI18N
228  accessedCheckBox.addActionListener(new java.awt.event.ActionListener() {
229  public void actionPerformed(java.awt.event.ActionEvent evt) {
230  accessedCheckBoxActionPerformed(evt);
231  }
232  });
233 
234  createdCheckBox.setSelected(true);
235  createdCheckBox.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.createdCheckBox.text")); // NOI18N
236  createdCheckBox.addActionListener(new java.awt.event.ActionListener() {
237  public void actionPerformed(java.awt.event.ActionEvent evt) {
238  createdCheckBoxActionPerformed(evt);
239  }
240  });
241 
242  dateFromButtonCalendar.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateFromButtonCalendar.text")); // NOI18N
243  dateFromButtonCalendar.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
244  public void propertyChange(java.beans.PropertyChangeEvent evt) {
245  dateFromPopupChanged(evt);
246  }
247  });
248 
249  dateToButtonCalendar.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateToButtonCalendar.text")); // NOI18N
250  dateToButtonCalendar.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
251  public void propertyChange(java.beans.PropertyChangeEvent evt) {
252  dateToPopupChanged(evt);
253  }
254  });
255 
256  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
257  this.setLayout(layout);
258  layout.setHorizontalGroup(
259  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
260  .addGroup(layout.createSequentialGroup()
261  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
262  .addGroup(layout.createSequentialGroup()
263  .addComponent(dateCheckBox)
264  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
265  .addComponent(dateFromTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
266  .addGap(0, 0, 0)
267  .addComponent(dateFromButtonCalendar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
268  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
269  .addComponent(jLabel1)
270  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
271  .addComponent(dateToTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
272  .addGap(0, 0, 0)
273  .addComponent(dateToButtonCalendar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
274  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
275  .addContainerGap()
276  .addComponent(jLabel2)
277  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
278  .addComponent(jLabel3)))
279  .addContainerGap(26, Short.MAX_VALUE))
280  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
281  .addGap(0, 0, Short.MAX_VALUE)
282  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
283  .addGroup(layout.createSequentialGroup()
284  .addComponent(jLabel4)
285  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
286  .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 193, javax.swing.GroupLayout.PREFERRED_SIZE))
287  .addGroup(layout.createSequentialGroup()
288  .addComponent(modifiedCheckBox)
289  .addGap(6, 6, 6)
290  .addComponent(accessedCheckBox)
291  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
292  .addComponent(createdCheckBox)
293  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
294  .addComponent(changedCheckBox)))
295  .addGap(33, 33, 33))
296  );
297  layout.setVerticalGroup(
298  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
299  .addGroup(layout.createSequentialGroup()
300  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
301  .addGroup(layout.createSequentialGroup()
302  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
303  .addComponent(dateCheckBox)
304  .addComponent(dateFromTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
305  .addGap(18, 18, 18))
306  .addGroup(layout.createSequentialGroup()
307  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
308  .addComponent(dateToButtonCalendar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
309  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
310  .addComponent(jLabel1)
311  .addComponent(dateToTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
312  .addComponent(dateFromButtonCalendar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
313  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
314  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
315  .addComponent(jLabel3)
316  .addComponent(jLabel2))
317  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
318  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
319  .addComponent(jLabel4)
320  .addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
321  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
322  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
323  .addComponent(modifiedCheckBox, javax.swing.GroupLayout.Alignment.TRAILING)
324  .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
325  .addComponent(accessedCheckBox)
326  .addComponent(createdCheckBox)
327  .addComponent(changedCheckBox)))
328  .addGap(0, 0, 0))
329  );
330  }// </editor-fold>//GEN-END:initComponents
331 
332  private void dateFromTextFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_dateFromTextFieldFocusLost
333  // set the "from" calendar button to listen to change in the text field
334  String fromDateString = this.dateFromTextField.getText();
335  if (!fromDateString.equals("")) {
336  try {
337  Date fromDate = dateFormat.parse(fromDateString);
338  dateFromButtonCalendar.setTargetDate(fromDate);
339  } catch (ParseException ex) {
340  // for now, no need to show the error message to the user her
341  }
342  }
343  }//GEN-LAST:event_dateFromTextFieldFocusLost
344 
345  private void dateToTextFieldFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_dateToTextFieldFocusLost
346  // set the "to" calendar button to listen to change in the text field
347  String toDateString = this.dateToTextField.getText();
348  if (!toDateString.equals("")) {
349  try {
350  Date toDate = dateFormat.parse(toDateString);
351  dateToButtonCalendar.setTargetDate(toDate);
352  } catch (ParseException ex) {
353  // for now, no need to show the error message to the user here
354  }
355  }
356  }//GEN-LAST:event_dateToTextFieldFocusLost
357 
358  private void dateFromPopupChanged(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_dateFromPopupChanged
359  if (evt.getNewValue() instanceof Date) {
360  setFromDate((Date) evt.getNewValue());
361  }
362  }//GEN-LAST:event_dateFromPopupChanged
363 
364  private void dateToPopupChanged(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_dateToPopupChanged
365  if (evt.getNewValue() instanceof Date) {
366  setToDate((Date) evt.getNewValue());
367  }
368  }//GEN-LAST:event_dateToPopupChanged
369 
370  private void dateCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dateCheckBoxActionPerformed
371  this.setComponentsEnabled();
372  firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
373  }//GEN-LAST:event_dateCheckBoxActionPerformed
374 
375  private void modifiedCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_modifiedCheckBoxActionPerformed
376  firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
377  }//GEN-LAST:event_modifiedCheckBoxActionPerformed
378 
379  private void accessedCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_accessedCheckBoxActionPerformed
380  firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
381  }//GEN-LAST:event_accessedCheckBoxActionPerformed
382 
383  private void createdCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createdCheckBoxActionPerformed
384  firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
385  }//GEN-LAST:event_createdCheckBoxActionPerformed
386 
387  private void changedCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_changedCheckBoxActionPerformed
388  firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
389  }//GEN-LAST:event_changedCheckBoxActionPerformed
390 
397  private void setFromDate(Date date) {
398  String dateStringResult = "";
399  if (date != null) {
400  dateStringResult = dateFormat.format(date);
401  }
402  dateFromTextField.setText(dateStringResult);
403  dateFromButtonCalendar.setTargetDate(date);
404  }
405 
411  private void setToDate(Date date) {
412  String dateStringResult = "";
413  if (date != null) {
414  dateStringResult = dateFormat.format(date);
415  }
416  dateToTextField.setText(dateStringResult);
417  dateToButtonCalendar.setTargetDate(date);
418  }
419 
420  boolean isValidSearch() {
421  return this.accessedCheckBox.isSelected() ||
422  this.changedCheckBox.isSelected() ||
423  this.createdCheckBox.isSelected() ||
424  this.modifiedCheckBox.isSelected();
425  }
426  // Variables declaration - do not modify//GEN-BEGIN:variables
427  private javax.swing.JCheckBox accessedCheckBox;
428  private javax.swing.JCheckBox changedCheckBox;
429  private javax.swing.JMenuItem copyMenuItem;
430  private javax.swing.JCheckBox createdCheckBox;
431  private javax.swing.JMenuItem cutMenuItem;
432  private javax.swing.JCheckBox dateCheckBox;
433  private org.jbundle.thin.base.screen.jcalendarbutton.JCalendarButton dateFromButtonCalendar;
434  private javax.swing.JFormattedTextField dateFromTextField;
435  private org.jbundle.thin.base.screen.jcalendarbutton.JCalendarButton dateToButtonCalendar;
436  private javax.swing.JFormattedTextField dateToTextField;
437  private javax.swing.JLabel jLabel1;
438  private javax.swing.JLabel jLabel2;
439  private javax.swing.JLabel jLabel3;
440  private javax.swing.JLabel jLabel4;
441  private javax.swing.JCheckBox modifiedCheckBox;
442  private javax.swing.JMenuItem pasteMenuItem;
443  private javax.swing.JPopupMenu rightClickMenu;
444  private javax.swing.JMenuItem selectAllMenuItem;
445  private javax.swing.JComboBox<String> timeZoneComboBox;
446  // End of variables declaration//GEN-END:variables
447 
448  void addActionListener(ActionListener l) {
449  dateFromTextField.addActionListener(l);
450  dateToTextField.addActionListener(l);
451  }
452 }

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.