From 3788efff78cdf50f809c9673cd60665e8101a2a6 Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Tue, 19 Apr 2016 09:57:02 -0400 Subject: [PATCH 01/29] Made new file types detectable by file extension mismatch settings. --- .../FileExtMismatchSettingsPanel.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java index 56883ef119..64fee99b5a 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java @@ -29,10 +29,10 @@ import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; -import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; import org.sleuthkit.autopsy.modules.filetypeid.FileTypeDetector; /** @@ -422,7 +422,17 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel return; } - boolean mimeTypeDetectable = (null != fileTypeDetector) ? fileTypeDetector.isDetectable(newMime) : false; + FileTypeDetector detector; + try { + detector = new FileTypeDetector(); + } catch (FileTypeDetector.FileTypeDetectorInitException ex) { + mimeErrLabel.setForeground(Color.red); + mimeErrLabel.setText(NbBundle.getMessage(this.getClass(), + "FileExtMismatchConfigPanel.addTypeButton.mimeTypeNotDetectable")); + logger.log(Level.WARNING, "Couldn't create file type detector for file ext mismatch settings.", ex); + return; + } + boolean mimeTypeDetectable = (null != detector) ? detector.isDetectable(newMime) : false; if (!mimeTypeDetectable) { mimeErrLabel.setForeground(Color.red); mimeErrLabel.setText(NbBundle.getMessage(this.getClass(), From 104356ed03eb1f1208d51ecc82d56094eb94a9e5 Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Tue, 19 Apr 2016 10:14:15 -0400 Subject: [PATCH 02/29] Started using property change support to make apply button work. --- ...FileExtMismatchOptionsPanelController.java | 13 +++++++++-- .../FileExtMismatchSettingsPanel.java | 22 +++++++++++++++++-- .../FileTypeIdGlobalSettingsPanel.java | 16 ++++++++++++++ .../FileTypeIdOptionsPanelController.java | 9 ++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchOptionsPanelController.java index 8a4638ac28..941a70dfc1 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchOptionsPanelController.java @@ -4,16 +4,17 @@ */ package org.sleuthkit.autopsy.modules.fileextmismatch; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; +import java.util.logging.Level; import javax.swing.JComponent; import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.HelpCtx; import org.openide.util.Lookup; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import java.util.logging.Level; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; @OptionsPanelController.TopLevelRegistration( categoryName = "#OptionsCategory_Name_FileExtMismatchOptions", @@ -79,6 +80,14 @@ public final class FileExtMismatchOptionsPanelController extends OptionsPanelCon private FileExtMismatchSettingsPanel getPanel() { if (panel == null) { panel = new FileExtMismatchSettingsPanel(); + panel.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals(OptionsPanelController.PROP_CHANGED)) { + changed = true; + } + } + }); } return panel; } diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java index 56883ef119..db8a4960df 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchSettingsPanel.java @@ -19,6 +19,8 @@ package org.sleuthkit.autopsy.modules.fileextmismatch; import java.awt.Color; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -29,10 +31,11 @@ import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; -import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; +import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; +import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; import org.sleuthkit.autopsy.modules.filetypeid.FileTypeDetector; /** @@ -53,6 +56,7 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel private String selectedExt = ""; ListSelectionModel lsm = null; private FileTypeDetector fileTypeDetector; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); public FileExtMismatchSettingsPanel() { mimeTableModel = new MimeTableModel(); @@ -125,6 +129,16 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel } + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + private void clearErrLabels() { mimeErrLabel.setText(" "); mimeRemoveErrLabel.setText(" "); @@ -400,6 +414,7 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel extRemoveErrLabel.setText(" "); userExtTextField.setText(""); setIsModified(); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_addExtButtonActionPerformed private void addTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addTypeButtonActionPerformed @@ -444,6 +459,7 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel mimeRemoveErrLabel.setText(" "); userTypeTextField.setText(""); setIsModified(); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_addTypeButtonActionPerformed private void userExtTextFieldFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_userExtTextFieldFocusGained @@ -474,6 +490,7 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel mimeRemoveErrLabel.setText( NbBundle.getMessage(this.getClass(), "FileExtMismatchConfigPanel.remoteTypeButton.deleted", deadMime)); setIsModified(); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_removeTypeButtonActionPerformed private void removeExtButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeExtButtonActionPerformed @@ -507,6 +524,7 @@ final class FileExtMismatchSettingsPanel extends IngestModuleGlobalSettingsPanel extRemoveErrLabel.setText( NbBundle.getMessage(this.getClass(), "FileExtMismatchConfigPanel.removeExtButton.deleted", deadExt)); setIsModified(); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_removeExtButtonActionPerformed private void updateMimeList() { diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java index 40850063fb..74ddc51f04 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdGlobalSettingsPanel.java @@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.modules.filetypeid; import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.util.Collections; import java.util.List; import javax.swing.DefaultComboBoxModel; @@ -28,6 +29,7 @@ import javax.swing.DefaultListModel; import javax.swing.JOptionPane; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; import org.sleuthkit.autopsy.ingest.IngestManager; @@ -67,6 +69,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane // modules obtained and shared a per data source ingest job snapshot of the // file type definitions. IngestJobEventPropertyChangeListener ingestJobEventsListener; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); /** * Creates a panel to allow a user to make custom file type definitions. @@ -92,6 +95,16 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane populateTypeDetailsComponents(); } + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + /** * Sets the list model for the list of file types. */ @@ -467,6 +480,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane if (result == AddFileTypeDialog.BUTTON_PRESSED.OK) { fileTypes.add(dialog.getFileType()); updateFileTypesListModel(); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } }//GEN-LAST:event_newTypeButtonActionPerformed @@ -478,6 +492,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane if (!typesListModel.isEmpty()) { typesList.setSelectedIndex(0); } + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_deleteTypeButtonActionPerformed private void editTypeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editTypeButtonActionPerformed @@ -488,6 +503,7 @@ final class FileTypeIdGlobalSettingsPanel extends IngestModuleGlobalSettingsPane this.fileTypes.remove(selected); this.fileTypes.add(selected, dialog.getFileType()); updateFileTypesListModel(); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } }//GEN-LAST:event_editTypeButtonActionPerformed diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdOptionsPanelController.java index d4b7270f45..6cde9fe31a 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdOptionsPanelController.java @@ -5,6 +5,7 @@ */ package org.sleuthkit.autopsy.modules.filetypeid; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import javax.swing.JComponent; @@ -76,6 +77,14 @@ public final class FileTypeIdOptionsPanelController extends OptionsPanelControll private FileTypeIdGlobalSettingsPanel getPanel() { if (panel == null) { panel = new FileTypeIdGlobalSettingsPanel(); + panel.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if(evt.getPropertyName().equals(OptionsPanelController.PROP_CHANGED)) { + changed = true; + } + } + }); } return panel; } From ce986c28b9c9a2fde3f7b13afedee49cdbb3f53a Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Tue, 19 Apr 2016 11:59:20 -0400 Subject: [PATCH 03/29] Moved towards finishing apply. --- .../HashDatabaseOptionsPanelController.java | 13 +++++++-- .../hashdatabase/HashLookupSettingsPanel.java | 19 +++++++++++++ ...restingItemDefsOptionsPanelController.java | 9 +++++++ .../InterestingItemDefsPanel.java | 27 +++++++++++++++---- .../GlobalListSettingsPanel.java | 13 +++++++++ .../GlobalListsManagementPanel.java | 21 +++++++++++++-- .../KeywordSearchGlobalSettingsPanel.java | 15 +++++++++++ .../KeywordSearchOptionsPanelController.java | 13 +++++++-- 8 files changed, 119 insertions(+), 11 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDatabaseOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDatabaseOptionsPanelController.java index def594863a..e66e85dda6 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDatabaseOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDatabaseOptionsPanelController.java @@ -18,16 +18,17 @@ */ package org.sleuthkit.autopsy.modules.hashdatabase; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; +import java.util.logging.Level; import javax.swing.JComponent; import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.HelpCtx; import org.openide.util.Lookup; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import java.util.logging.Level; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; @OptionsPanelController.TopLevelRegistration( categoryName = "#OptionsCategory_Name_HashDatabase", @@ -95,6 +96,14 @@ public final class HashDatabaseOptionsPanelController extends OptionsPanelContro private HashLookupSettingsPanel getPanel() { if (panel == null) { panel = new HashLookupSettingsPanel(); + panel.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals(OptionsPanelController.PROP_CHANGED)) { + changed = true; + } + } + }); } return panel; } diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.java index 0eefefba17..074bb4749c 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashLookupSettingsPanel.java @@ -22,6 +22,7 @@ import java.awt.*; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -34,6 +35,7 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableCellRenderer; +import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.NbBundle; import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; @@ -59,6 +61,7 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan .getMessage(HashLookupSettingsPanel.class, "HashDbConfigPanel.errorGettingIndexStatusText"); private final HashDbManager hashSetManager = HashDbManager.getInstance(); private final HashSetTableModel hashSetTableModel = new HashSetTableModel(); + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); public HashLookupSettingsPanel() { initComponents(); @@ -100,6 +103,16 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan }); } + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + private void updateComponents() { HashDb db = ((HashSetTable) hashSetTable).getSelection(); if (db != null) { @@ -826,6 +839,7 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan JOptionPane.showMessageDialog(null, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.getHashSetName())); } hashSetTableModel.refreshModel(); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } } }//GEN-LAST:event_deleteDatabaseButtonActionPerformed @@ -840,6 +854,7 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan JOptionPane.showMessageDialog(null, Bundle.HashLookupSettingsPanel_removeDatabaseFailure_message(hashDb.getHashSetName())); } hashSetTableModel.refreshModel(); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } } }//GEN-LAST:event_hashSetTableKeyPressed @@ -848,6 +863,7 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan HashDb hashDb = ((HashSetTable) hashSetTable).getSelection(); if (hashDb != null) { hashDb.setSendIngestMessages(sendIngestMessagesCheckBox.isSelected()); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } }//GEN-LAST:event_sendIngestMessagesCheckBoxActionPerformed @@ -856,6 +872,7 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan if (null != hashDb) { hashSetTableModel.refreshModel(); ((HashSetTable) hashSetTable).selectRowByName(hashDb.getHashSetName()); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } }//GEN-LAST:event_importDatabaseButtonActionPerformed @@ -864,6 +881,7 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan if (null != hashDb) { hashSetTableModel.refreshModel(); ((HashSetTable) hashSetTable).selectRowByName(hashDb.getHashSetName()); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } }//GEN-LAST:event_createDatabaseButtonActionPerformed @@ -871,6 +889,7 @@ public final class HashLookupSettingsPanel extends IngestModuleGlobalSettingsPan HashDb hashDb = ((HashSetTable) hashSetTable).getSelection(); new AddHashValuesToDatabaseDialog(hashDb); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_addHashesToDatabaseButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java index 127d0c45af..a19387dfcf 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.modules.interestingitems; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import javax.swing.JComponent; @@ -94,6 +95,14 @@ public final class InterestingItemDefsOptionsPanelController extends OptionsPane private InterestingItemDefsPanel getPanel() { if (panel == null) { panel = new InterestingItemDefsPanel(); + panel.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals(OptionsPanelController.PROP_CHANGED)) { + changed = true; + } + } + }); } return panel; } diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java index 61271fc54c..dba9091bb7 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java @@ -19,7 +19,8 @@ package org.sleuthkit.autopsy.modules.interestingitems; import java.awt.EventQueue; -import java.awt.Font; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -35,15 +36,14 @@ import javax.swing.JOptionPane; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.apache.tika.mime.MediaType; +import org.apache.tika.mime.MimeTypes; +import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; +import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; import org.sleuthkit.autopsy.modules.filetypeid.FileTypeDetector; -import org.apache.tika.mime.MediaType; -import org.apache.tika.mime.MimeTypes; -import org.openide.util.Exceptions; -import org.sleuthkit.autopsy.coreutils.Logger; /** * A panel that allows a user to make interesting item definitions. @@ -74,6 +74,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp // definitions manager. Note that it is a tree map to aid in displaying // files sets in sorted order by name. private TreeMap filesSets; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); /** * Constructs an interesting item definitions panel. @@ -121,6 +122,16 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp this.fileSizeUnitComboBox.setSelectedIndex(1); this.equalitySignComboBox.setSelectedIndex(2); } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } /** * @inheritDoc @@ -907,6 +918,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp private void newSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newSetButtonActionPerformed this.doFileSetsDialog(null); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_newSetButtonActionPerformed private void deleteRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteRuleButtonActionPerformed @@ -919,6 +931,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp FilesSet.Rule selectedRule = this.rulesList.getSelectedValue(); rules.remove(selectedRule.getUuid()); this.replaceFilesSet(oldSet, oldSet.getName(), oldSet.getDescription(), oldSet.ignoresKnownFiles(), rules); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_deleteRuleButtonActionPerformed private void deleteSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteSetButtonActionPerformed @@ -933,6 +946,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp } else { this.resetComponents(); } + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_deleteSetButtonActionPerformed private void ignoreKnownFilesCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ignoreKnownFilesCheckboxActionPerformed @@ -941,14 +955,17 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp private void editSetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editSetButtonActionPerformed this.doFileSetsDialog(this.setsList.getSelectedValue()); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_editSetButtonActionPerformed private void editRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_editRuleButtonActionPerformed this.doFilesSetRuleDialog(this.rulesList.getSelectedValue()); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_editRuleButtonActionPerformed private void newRuleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newRuleButtonActionPerformed this.doFilesSetRuleDialog(null); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_newRuleButtonActionPerformed private void fileNameTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileNameTextFieldActionPerformed diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.java index 62bcecda24..764017891d 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListSettingsPanel.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.keywordsearch; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.beans.PropertyChangeListener; import java.util.List; import javax.swing.JOptionPane; import org.openide.util.NbBundle; @@ -109,6 +110,18 @@ final class GlobalListSettingsPanel extends javax.swing.JPanel implements Option mainSplitPane.revalidate(); mainSplitPane.repaint(); } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + listsManagementPanel.addPropertyChangeListener(l); + editListPanel.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + listsManagementPanel.removePropertyChangeListener(l); + editListPanel.removePropertyChangeListener(l); + } @Override public void store() { diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java index 05920d6d9c..c9297e5ff1 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalListsManagementPanel.java @@ -19,17 +19,20 @@ package org.sleuthkit.autopsy.keywordsearch; import java.awt.event.KeyEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.io.File; import java.util.ArrayList; import java.util.List; -import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.Logger; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.AbstractTableModel; +import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; +import org.sleuthkit.autopsy.coreutils.Logger; /** * A panel to manage all keyword lists created/imported in Autopsy. @@ -38,6 +41,7 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa private Logger logger = Logger.getLogger(GlobalListsManagementPanel.class.getName()); private KeywordListTableModel tableModel; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); GlobalListsManagementPanel() { tableModel = new KeywordListTableModel(); @@ -74,6 +78,16 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa * listsTable.getSelectionModel().clearSelection(); } } } }); */ } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } /** * This method is called from within the constructor to initialize the form. @@ -197,6 +211,7 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa listsTable.getSelectionModel().addSelectionInterval(i, i); } } + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_newListButtonActionPerformed private void importButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importButtonActionPerformed @@ -291,6 +306,7 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa } } } + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_importButtonActionPerformed private void listsTableKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_listsTableKeyPressed if (evt.getKeyCode() == KeyEvent.VK_DELETE) { @@ -300,6 +316,7 @@ class GlobalListsManagementPanel extends javax.swing.JPanel implements OptionsPa } else if (KeywordSearchUtil.displayConfirmDialog(NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.title"), NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel1.customizeComponents.body"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN)) { String listName = (String) listsTable.getModel().getValueAt(selected[0], 0); XmlKeywordSearchList.getCurrent().deleteList(listName); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } else { return; } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalSettingsPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalSettingsPanel.java index 652715bc31..e238e3132a 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalSettingsPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalSettingsPanel.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.keywordsearch; +import java.beans.PropertyChangeListener; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; import org.sleuthkit.autopsy.ingest.IngestModuleGlobalSettingsPanel; @@ -50,6 +51,20 @@ final class KeywordSearchGlobalSettingsPanel extends IngestModuleGlobalSettingsP generalPanel, NbBundle.getMessage(this.getClass(), "KeywordSearchConfigurationPanel.customizeComponents.genTabToolTip"), 2); } + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + listsPanel.addPropertyChangeListener(l); + languagesPanel.addPropertyChangeListener(l); + generalPanel.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + listsPanel.removePropertyChangeListener(l); + languagesPanel.removePropertyChangeListener(l); + generalPanel.removePropertyChangeListener(l); + } + /** * 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 diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java index 8deb9a7446..8e37d806cf 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java @@ -18,16 +18,17 @@ */ package org.sleuthkit.autopsy.keywordsearch; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; +import java.util.logging.Level; import javax.swing.JComponent; import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.HelpCtx; import org.openide.util.Lookup; import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; -import java.util.logging.Level; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; @OptionsPanelController.TopLevelRegistration( categoryName = "#OptionsCategory_Name_KeywordSearchOptions", @@ -92,6 +93,14 @@ public final class KeywordSearchOptionsPanelController extends OptionsPanelContr private KeywordSearchGlobalSettingsPanel getPanel() { if (panel == null) { panel = new KeywordSearchGlobalSettingsPanel(); + panel.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals(OptionsPanelController.PROP_CHANGED)) { + changed = true; + } + } + }); } return panel; } From 2c334e07f0b844b71c6feae7a21c88fe37cf6b1b Mon Sep 17 00:00:00 2001 From: Oliver Spohngellert Date: Tue, 19 Apr 2016 12:59:26 -0400 Subject: [PATCH 04/29] Finished making apply button work in keyword search. --- .../keywordsearch/GlobalEditListPanel.java | 20 +++- ...wordSearchGlobalLanguageSettingsPanel.java | 22 +++++ ...eywordSearchGlobalSearchSettingsPanel.form | 18 ++++ ...eywordSearchGlobalSearchSettingsPanel.java | 99 ++++++++++++++++--- 4 files changed, 141 insertions(+), 18 deletions(-) diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.java index f4f2596956..49292e9278 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/GlobalEditListPanel.java @@ -23,13 +23,12 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.Level; -import org.openide.util.NbBundle; -import org.sleuthkit.autopsy.coreutils.Logger; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import javax.swing.JFileChooser; @@ -41,7 +40,10 @@ import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableColumn; +import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.NbBundle; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; +import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.ingest.IngestManager; /** @@ -52,6 +54,7 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis private static final Logger logger = Logger.getLogger(GlobalEditListPanel.class.getName()); private KeywordTableModel tableModel; private KeywordList currentKeywordList; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); /** * Creates new form GlobalEditListPanel @@ -141,6 +144,16 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis }); } + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + void setButtonStates() { boolean isIngestRunning = IngestManager.getInstance().isIngestRunning(); boolean isListSelected = currentKeywordList != null; @@ -422,6 +435,7 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis XmlKeywordSearchList.getCurrent().addList(currentKeywordList); chRegex.setSelected(false); addWordField.setText(""); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); setButtonStates(); }//GEN-LAST:event_addWordButtonActionPerformed @@ -432,6 +446,7 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis tableModel.deleteSelected(keywordTable.getSelectedRows()); XmlKeywordSearchList.getCurrent().addList(currentKeywordList); setButtonStates(); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); } }//GEN-LAST:event_deleteWordButtonActionPerformed @@ -494,6 +509,7 @@ class GlobalEditListPanel extends javax.swing.JPanel implements ListSelectionLis currentKeywordList.setIngestMessages(ingestMessagesCheckbox.isSelected()); XmlKeywordSearchList updater = XmlKeywordSearchList.getCurrent(); updater.addList(currentKeywordList); + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_ingestMessagesCheckboxActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel addKeywordPanel; diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalLanguageSettingsPanel.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalLanguageSettingsPanel.java index b88ce6de59..03e72a8ddb 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalLanguageSettingsPanel.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchGlobalLanguageSettingsPanel.java @@ -21,11 +21,14 @@ package org.sleuthkit.autopsy.keywordsearch; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JCheckBox; +import org.netbeans.spi.options.OptionsPanelController; import org.sleuthkit.autopsy.corecomponents.OptionsPanel; import org.sleuthkit.autopsy.coreutils.StringExtract; import org.sleuthkit.autopsy.coreutils.StringExtract.StringExtractUnicodeTable.SCRIPT; @@ -39,6 +42,7 @@ class KeywordSearchGlobalLanguageSettingsPanel extends javax.swing.JPanel implem private final Map scripts = new HashMap<>(); private ActionListener updateLanguagesAction; private List