From 1f4419f928c8b4f5aca150dd9a116b2eb23bf016 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Thu, 26 Oct 2017 10:02:12 -0400 Subject: [PATCH 1/9] 2969: More validation on File Search By Attributes --- .../autopsy/filesearch/DateSearchFilter.java | 98 ++++++++++++------- .../autopsy/filesearch/DateSearchPanel.java | 18 ++++ .../autopsy/filesearch/HashSearchFilter.java | 4 +- .../autopsy/filesearch/SizeSearchFilter.java | 24 +++++ 4 files changed, 108 insertions(+), 36 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java index 205db56998..8cabb1e9cc 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java @@ -40,8 +40,12 @@ 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) @@ -79,25 +83,10 @@ class DateSearchFilter extends AbstractFileSearchFilter { String query = "NULL"; DateSearchPanel panel = this.getComponent(); - // first, get the selected timeZone from the dropdown list - String tz = this.getComponent().getTimeZoneComboBox().getSelectedItem().toString(); - String tzID = tz.substring(tz.indexOf(" ") + 1); // 1 index after the space is the ID - TimeZone selectedTZ = TimeZone.getTimeZone(tzID); // - // convert the date from the selected timezone to get the GMT long fromDate = 0; String startDateValue = panel.getDateFromTextField().getText(); - Calendar startDate = null; - try { - DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); - sdf.setTimeZone(selectedTZ); // get the time in the selected timezone - Date temp = sdf.parse(startDateValue); - - startDate = Calendar.getInstance(new SimpleTimeZone(0, "GMT")); //NON-NLS - startDate.setTime(temp); // convert to GMT - } catch (ParseException ex) { - // for now, no need to show the error message to the user here - } + Calendar startDate = getCalendarDate(startDateValue); if (!startDateValue.isEmpty()) { if (startDate != null) { fromDate = startDate.getTimeInMillis() / 1000; // divided by 1000 because we want to get the seconds, not miliseconds @@ -106,31 +95,13 @@ class DateSearchFilter extends AbstractFileSearchFilter { long toDate = 0; String endDateValue = panel.getDateToTextField().getText(); - Calendar endDate = null; - try { - DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); - sdf.setTimeZone(selectedTZ); // get the time in the selected timezone - Date temp2 = sdf.parse(endDateValue); - - endDate = Calendar.getInstance(new SimpleTimeZone(0, "GMT")); //NON-NLS - endDate.setTime(temp2); // convert to GMT - endDate.set(Calendar.HOUR, endDate.get(Calendar.HOUR) + 24); // get the next 24 hours - } catch (ParseException ex) { - // for now, no need to show the error message to the user here - } + Calendar endDate = getCalendarDate(endDateValue); if (!endDateValue.isEmpty()) { if (endDate != null) { toDate = endDate.getTimeInMillis() / 1000; // divided by 1000 because we want to get the seconds, not miliseconds } } - // If they put the dates in backwards, help them out. - if (fromDate > toDate) { - long temp = toDate; - toDate = fromDate; - fromDate = temp; - } - final boolean modifiedChecked = panel.getModifiedCheckBox().isSelected(); final boolean changedChecked = panel.getChangedCheckBox().isSelected(); final boolean accessedChecked = panel.getAccessedCheckBox().isSelected(); @@ -206,13 +177,70 @@ class DateSearchFilter extends AbstractFileSearchFilter { return timeZones; } + private TimeZone getSelectedTimeZone() { + String tz = this.getComponent().getTimeZoneComboBox().getSelectedItem().toString(); + String tzID = tz.substring(tz.indexOf(" ") + 1); // 1 index after the space is the ID + TimeZone selectedTZ = TimeZone.getTimeZone(tzID); // + return selectedTZ; + } + + private Calendar getCalendarDate(String dateValue) { + TimeZone selectedTZ = getSelectedTimeZone(); + Calendar inputDate = null; + try { + DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); + sdf.setTimeZone(selectedTZ); // get the time in the selected timezone + Date temp = sdf.parse(dateValue); + + inputDate = Calendar.getInstance(new SimpleTimeZone(0, "GMT")); //NON-NLS + inputDate.setTime(temp); // convert to GMT + } catch (ParseException ex) { + // for now, no need to show the error message to the user here + } + return inputDate; + } + @Override public void addActionListener(ActionListener l) { getComponent().addActionListener(l); } @Override + @Messages ({ + "End_Date_Before_Start_Date=The end date should be after the start date." + }) public boolean isValid() { + + final DateSearchPanel panel = this.getComponent(); + + 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()); + } + } + }); + + 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(); } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java index 7867a5ebd6..82c51d78b1 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java @@ -20,6 +20,8 @@ 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; @@ -50,6 +52,20 @@ class DateSearchPanel extends javax.swing.JPanel { dateFromTextField.setComponentPopupMenu(rightClickMenu); dateToTextField.setComponentPopupMenu(rightClickMenu); + //Block or disable user input to date time field + dateFromTextField.addKeyListener(new KeyAdapter() { + @Override + public void keyTyped(KeyEvent e) { + e.consume(); // ignore event + } + }); + dateToTextField.addKeyListener(new KeyAdapter() { + @Override + public void keyTyped(KeyEvent e) { + e.consume(); // ignore event + } + }); + ActionListener actList = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -365,6 +381,7 @@ class DateSearchPanel extends javax.swing.JPanel { if (evt.getNewValue() instanceof Date) { setToDate((Date) evt.getNewValue()); } + }//GEN-LAST:event_dateToPopupChanged private void dateCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dateCheckBoxActionPerformed @@ -399,6 +416,7 @@ class DateSearchPanel extends javax.swing.JPanel { if (date != null) { dateStringResult = dateFormat.format(date); } + dateFromTextField.setText(dateStringResult); dateFromButtonCalendar.setTargetDate(date); } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java index 951f4b206e..6bbb732a16 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionListener; +import javax.swing.JTextField; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; @@ -61,6 +62,7 @@ class HashSearchFilter extends AbstractFileSearchFilter { @Override public boolean isValid() { - return !this.getComponent().getSearchTextField().getText().isEmpty(); + JTextField inputHashData = this.getComponent().getSearchTextField(); + return !inputHashData.getText().isEmpty() || inputHashData.getText().length() == 32 || inputHashData.getText().matches("[0-9a-fA-F]+"); } } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java index ca43dac7e0..d045f486c3 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java @@ -19,8 +19,12 @@ 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.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; /** @@ -74,7 +78,27 @@ class SizeSearchFilter extends AbstractFileSearchFilter { } @Override + @NbBundle.Messages ({ + "Non_Negative_Number=Please input a non negative 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()); + return false; + } + return true; + } + }); return true; } } From db1b35a4dd89014d664e3156e0981f51f7b1b06e Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Thu, 26 Oct 2017 10:15:45 -0400 Subject: [PATCH 2/9] Simply turn the textfield to non editable to block user input for data time --- .../autopsy/filesearch/DateSearchPanel.form | 2 ++ .../autopsy/filesearch/DateSearchPanel.java | 15 ++------------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.form b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.form index e92d57fdd9..59082745da 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.form +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.form @@ -149,6 +149,7 @@ + @@ -208,6 +209,7 @@ + diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java index 82c51d78b1..b67f076c6d 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java @@ -52,19 +52,6 @@ class DateSearchPanel extends javax.swing.JPanel { dateFromTextField.setComponentPopupMenu(rightClickMenu); dateToTextField.setComponentPopupMenu(rightClickMenu); - //Block or disable user input to date time field - dateFromTextField.addKeyListener(new KeyAdapter() { - @Override - public void keyTyped(KeyEvent e) { - e.consume(); // ignore event - } - }); - dateToTextField.addKeyListener(new KeyAdapter() { - @Override - public void keyTyped(KeyEvent e) { - e.consume(); // ignore event - } - }); ActionListener actList = new ActionListener() { @Override @@ -192,6 +179,7 @@ class DateSearchPanel extends javax.swing.JPanel { selectAllMenuItem.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.selectAllMenuItem.text")); // NOI18N rightClickMenu.add(selectAllMenuItem); + dateToTextField.setEditable(false); dateToTextField.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateToTextField.text")); // NOI18N dateToTextField.addFocusListener(new java.awt.event.FocusAdapter() { public void focusLost(java.awt.event.FocusEvent evt) { @@ -213,6 +201,7 @@ class DateSearchPanel extends javax.swing.JPanel { jLabel3.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N jLabel3.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.jLabel3.text")); // NOI18N + dateFromTextField.setEditable(false); dateFromTextField.setText(org.openide.util.NbBundle.getMessage(DateSearchPanel.class, "DateSearchPanel.dateFromTextField.text")); // NOI18N dateFromTextField.addFocusListener(new java.awt.event.FocusAdapter() { public void focusLost(java.awt.event.FocusEvent evt) { From 9f637c8be4fbf6089bc5b833248d7d95258fca29 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Fri, 27 Oct 2017 09:22:38 -0400 Subject: [PATCH 3/9] 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); + } + }); + + } From a9caa221410f7864be772ca4248c5963ad76a90b Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Fri, 27 Oct 2017 09:49:39 -0400 Subject: [PATCH 4/9] 2969: update the Messages by using classname.messeges format --- .../autopsy/filesearch/DateSearchFilter.java | 8 ++++---- .../autopsy/filesearch/HashSearchFilter.java | 12 ++++++------ .../autopsy/filesearch/SizeSearchFilter.java | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java index 0f06839b50..a8e9724342 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java @@ -204,8 +204,8 @@ class DateSearchFilter extends AbstractFileSearchFilter { @Override @Messages ({ - "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." + "DateSearchFilter.endDateBeforeStartDate=The end date should be after the start date.", + "DateSearchFilter.noCheckboxSelected=Non of the date search checkbox is selected." }) public boolean isValid() { @@ -214,12 +214,12 @@ class DateSearchFilter extends AbstractFileSearchFilter { Calendar endDate = getCalendarDate(panel.getDateToTextField().getText()); if ((startDate != null && startDate.after(endDate)) || (endDate != null && endDate.before(startDate))) { - setLastError(Bundle.End_date_before_start_date()); + setLastError(Bundle.DateSearchFilter_endDateBeforeStartDate()); return false; } if (!panel.isValidSearch()) { - setLastError(Bundle.No_checkbox_selected()); + setLastError(Bundle.DateSearchFilter_noCheckboxSelected()); return false; } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java index c760ec8f52..61d39c8de3 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java @@ -62,22 +62,22 @@ 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." + "HashSearchFilter.emptyHash=Hash data is empty.", + "# {0} - hash data length", "HashSearchFilter.wrongLength=Input lenght({0}), doesn't match the MD5 length(32).", + "HashSearchFilter.wrongCharacter=Input data is an invalid MD5 hex data." }) public boolean isValid() { String inputHashData = this.getComponent().getSearchTextField().getText(); if (inputHashData.isEmpty()) { - setLastError(Bundle.Empty_hash()); + setLastError(Bundle.HashSearchFilter_emptyHash()); return false; } if (inputHashData.length() != 32) { - setLastError(Bundle.Wrong_length(inputHashData.length())); + setLastError(Bundle.HashSearchFilter_wrongLength(inputHashData.length())); return false; } if (!inputHashData.matches("[0-9a-fA-F]+")) { - setLastError(Bundle.Wrong_character()); + setLastError(Bundle.HashSearchFilter_wrongCharacter()); 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 22643c6868..8377caf974 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java @@ -76,8 +76,8 @@ class SizeSearchFilter extends AbstractFileSearchFilter { @Override @Messages ({ - "Non.negative.number=Input size data is a negative number.", - "Not.a.number=Input size data is not a number." + "SizeSearchFilter.nonNegativeNumber=Input size data is a negative number.", + "SizeSearchFilter.notANumber=Input size data is not a number." }) public boolean isValid() { String input = this.getComponent().getSizeTextField().getText(); @@ -85,11 +85,11 @@ class SizeSearchFilter extends AbstractFileSearchFilter { try { int inputInt = Integer.parseInt(input); if (inputInt < 0) { - setLastError(Bundle.Non_negative_number()); + setLastError(Bundle.SizeSearchFilter_nonNegativeNumber()); return false; } } catch (NumberFormatException | NullPointerException e) { - setLastError(Bundle.Not_a_number()); + setLastError(Bundle.SizeSearchFilter_notANumber()); return false; } return true; From 40a9b58ac65cd51b6270e5085e31e682274376b1 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Fri, 27 Oct 2017 09:56:41 -0400 Subject: [PATCH 5/9] 2969: Adding one more step as classname.errorMessage.message --- .../autopsy/filesearch/DateSearchFilter.java | 8 ++++---- .../autopsy/filesearch/HashSearchFilter.java | 12 ++++++------ .../autopsy/filesearch/SizeSearchFilter.java | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java index a8e9724342..3279a81f3e 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java @@ -204,8 +204,8 @@ class DateSearchFilter extends AbstractFileSearchFilter { @Override @Messages ({ - "DateSearchFilter.endDateBeforeStartDate=The end date should be after the start date.", - "DateSearchFilter.noCheckboxSelected=Non of the date search checkbox is selected." + "DateSearchFilter.errorMessage.endDateBeforeStartDate=The end date should be after the start date.", + "DateSearchFilter.errorMessage.noCheckboxSelected=Non of the date search checkbox is selected." }) public boolean isValid() { @@ -214,12 +214,12 @@ class DateSearchFilter extends AbstractFileSearchFilter { Calendar endDate = getCalendarDate(panel.getDateToTextField().getText()); if ((startDate != null && startDate.after(endDate)) || (endDate != null && endDate.before(startDate))) { - setLastError(Bundle.DateSearchFilter_endDateBeforeStartDate()); + setLastError(Bundle.DateSearchFilter_errorMessage_endDateBeforeStartDate()); return false; } if (!panel.isValidSearch()) { - setLastError(Bundle.DateSearchFilter_noCheckboxSelected()); + setLastError(Bundle.DateSearchFilter_errorMessage_noCheckboxSelected()); return false; } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java index 61d39c8de3..6204109372 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java @@ -62,22 +62,22 @@ class HashSearchFilter extends AbstractFileSearchFilter { @Override @Messages({ - "HashSearchFilter.emptyHash=Hash data is empty.", - "# {0} - hash data length", "HashSearchFilter.wrongLength=Input lenght({0}), doesn't match the MD5 length(32).", - "HashSearchFilter.wrongCharacter=Input data is an invalid MD5 hex data." + "HashSearchFilter.errorMessage.emptyHash=Hash data is empty.", + "# {0} - hash data length", "HashSearchFilter.errorMessage.wrongLength=Input lenght({0}), doesn't match the MD5 length(32).", + "HashSearchFilter.errorMessage.wrongCharacter=Input data is an invalid MD5 hex data." }) public boolean isValid() { String inputHashData = this.getComponent().getSearchTextField().getText(); if (inputHashData.isEmpty()) { - setLastError(Bundle.HashSearchFilter_emptyHash()); + setLastError(Bundle.HashSearchFilter_errorMessage_emptyHash()); return false; } if (inputHashData.length() != 32) { - setLastError(Bundle.HashSearchFilter_wrongLength(inputHashData.length())); + setLastError(Bundle.HashSearchFilter_errorMessage_wrongLength(inputHashData.length())); return false; } if (!inputHashData.matches("[0-9a-fA-F]+")) { - setLastError(Bundle.HashSearchFilter_wrongCharacter()); + setLastError(Bundle.HashSearchFilter_errorMessage_wrongCharacter()); 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 8377caf974..cf5d4f9e73 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchFilter.java @@ -76,8 +76,8 @@ class SizeSearchFilter extends AbstractFileSearchFilter { @Override @Messages ({ - "SizeSearchFilter.nonNegativeNumber=Input size data is a negative number.", - "SizeSearchFilter.notANumber=Input size data is not a number." + "SizeSearchFilter.errorMessage.nonNegativeNumber=Input size data is a negative number.", + "SizeSearchFilter.errorMessage.notANumber=Input size data is not a number." }) public boolean isValid() { String input = this.getComponent().getSizeTextField().getText(); @@ -85,11 +85,11 @@ class SizeSearchFilter extends AbstractFileSearchFilter { try { int inputInt = Integer.parseInt(input); if (inputInt < 0) { - setLastError(Bundle.SizeSearchFilter_nonNegativeNumber()); + setLastError(Bundle.SizeSearchFilter_errorMessage_nonNegativeNumber()); return false; } } catch (NumberFormatException | NullPointerException e) { - setLastError(Bundle.SizeSearchFilter_notANumber()); + setLastError(Bundle.SizeSearchFilter_errorMessage_notANumber()); return false; } return true; From 1fcc0caa6886976d06f7c79983630a1ae8740c8d Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Fri, 27 Oct 2017 11:36:59 -0400 Subject: [PATCH 6/9] 2969: Update the error message for no checkbox is selected error. --- Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java index 3279a81f3e..3291c5ae42 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java @@ -205,7 +205,7 @@ class DateSearchFilter extends AbstractFileSearchFilter { @Override @Messages ({ "DateSearchFilter.errorMessage.endDateBeforeStartDate=The end date should be after the start date.", - "DateSearchFilter.errorMessage.noCheckboxSelected=Non of the date search checkbox is selected." + "DateSearchFilter.errorMessage.noCheckboxSelected=At least one date type checkbox must be selected." }) public boolean isValid() { From 763c0fa03c610f92b99c288ed1e47a3d37eb42e6 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Fri, 27 Oct 2017 13:59:48 -0400 Subject: [PATCH 7/9] 2969: update MD5 error messages --- .../org/sleuthkit/autopsy/filesearch/HashSearchFilter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java index 6204109372..e63fce305e 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java @@ -63,8 +63,8 @@ class HashSearchFilter extends AbstractFileSearchFilter { @Override @Messages({ "HashSearchFilter.errorMessage.emptyHash=Hash data is empty.", - "# {0} - hash data length", "HashSearchFilter.errorMessage.wrongLength=Input lenght({0}), doesn't match the MD5 length(32).", - "HashSearchFilter.errorMessage.wrongCharacter=Input data is an invalid MD5 hex data." + "# {0} - hash data length", "HashSearchFilter.errorMessage.wrongLength=Input lenght({0}), doesn''t match the MD5 length(32).", + "HashSearchFilter.errorMessage.wrongCharacter=MD5 contains invalid hex characters." }) public boolean isValid() { String inputHashData = this.getComponent().getSearchTextField().getText(); From 33fdb5899938a6f951c21a3c6a022e6e29f2ec98 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Mon, 30 Oct 2017 11:15:44 -0400 Subject: [PATCH 8/9] 2969: Add validation messages for Name, MIME type and known status --- .../autopsy/filesearch/KnownStatusSearchFilter.java | 10 +++++++++- .../sleuthkit/autopsy/filesearch/MimeTypeFilter.java | 10 +++++++++- .../sleuthkit/autopsy/filesearch/NameSearchFilter.java | 10 +++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java index 5f52afa035..677f0116e9 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionListener; import org.openide.util.NbBundle; +import org.openide.util.NbBundle.Messages; import org.sleuthkit.datamodel.TskData.FileKnown; /** @@ -85,7 +86,14 @@ class KnownStatusSearchFilter extends AbstractFileSearchFilter { } @Override + @Messages ({ + "MimeTypeFilter.errorMessage.emptyMimeType=At least one MIME type must be selected." + }) public boolean isValid() { - return !this.getComponent().getMimeTypesSelected().isEmpty(); + if(this.getComponent().getMimeTypesSelected().isEmpty()){ + setLastError(Bundle.MimeTypeFilter_errorMessage_emptyMimeType()); + return false; + } + return true; } } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java index ee70ebd5e1..2b204c8ca8 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchFilter.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionListener; import org.openide.util.NbBundle; +import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; /** @@ -64,7 +65,14 @@ class NameSearchFilter extends AbstractFileSearchFilter { } @Override + @Messages ({ + "NameSearchFilter.errorMessage.emtpyName=Please input a name to search." + }) public boolean isValid() { - return !this.getComponent().getSearchTextField().getText().isEmpty(); + if(this.getComponent().getSearchTextField().getText().isEmpty()) { + setLastError(Bundle.NameSearchFilter_errorMessage_emtpyName()); + return false; + } + return true; } } From adc3f3e635fbbcfec9187bed17d63ae15e78cf49 Mon Sep 17 00:00:00 2001 From: "U-BASIS\\zhaohui" Date: Mon, 30 Oct 2017 15:44:43 -0400 Subject: [PATCH 9/9] 2969. fix typo --- Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java index e63fce305e..d77fe5826e 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/HashSearchFilter.java @@ -63,7 +63,7 @@ class HashSearchFilter extends AbstractFileSearchFilter { @Override @Messages({ "HashSearchFilter.errorMessage.emptyHash=Hash data is empty.", - "# {0} - hash data length", "HashSearchFilter.errorMessage.wrongLength=Input lenght({0}), doesn''t match the MD5 length(32).", + "# {0} - hash data length", "HashSearchFilter.errorMessage.wrongLength=Input length({0}), doesn''t match the MD5 length(32).", "HashSearchFilter.errorMessage.wrongCharacter=MD5 contains invalid hex characters." }) public boolean isValid() {