From 180f005b6bd05aa7965467dbeb48979a4236dde3 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Thu, 17 Sep 2020 18:49:29 -0400 Subject: [PATCH 1/3] 6861 prevent typing or pasting date entry --- .../autopsy/discovery/ui/DateFilterPanel.form | 8 ++++---- .../autopsy/discovery/ui/DateFilterPanel.java | 17 +++++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form index 8ecca7e27b..b52fce7d28 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form @@ -104,7 +104,10 @@ - + + + + @@ -114,9 +117,6 @@ - - - diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index 668e441f95..930eda4f6f 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.discovery.ui; + import java.awt.event.ActionListener; import java.time.LocalDate; import java.time.Period; @@ -26,7 +27,7 @@ import org.sleuthkit.autopsy.discovery.search.AbstractFilter; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JList; -import javax.swing.SpinnerNumberModel; +import javax.swing.JSpinner; import javax.swing.event.ListSelectionListener; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.communications.Utils; @@ -38,7 +39,6 @@ import org.sleuthkit.autopsy.discovery.search.SearchFiltering; class DateFilterPanel extends AbstractDiscoveryFilterPanel { private static final long serialVersionUID = 1L; - private final SpinnerNumberModel numberModel; private static final long SECS_PER_DAY = 86400; /** @@ -47,10 +47,14 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { @NbBundle.Messages({"# {0} - timeZone", "DateFilterPanel.dateRange.text=Date Range ({0}):"}) DateFilterPanel() { - // numberModel is used in initComponents - numberModel = new SpinnerNumberModel(10, 1, Integer.MAX_VALUE, 1); initComponents(); rangeRadioButton.setText(Bundle.DateFilterPanel_dateRange_text(Utils.getUserPreferredZoneId().toString())); + //Disable manual entry in the spinner so it is limited to 60 days + //if a user wants farther back than that one would expect date range filter options would be more appealing + ((JSpinner.DefaultEditor) daysSpinner.getEditor()).getTextField().setEditable(false); + //Disable manual entry in the date pickers + startDatePicker.getComponentDateTextField().setEditable(false); + endDatePicker.getComponentDateTextField().setEditable(false); } /** @@ -65,7 +69,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { buttonGroup1 = new javax.swing.ButtonGroup(); dateFilterCheckBox = new javax.swing.JCheckBox(); jPanel1 = new javax.swing.JPanel(); - daysSpinner = new javax.swing.JSpinner(numberModel); + daysSpinner = new javax.swing.JSpinner(); daysLabel = new javax.swing.JLabel(); mostRecentRadioButton = new javax.swing.JRadioButton(); startCheckBox = new javax.swing.JCheckBox(); @@ -81,7 +85,8 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { } }); - daysSpinner.setModel(new javax.swing.SpinnerNumberModel(1, 1, null, 1)); + daysSpinner.setModel(new javax.swing.SpinnerNumberModel(7, 1, 60, 1)); + daysSpinner.setEditor(new javax.swing.JSpinner.NumberEditor(daysSpinner, "")); daysSpinner.setEnabled(false); daysSpinner.setPreferredSize(new java.awt.Dimension(75, 26)); daysSpinner.setValue(7); From bd544932b5d3dce18f6ee4d6afc394a61d62783b Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 18 Sep 2020 10:28:10 -0400 Subject: [PATCH 2/3] 6861 check start before end, max spinner value 100k --- .../discovery/ui/Bundle.properties-MERGED | 1 + .../autopsy/discovery/ui/DateFilterPanel.form | 2 +- .../autopsy/discovery/ui/DateFilterPanel.java | 30 +++++++++++++++++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED index 8ecf93bed6..08e22e9826 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED @@ -9,6 +9,7 @@ DataSourceModuleWrapper.hashModule.text=Hash Lookup module was not run on data s # {0} - timeZone DateFilterPanel.dateRange.text=Date Range ({0}): DateFilterPanel.invalidRange.text=Range or Only Last must be selected +DateFilterPanel.startAfterEnd.text=Start date should be before the end date when both are enabled. DateFilterPanel.startOrEndNeeded.text=A start or end date must be specified to use the range filter DiscoveryDialog.name.text=Discovery DiscoveryTopComponent.cancelButton.text=Cancel Search diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form index b52fce7d28..276a4f9ef5 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.form @@ -104,7 +104,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index 930eda4f6f..81777b5a40 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -18,7 +18,9 @@ */ package org.sleuthkit.autopsy.discovery.ui; - +import com.github.lgooddatepicker.optionalusertools.DateChangeListener; +import com.github.lgooddatepicker.zinternaltools.DateChangeEvent; +import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.time.LocalDate; import java.time.Period; @@ -85,7 +87,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { } }); - daysSpinner.setModel(new javax.swing.SpinnerNumberModel(7, 1, 60, 1)); + daysSpinner.setModel(new javax.swing.SpinnerNumberModel(7, 1, 100000, 1)); daysSpinner.setEditor(new javax.swing.JSpinner.NumberEditor(daysSpinner, "")); daysSpinner.setEnabled(false); daysSpinner.setPreferredSize(new java.awt.Dimension(75, 26)); @@ -259,6 +261,18 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { endCheckBox.addActionListener(actionListener); rangeRadioButton.addActionListener(actionListener); mostRecentRadioButton.addActionListener(actionListener); + startDatePicker.addDateChangeListener(new DateChangeListener() { + @Override + public void dateChanged(DateChangeEvent event) { + actionListener.actionPerformed(new ActionEvent(startDatePicker, ActionEvent.ACTION_PERFORMED, "StartDateChanged")); + } + }); + endDatePicker.addDateChangeListener(new DateChangeListener() { + @Override + public void dateChanged(DateChangeEvent event) { + actionListener.actionPerformed(new ActionEvent(endDatePicker, ActionEvent.ACTION_PERFORMED, "EndDateChanged")); + } + }); } @Override @@ -281,10 +295,17 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { for (ActionListener listener : endCheckBox.getActionListeners()) { endCheckBox.removeActionListener(listener); } + for (DateChangeListener listener : endDatePicker.getDateChangeListeners()) { + endDatePicker.removeDateChangeListener(listener); + } + for (DateChangeListener listener : startDatePicker.getDateChangeListeners()) { + startDatePicker.removeDateChangeListener(listener); + } } @NbBundle.Messages({"DateFilterPanel.invalidRange.text=Range or Only Last must be selected", - "DateFilterPanel.startOrEndNeeded.text=A start or end date must be specified to use the range filter"}) + "DateFilterPanel.startOrEndNeeded.text=A start or end date must be specified to use the range filter", + "DateFilterPanel.startAfterEnd.text=Start date should be before the end date when both are enabled."}) @Override String checkForError() { if (dateFilterCheckBox.isSelected()) { @@ -292,6 +313,9 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { return Bundle.DateFilterPanel_invalidRange_text(); } else if (rangeRadioButton.isSelected() && !(startCheckBox.isSelected() || endCheckBox.isSelected())) { return Bundle.DateFilterPanel_startOrEndNeeded_text(); + } else if (startCheckBox.isSelected() && endCheckBox.isSelected() && startDatePicker.getDate().isAfter(endDatePicker.getDate())) { + //if the dates are equal it will effectively search just that day due to the rounding up of the end date in the getFilter code + return Bundle.DateFilterPanel_startAfterEnd_text(); } } return ""; From 9f0c0e33ac8400664dc59fd5dfb303d26841c7a9 Mon Sep 17 00:00:00 2001 From: William Schaefer Date: Fri, 18 Sep 2020 15:49:54 -0400 Subject: [PATCH 3/3] 6861 fix comment, add period to end of sentence --- .../autopsy/discovery/ui/Bundle.properties-MERGED | 4 ++-- .../sleuthkit/autopsy/discovery/ui/DateFilterPanel.java | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED index 08e22e9826..122d8e6591 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/Bundle.properties-MERGED @@ -8,9 +8,9 @@ DataSourceModuleWrapper.fileTypeModule.text=File Type Identification module was DataSourceModuleWrapper.hashModule.text=Hash Lookup module was not run on data source: {0}\n # {0} - timeZone DateFilterPanel.dateRange.text=Date Range ({0}): -DateFilterPanel.invalidRange.text=Range or Only Last must be selected +DateFilterPanel.invalidRange.text=Range or Only Last must be selected. DateFilterPanel.startAfterEnd.text=Start date should be before the end date when both are enabled. -DateFilterPanel.startOrEndNeeded.text=A start or end date must be specified to use the range filter +DateFilterPanel.startOrEndNeeded.text=A start or end date must be specified to use the range filter. DiscoveryDialog.name.text=Discovery DiscoveryTopComponent.cancelButton.text=Cancel Search DiscoveryTopComponent.name=\ Discovery diff --git a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java index 81777b5a40..528a5d1bc2 100644 --- a/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java +++ b/Core/src/org/sleuthkit/autopsy/discovery/ui/DateFilterPanel.java @@ -51,8 +51,7 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { DateFilterPanel() { initComponents(); rangeRadioButton.setText(Bundle.DateFilterPanel_dateRange_text(Utils.getUserPreferredZoneId().toString())); - //Disable manual entry in the spinner so it is limited to 60 days - //if a user wants farther back than that one would expect date range filter options would be more appealing + //Disable manual entry in the spinner ((JSpinner.DefaultEditor) daysSpinner.getEditor()).getTextField().setEditable(false); //Disable manual entry in the date pickers startDatePicker.getComponentDateTextField().setEditable(false); @@ -303,8 +302,8 @@ class DateFilterPanel extends AbstractDiscoveryFilterPanel { } } - @NbBundle.Messages({"DateFilterPanel.invalidRange.text=Range or Only Last must be selected", - "DateFilterPanel.startOrEndNeeded.text=A start or end date must be specified to use the range filter", + @NbBundle.Messages({"DateFilterPanel.invalidRange.text=Range or Only Last must be selected.", + "DateFilterPanel.startOrEndNeeded.text=A start or end date must be specified to use the range filter.", "DateFilterPanel.startAfterEnd.text=Start date should be before the end date when both are enabled."}) @Override String checkForError() {