From 9f637c8be4fbf6089bc5b833248d7d95258fca29 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Fri, 27 Oct 2017 09:22:38 -0400 Subject: [PATCH] 2969: Verify the input data is valid from isValid() in the filter class --- .../autopsy/filesearch/DateSearchFilter.java | 48 ++++++------------- .../autopsy/filesearch/DateSearchPanel.java | 39 ++++++++++++++- .../autopsy/filesearch/FileSearchPanel.java | 1 - .../autopsy/filesearch/HashSearchFilter.java | 23 +++++++-- .../autopsy/filesearch/SizeSearchFilter.java | 35 ++++++-------- .../autopsy/filesearch/SizeSearchPanel.java | 20 ++++++++ 6 files changed, 106 insertions(+), 60 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java index 8cabb1e9cc..0f06839b50 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java @@ -40,12 +40,9 @@ import javax.swing.JSeparator; import javax.swing.ListCellRenderer; import javax.swing.SwingUtilities; import javax.swing.border.EmptyBorder; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; import org.openide.util.NbBundle.Messages; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; /** * Filters file date properties (modified/created/etc.. times) @@ -207,41 +204,26 @@ class DateSearchFilter extends AbstractFileSearchFilter { @Override @Messages ({ - "End_Date_Before_Start_Date=The end date should be after the start date." + "End.date.before.start.date=The end date should be after the start date.", + "No.checkbox.selected=Non of the date search checkbox is selected." }) public boolean isValid() { - final DateSearchPanel panel = this.getComponent(); + DateSearchPanel panel = this.getComponent(); + Calendar startDate = getCalendarDate(panel.getDateFromTextField().getText()); + Calendar endDate = getCalendarDate(panel.getDateToTextField().getText()); - panel.getDateFromTextField().addCaretListener(new CaretListener() { - @Override - public void caretUpdate(CaretEvent ce) { - String startDateValue = panel.getDateFromTextField().getText(); - Calendar startDate = getCalendarDate(startDateValue); - String endDateValue = panel.getDateToTextField().getText(); - Calendar endDate = getCalendarDate(endDateValue); - - if (startDate != null && startDate.after(endDate)) { - MessageNotifyUtil.Message.warn(Bundle.End_Date_Before_Start_Date()); - } - } - }); + if ((startDate != null && startDate.after(endDate)) || (endDate != null && endDate.before(startDate))) { + setLastError(Bundle.End_date_before_start_date()); + return false; + } - panel.getDateToTextField().addCaretListener(new CaretListener() { - @Override - public void caretUpdate(CaretEvent ce) { - String startDateValue = panel.getDateFromTextField().getText(); - Calendar startDate = getCalendarDate(startDateValue); - String endDateValue = panel.getDateToTextField().getText(); - Calendar endDate = getCalendarDate(endDateValue); - - if (endDate != null && endDate.before(startDate)) { - MessageNotifyUtil.Message.warn(Bundle.End_Date_Before_Start_Date()); - } - } - }); - - return this.getComponent().isValidSearch(); + if (!panel.isValidSearch()) { + setLastError(Bundle.No_checkbox_selected()); + return false; + } + + return true; } /** diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java index b67f076c6d..b9f490041b 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java @@ -20,8 +20,6 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; import java.text.DateFormat; import java.text.ParseException; import java.util.Date; @@ -31,6 +29,8 @@ import javax.swing.JComboBox; import javax.swing.JFormattedTextField; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; /** * Subpanel with controls for file data filtering. @@ -77,6 +77,41 @@ class DateSearchPanel extends javax.swing.JPanel { copyMenuItem.addActionListener(actList); pasteMenuItem.addActionListener(actList); selectAllMenuItem.addActionListener(actList); + this.dateFromTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + + @Override + public void removeUpdate(DocumentEvent e) { + firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + + @Override + public void changedUpdate(DocumentEvent e) { + firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + }); + + this.dateToTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + + @Override + public void removeUpdate(DocumentEvent e) { + firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + + @Override + public void changedUpdate(DocumentEvent e) { + firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + }); + + this.setComponentsEnabled(); } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java index 2a27be8297..f6c72df611 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java @@ -27,7 +27,6 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; -import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java index 6bbb732a16..c760ec8f52 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java @@ -19,8 +19,8 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionListener; -import javax.swing.JTextField; import org.openide.util.NbBundle; +import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; /** @@ -61,8 +61,25 @@ class HashSearchFilter extends AbstractFileSearchFilter { } @Override + @Messages({ + "Empty.hash=Hash data is empty.", + "# {0} - hash data length", "Wrong.length=Input lenght({0}), doesn't match the MD5 length(32).", + "Wrong.character=Input data is an invalid MD5 hex data." + }) public boolean isValid() { - JTextField inputHashData = this.getComponent().getSearchTextField(); - return !inputHashData.getText().isEmpty() || inputHashData.getText().length() == 32 || inputHashData.getText().matches("[0-9a-fA-F]+"); + String inputHashData = this.getComponent().getSearchTextField().getText(); + if (inputHashData.isEmpty()) { + setLastError(Bundle.Empty_hash()); + return false; + } + if (inputHashData.length() != 32) { + setLastError(Bundle.Wrong_length(inputHashData.length())); + return false; + } + if (!inputHashData.matches("[0-9a-fA-F]+")) { + setLastError(Bundle.Wrong_character()); + return false; + } + return true; } } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java index d045f486c3..22643c6868 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java @@ -19,12 +19,9 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionListener; -import javax.swing.InputVerifier; import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JFormattedTextField; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; +import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; /** @@ -78,27 +75,23 @@ class SizeSearchFilter extends AbstractFileSearchFilter { } @Override - @NbBundle.Messages ({ - "Non_Negative_Number=Please input a non negative number." + @Messages ({ + "Non.negative.number=Input size data is a negative number.", + "Not.a.number=Input size data is not a number." }) public boolean isValid() { - this.getComponent().getSizeTextField().setInputVerifier(new InputVerifier() { - @Override - public boolean verify(JComponent input) { - String inputText = ((JFormattedTextField) input).getText(); - try { - int inputInt = Integer.parseInt(inputText); - if (inputInt < 0) { - MessageNotifyUtil.Message.warn(Bundle.Non_Negative_Number()); - return false; - } - } catch (NumberFormatException | NullPointerException e) { - MessageNotifyUtil.Message.warn(Bundle.Non_Negative_Number()); + String input = this.getComponent().getSizeTextField().getText(); + + try { + int inputInt = Integer.parseInt(input); + if (inputInt < 0) { + setLastError(Bundle.Non_negative_number()); return false; } - return true; - } - }); + } catch (NumberFormatException | NullPointerException e) { + setLastError(Bundle.Not_a_number()); + return false; + } return true; } } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java index 3add979247..51aa688619 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java @@ -25,6 +25,8 @@ import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFormattedTextField; import javax.swing.JMenuItem; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; /** * @@ -65,6 +67,24 @@ class SizeSearchPanel extends javax.swing.JPanel { copyMenuItem.addActionListener(actList); pasteMenuItem.addActionListener(actList); selectAllMenuItem.addActionListener(actList); + this.sizeTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + + @Override + public void removeUpdate(DocumentEvent e) { + firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + + @Override + public void changedUpdate(DocumentEvent e) { + firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + }); + + }