19 package org.sleuthkit.autopsy.filesearch;
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;
36 class DateSearchPanel
extends javax.swing.JPanel {
38 DateFormat dateFormat;
39 List<String> timeZones;
41 DateSearchPanel(DateFormat dateFormat, List<String> timeZones) {
42 this.dateFormat = dateFormat;
43 this.timeZones = timeZones;
46 customizeComponents();
49 private void customizeComponents() {
51 dateFromTextField.setComponentPopupMenu(rightClickMenu);
52 dateToTextField.setComponentPopupMenu(rightClickMenu);
53 ActionListener actList =
new ActionListener() {
55 public void actionPerformed(ActionEvent e) {
56 JMenuItem jmi = (JMenuItem) e.getSource();
61 JFormattedTextField jftf = (JFormattedTextField) ((JPopupMenu) jmi.getParent()).getInvoker();
62 if (jmi.equals(cutMenuItem)) {
64 }
else if (jmi.equals(copyMenuItem)) {
66 }
else if (jmi.equals(pasteMenuItem)) {
68 }
else if (jmi.equals(selectAllMenuItem)) {
73 cutMenuItem.addActionListener(actList);
74 copyMenuItem.addActionListener(actList);
75 pasteMenuItem.addActionListener(actList);
76 selectAllMenuItem.addActionListener(actList);
77 this.setComponentsEnabled();
80 JCheckBox getAccessedCheckBox() {
81 return accessedCheckBox;
84 JCheckBox getChangedCheckBox() {
85 return changedCheckBox;
88 JCheckBox getCreatedCheckBox() {
89 return createdCheckBox;
92 JCheckBox getDateCheckBox() {
96 JFormattedTextField getDateFromTextField() {
97 return dateFromTextField;
100 JFormattedTextField getDateToTextField() {
101 return dateToTextField;
104 JCheckBox getModifiedCheckBox() {
105 return modifiedCheckBox;
108 JComboBox<String> getTimeZoneComboBox() {
109 return timeZoneComboBox;
112 void setTimeZones(List<String> newTimeZones) {
113 this.timeZones = newTimeZones;
114 this.timeZoneComboBox.removeAllItems();
115 for (String tz : newTimeZones) {
116 this.timeZoneComboBox.addItem(tz);
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);
142 @SuppressWarnings(
"unchecked")
144 private
void initComponents() {
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();
167 cutMenuItem.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.cutMenuItem.text"));
168 rightClickMenu.add(cutMenuItem);
170 copyMenuItem.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.copyMenuItem.text"));
171 rightClickMenu.add(copyMenuItem);
173 pasteMenuItem.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.pasteMenuItem.text"));
174 rightClickMenu.add(pasteMenuItem);
176 selectAllMenuItem.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.selectAllMenuItem.text"));
177 rightClickMenu.add(selectAllMenuItem);
179 dateToTextField.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.dateToTextField.text"));
180 dateToTextField.addFocusListener(
new java.awt.event.FocusAdapter() {
181 public void focusLost(java.awt.event.FocusEvent evt) {
182 dateToTextFieldFocusLost(evt);
186 jLabel1.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.jLabel1.text"));
188 jLabel4.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.jLabel4.text"));
190 dateCheckBox.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.dateCheckBox.text"));
191 dateCheckBox.addActionListener(
new java.awt.event.ActionListener() {
192 public void actionPerformed(java.awt.event.ActionEvent evt) {
193 dateCheckBoxActionPerformed(evt);
197 jLabel3.setFont(
new java.awt.Font(
"Tahoma", 0, 10));
198 jLabel3.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.jLabel3.text"));
200 dateFromTextField.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.dateFromTextField.text"));
201 dateFromTextField.addFocusListener(
new java.awt.event.FocusAdapter() {
202 public void focusLost(java.awt.event.FocusEvent evt) {
203 dateFromTextFieldFocusLost(evt);
207 jLabel2.setFont(
new java.awt.Font(
"Tahoma", 0, 10));
208 jLabel2.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.jLabel2.text"));
210 modifiedCheckBox.setSelected(
true);
211 modifiedCheckBox.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.modifiedCheckBox.text"));
212 modifiedCheckBox.addActionListener(
new java.awt.event.ActionListener() {
213 public void actionPerformed(java.awt.event.ActionEvent evt) {
214 modifiedCheckBoxActionPerformed(evt);
218 changedCheckBox.setSelected(
true);
219 changedCheckBox.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.changedCheckBox.text"));
220 changedCheckBox.addActionListener(
new java.awt.event.ActionListener() {
221 public void actionPerformed(java.awt.event.ActionEvent evt) {
222 changedCheckBoxActionPerformed(evt);
226 accessedCheckBox.setSelected(
true);
227 accessedCheckBox.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.accessedCheckBox.text"));
228 accessedCheckBox.addActionListener(
new java.awt.event.ActionListener() {
229 public void actionPerformed(java.awt.event.ActionEvent evt) {
230 accessedCheckBoxActionPerformed(evt);
234 createdCheckBox.setSelected(
true);
235 createdCheckBox.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.createdCheckBox.text"));
236 createdCheckBox.addActionListener(
new java.awt.event.ActionListener() {
237 public void actionPerformed(java.awt.event.ActionEvent evt) {
238 createdCheckBoxActionPerformed(evt);
242 dateFromButtonCalendar.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.dateFromButtonCalendar.text"));
243 dateFromButtonCalendar.addPropertyChangeListener(
new java.beans.PropertyChangeListener() {
244 public void propertyChange(java.beans.PropertyChangeEvent evt) {
245 dateFromPopupChanged(evt);
249 dateToButtonCalendar.setText(
org.openide.util.NbBundle.getMessage(DateSearchPanel.class,
"DateSearchPanel.dateToButtonCalendar.text"));
250 dateToButtonCalendar.addPropertyChangeListener(
new java.beans.PropertyChangeListener() {
251 public void propertyChange(java.beans.PropertyChangeEvent evt) {
252 dateToPopupChanged(evt);
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)
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)
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()
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)
290 .addComponent(accessedCheckBox)
291 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
292 .addComponent(createdCheckBox)
293 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
294 .addComponent(changedCheckBox)))
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))
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)))
332 private void dateFromTextFieldFocusLost(java.awt.event.FocusEvent evt) {
334 String fromDateString = this.dateFromTextField.getText();
335 if (!fromDateString.equals(
"")) {
337 Date fromDate = dateFormat.parse(fromDateString);
338 dateFromButtonCalendar.setTargetDate(fromDate);
339 }
catch (ParseException ex) {
345 private void dateToTextFieldFocusLost(java.awt.event.FocusEvent evt) {
347 String toDateString = this.dateToTextField.getText();
348 if (!toDateString.equals(
"")) {
350 Date toDate = dateFormat.parse(toDateString);
351 dateToButtonCalendar.setTargetDate(toDate);
352 }
catch (ParseException ex) {
358 private void dateFromPopupChanged(java.beans.PropertyChangeEvent evt) {
359 if (evt.getNewValue() instanceof Date) {
360 setFromDate((Date) evt.getNewValue());
364 private void dateToPopupChanged(java.beans.PropertyChangeEvent evt) {
365 if (evt.getNewValue() instanceof Date) {
366 setToDate((Date) evt.getNewValue());
370 private void dateCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {
371 this.setComponentsEnabled();
372 firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
375 private void modifiedCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {
376 firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
379 private void accessedCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {
380 firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
383 private void createdCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {
384 firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
387 private void changedCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {
388 firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null);
397 private void setFromDate(Date date) {
398 String dateStringResult =
"";
400 dateStringResult = dateFormat.format(date);
402 dateFromTextField.setText(dateStringResult);
403 dateFromButtonCalendar.setTargetDate(date);
411 private void setToDate(Date date) {
412 String dateStringResult =
"";
414 dateStringResult = dateFormat.format(date);
416 dateToTextField.setText(dateStringResult);
417 dateToButtonCalendar.setTargetDate(date);
420 boolean isValidSearch() {
421 return this.accessedCheckBox.isSelected() ||
422 this.changedCheckBox.isSelected() ||
423 this.createdCheckBox.isSelected() ||
424 this.modifiedCheckBox.isSelected();
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;
448 void addActionListener(ActionListener l) {
449 dateFromTextField.addActionListener(l);
450 dateToTextField.addActionListener(l);