diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/AbstractFileSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/AbstractFileSearchFilter.java index 0d59301eea..67f65be80b 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/AbstractFileSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/AbstractFileSearchFilter.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.filesearch; +import java.beans.PropertyChangeListener; import javax.swing.JComponent; /** @@ -39,4 +40,9 @@ abstract class AbstractFileSearchFilter implements FileSea public T getComponent() { return this.component; } + + @Override + public void addPropertyChangeListener(PropertyChangeListener listener) { + this.getComponent().addPropertyChangeListener(listener); + } } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java index be8a799556..be42035087 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchFilter.java @@ -205,6 +205,11 @@ class DateSearchFilter extends AbstractFileSearchFilter { getComponent().addActionListener(l); } + @Override + public void addPropertyChangeListener(PropertyChangeListener listener) { + getComponent().addPropertyChangeListener(listener); + } + /** * Inner class to put the separator inside the combo box. */ diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/DateSearchPanel.java index ea3642a65d..a852fddfa3 100644 --- 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.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.text.DateFormat; import java.text.ParseException; import java.util.Date; @@ -37,6 +39,7 @@ class DateSearchPanel extends javax.swing.JPanel { DateFormat dateFormat; List timeZones; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); DateSearchPanel(DateFormat dateFormat, List timeZones) { this.dateFormat = dateFormat; @@ -133,6 +136,16 @@ class DateSearchPanel extends javax.swing.JPanel { this.changedCheckBox.setEnabled(enable); this.createdCheckBox.setEnabled(enable); } + + @Override + public void addPropertyChangeListener(PropertyChangeListener pcl) { + pcs.addPropertyChangeListener(pcl); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener pcl) { + pcs.removePropertyChangeListener(pcl); + } /** * This method is called from within the constructor to initialize the form. @@ -349,6 +362,7 @@ class DateSearchPanel extends javax.swing.JPanel { private void dateCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dateCheckBoxActionPerformed this.setComponentsEnabled(); + pcs.firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); }//GEN-LAST:event_dateCheckBoxActionPerformed /** diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchFilter.java index 878c500c0b..d4b39716d7 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchFilter.java @@ -19,12 +19,13 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionListener; +import java.beans.PropertyChangeListener; import javax.swing.JComponent; /** * Provides a filter and the panel to display it to the FileSearchTopComponent */ -interface FileSearchFilter { + interface FileSearchFilter { /** * Gets the panel to put in the File Search pane. @@ -55,6 +56,8 @@ interface FileSearchFilter { * Add an action listener to the fields of this panel */ void addActionListener(ActionListener l); + + void addPropertyChangeListener(PropertyChangeListener listener); /** * Thrown if a filter's inputs are invalid diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java index e796589d22..de01ecd901 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java @@ -17,38 +17,35 @@ * limitations under the License. */ -/* + /* * FileSearchPanel.java * * Created on Mar 5, 2012, 1:51:50 PM */ package org.sleuthkit.autopsy.filesearch; -import java.awt.BorderLayout; 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; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.logging.Level; - -import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.Logger; -import javax.swing.BoxLayout; -import javax.swing.JButton; import javax.swing.JLabel; -import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; +import org.openide.util.NbBundle; import org.openide.windows.TopComponent; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; import org.sleuthkit.autopsy.corecomponents.TableFilterNode; +import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.filesearch.FileSearchFilter.FilterValidationException; import org.sleuthkit.datamodel.AbstractFile; @@ -64,6 +61,10 @@ class FileSearchPanel extends javax.swing.JPanel { private static int resultWindowCount = 0; //keep track of result windows so they get unique names private static final String EMPTY_WHERE_CLAUSE = NbBundle.getMessage(DateSearchFilter.class, "FileSearchPanel.emptyWhereClause.text"); + enum EVENT { + CHECKED + } + /** * Creates new form FileSearchPanel */ @@ -100,12 +101,22 @@ class FileSearchPanel extends javax.swing.JPanel { filterPanel.add(fa); } + for (FileSearchFilter filter : this.getFilters()) { + filter.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + searchButton.setEnabled(anyFiltersEnabled()); + } + }); + } + addListenerToAll(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { search(); } }); + searchButton.setEnabled(anyFiltersEnabled()); } /** @@ -290,6 +301,7 @@ class FileSearchPanel extends javax.swing.JPanel { .addContainerGap()) ); }// //GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel filterPanel; private javax.swing.JButton searchButton; diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java index bd9776f61d..8bd74d02fa 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchFilter.java @@ -19,7 +19,6 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionListener; - import org.openide.util.NbBundle; import org.sleuthkit.datamodel.TskData.FileKnown; diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.java index 291ced32e7..89e12481b1 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/KnownStatusSearchPanel.java @@ -17,13 +17,15 @@ * limitations under the License. */ -/* + /* * KnownStatusSearchPanel.java * * Created on Oct 19, 2011, 11:45:44 AM */ package org.sleuthkit.autopsy.filesearch; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import javax.swing.JCheckBox; /** @@ -32,6 +34,8 @@ import javax.swing.JCheckBox; */ class KnownStatusSearchPanel extends javax.swing.JPanel { + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + /** * Creates new form KnownStatusSearchPanel */ @@ -55,7 +59,7 @@ class KnownStatusSearchPanel extends javax.swing.JPanel { JCheckBox getUnknownOptionCheckBox() { return unknownOptionCheckBox; } - + private void setComponentsEnabled() { boolean enabled = this.knownCheckBox.isSelected(); this.unknownOptionCheckBox.setEnabled(enabled); @@ -63,6 +67,16 @@ class KnownStatusSearchPanel extends javax.swing.JPanel { this.knownBadOptionCheckBox.setEnabled(enabled); } + @Override + public void addPropertyChangeListener(PropertyChangeListener pcl) { + pcs.addPropertyChangeListener(pcl); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener pcl) { + pcs.removePropertyChangeListener(pcl); + } + /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always @@ -132,6 +146,7 @@ class KnownStatusSearchPanel extends javax.swing.JPanel { private void knownCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_knownCheckBoxActionPerformed setComponentsEnabled(); + pcs.firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); }//GEN-LAST:event_knownCheckBoxActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypeFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypeFilter.java index b119566299..72cb4e7012 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypeFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypeFilter.java @@ -40,5 +40,7 @@ class MimeTypeFilter extends AbstractFileSearchFilter { @Override public void addActionListener(ActionListener l) { } + + } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.form b/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.form index a8c7fa65f9..7eb2d436df 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.form +++ b/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.form @@ -31,7 +31,7 @@ - + diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.java index b4172354a4..e14e5e0dc4 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.java @@ -5,12 +5,16 @@ */ package org.sleuthkit.autopsy.filesearch; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.SortedSet; import java.util.logging.Level; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import org.apache.tika.mime.MediaType; import org.apache.tika.mime.MimeTypes; import org.sleuthkit.autopsy.coreutils.Logger; @@ -25,6 +29,7 @@ public class MimeTypePanel extends javax.swing.JPanel { private static final SortedSet mediaTypes = MimeTypes.getDefaultMimeTypes().getMediaTypeRegistry().getTypes(); private static final Logger logger = Logger.getLogger(MimeTypePanel.class.getName()); private static final long serialVersionUID = 1L; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); /** * Creates new form MimeTypePanel @@ -32,6 +37,12 @@ public class MimeTypePanel extends javax.swing.JPanel { public MimeTypePanel() { initComponents(); setComponentsEnabled(); + this.mimeTypeList.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + pcs.firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + } + }); } private String[] getMimeTypeArray() { @@ -75,6 +86,16 @@ public class MimeTypePanel extends javax.swing.JPanel { this.mimeTypeList.setEnabled(enabled); this.jLabel1.setEnabled(enabled); } + + @Override + public void addPropertyChangeListener(PropertyChangeListener pcl) { + pcs.addPropertyChangeListener(pcl); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener pcl) { + pcs.removePropertyChangeListener(pcl); + } /** * This method is called from within the constructor to initialize the form. @@ -141,6 +162,8 @@ public class MimeTypePanel extends javax.swing.JPanel { private void mimeTypeCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mimeTypeCheckBoxActionPerformed setComponentsEnabled(); + pcs.firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); + this.mimeTypeList.setSelectedIndices(new int[0]); }//GEN-LAST:event_mimeTypeCheckBoxActionPerformed diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.java index 1ae2842947..dd7a3d008f 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/NameSearchPanel.java @@ -17,7 +17,7 @@ * limitations under the License. */ -/* + /* * NameSearchPanel.java * * Created on Oct 19, 2011, 11:58:53 AM @@ -26,6 +26,8 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import javax.swing.JCheckBox; import javax.swing.JMenuItem; import javax.swing.JTextField; @@ -36,6 +38,8 @@ import javax.swing.JTextField; */ class NameSearchPanel extends javax.swing.JPanel { + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + /** * Creates new form NameSearchPanel */ @@ -77,12 +81,22 @@ class NameSearchPanel extends javax.swing.JPanel { JTextField getSearchTextField() { return searchTextField; } - + void setComponentsEnabled() { boolean enabled = nameCheckBox.isSelected(); this.searchTextField.setEnabled(enabled); this.noteNameLabel.setEnabled(enabled); } + + @Override + public void addPropertyChangeListener(PropertyChangeListener pcl) { + pcs.addPropertyChangeListener(pcl); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener pcl) { + pcs.removePropertyChangeListener(pcl); + } /** * This method is called from within the constructor to initialize the form. @@ -168,6 +182,7 @@ class NameSearchPanel extends javax.swing.JPanel { private void nameCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nameCheckBoxActionPerformed setComponentsEnabled(); + pcs.firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); }//GEN-LAST:event_nameCheckBoxActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java index 4a0bc91d5e..4bde4eb5e7 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/SizeSearchPanel.java @@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.filesearch; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.text.NumberFormat; import javax.swing.JCheckBox; import javax.swing.JComboBox; @@ -32,6 +34,8 @@ import javax.swing.JMenuItem; */ class SizeSearchPanel extends javax.swing.JPanel { + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + /** * Creates new form SizeSearchPanel */ @@ -81,13 +85,23 @@ class SizeSearchPanel extends javax.swing.JPanel { JComboBox getSizeUnitComboBox() { return sizeUnitComboBox; } - + void setComponentsEnabled() { boolean enabled = this.sizeCheckBox.isSelected(); this.sizeCompareComboBox.setEnabled(enabled); this.sizeUnitComboBox.setEnabled(enabled); this.sizeTextField.setEnabled(enabled); } + + @Override + public void addPropertyChangeListener(PropertyChangeListener pcl) { + pcs.addPropertyChangeListener(pcl); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener pcl) { + pcs.removePropertyChangeListener(pcl); + } /** * This method is called from within the constructor to initialize the form. @@ -168,6 +182,7 @@ class SizeSearchPanel extends javax.swing.JPanel { private void sizeCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sizeCheckBoxActionPerformed setComponentsEnabled(); + pcs.firePropertyChange(FileSearchPanel.EVENT.CHECKED.toString(), null, null); }//GEN-LAST:event_sizeCheckBoxActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables