diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettings.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettings.java index 408e8213b3..702b5014ea 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettings.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettings.java @@ -42,21 +42,18 @@ import org.sleuthkit.autopsy.modules.interestingitems.IngestSetFilter; /** * Encapsulates the ingest job settings for a particular execution context. * Examples of execution contexts include the add data source wizard and the run - * ingest modules dialog. Different execution conterxts may have different - * ingest job settings. + * ingest modules dialog. Different execution contexts may have different ingest + * job settings. */ public class IngestJobSettings { private static final String ENABLED_MODULES_KEY = "Enabled_Ingest_Modules"; //NON-NLS private static final String DISABLED_MODULES_KEY = "Disabled_Ingest_Modules"; //NON-NLS private static final String PARSE_UNALLOC_SPACE_KEY = "Process_Unallocated_Space"; //NON-NLS - private static final String RUN_ON_FILTER_KEY = "Run_Ingest_On"; private static final String PROCESS_UNALLOC_SPACE_DEFAULT = "true"; //NON-NLS - private static final String RUN_ON_FILTER_DEFAULT = IngestSetFilter.ALL_FILES_AND_UNALLOCATED_FILTER; private static final String MODULE_SETTINGS_FOLDER = "IngestModuleSettings"; //NON-NLS private static final String MODULE_SETTINGS_FOLDER_PATH = Paths.get(PlatformUtil.getUserConfigDirectory(), IngestJobSettings.MODULE_SETTINGS_FOLDER).toAbsolutePath().toString(); private static final String MODULE_SETTINGS_FILE_EXT = ".settings"; //NON-NLS - private String runIngestModulesOnFilter; private static final Logger LOGGER = Logger.getLogger(IngestJobSettings.class.getName()); private final String executionContext; private final IngestType ingestType; @@ -66,22 +63,6 @@ public class IngestJobSettings { private boolean processUnallocatedSpace; private final List warnings; - /** - * @return the runIngestModulesOnFilter - */ - String getRunIngestModulesOnFilter() { - return runIngestModulesOnFilter; - } - - /** - * @param runIngestModulesOnFilter the runIngestModulesOnFilter to set - */ - void setRunIngestModulesOnFilter(String runIngestModulesOnFilter) { - this.runIngestModulesOnFilter = runIngestModulesOnFilter; - this.processUnallocatedSpace = (new IngestSetFilter(runIngestModulesOnFilter)).isProcessUnallocatedSpace(); - this.save(); - } - /** * The type of ingest modules to run. */ @@ -114,7 +95,6 @@ public class IngestJobSettings { this.ingestType = IngestType.ALL_MODULES; this.moduleTemplates = new ArrayList<>(); this.processUnallocatedSpace = Boolean.parseBoolean(IngestJobSettings.PROCESS_UNALLOC_SPACE_DEFAULT); - this.runIngestModulesOnFilter = IngestSetFilter.ALL_FILES_AND_UNALLOCATED_FILTER; this.warnings = new ArrayList<>(); this.createSavedModuleSettingsFolder(); this.load(); @@ -141,7 +121,6 @@ public class IngestJobSettings { this.moduleTemplates = new ArrayList<>(); this.processUnallocatedSpace = Boolean.parseBoolean(IngestJobSettings.PROCESS_UNALLOC_SPACE_DEFAULT); - this.runIngestModulesOnFilter = IngestSetFilter.ALL_FILES_AND_UNALLOCATED_FILTER; this.warnings = new ArrayList<>(); this.createSavedModuleSettingsFolder(); this.load(); @@ -331,14 +310,8 @@ public class IngestJobSettings { ModuleSettings.setConfigSetting(this.executionContext, IngestJobSettings.ENABLED_MODULES_KEY, makeCommaSeparatedValuesList(enabledModuleNames)); ModuleSettings.setConfigSetting(this.executionContext, IngestJobSettings.DISABLED_MODULES_KEY, makeCommaSeparatedValuesList(disabledModuleNames)); - // Get the filter setting telling it which files to run modules on. If the setting does - // not exist yet, default it to All Files and Unallocated Space filter. - if (ModuleSettings.settingExists(this.executionContext, IngestJobSettings.RUN_ON_FILTER_KEY) == false) { - ModuleSettings.setConfigSetting(this.executionContext, IngestJobSettings.RUN_ON_FILTER_KEY, IngestJobSettings.RUN_ON_FILTER_DEFAULT); - } - this.runIngestModulesOnFilter = ModuleSettings.getConfigSetting(this.executionContext, IngestJobSettings.RUN_ON_FILTER_KEY); //set the process unallocated space setting based on the filter chosen. - this.processUnallocatedSpace = (new IngestSetFilter(runIngestModulesOnFilter)).isProcessUnallocatedSpace(); + this.processUnallocatedSpace = (new IngestSetFilter()).isProcessUnallocatedSpace(); } @@ -474,6 +447,7 @@ public class IngestJobSettings { */ String processUnalloc = Boolean.toString(this.processUnallocatedSpace); ModuleSettings.setConfigSetting(this.executionContext, PARSE_UNALLOC_SPACE_KEY, processUnalloc); + } /** diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettingsPanel.java index e292fe08f7..d2a707d1cd 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestJobSettingsPanel.java @@ -85,7 +85,7 @@ public final class IngestJobSettingsPanel extends javax.swing.JPanel { initComponents(); customizeComponents(); - jComboBox1.setSelectedItem(settings.getRunIngestModulesOnFilter()); + jComboBox1.setSelectedItem(controller.getIngestSetFilter().getLastSelected()); } /** @@ -114,7 +114,7 @@ public final class IngestJobSettingsPanel extends javax.swing.JPanel { initComponents(); customizeComponents(); - jComboBox1.setSelectedItem(settings.getRunIngestModulesOnFilter()); + jComboBox1.setSelectedItem(controller.getIngestSetFilter().getLastSelected()); } /** @@ -422,12 +422,12 @@ public final class IngestJobSettingsPanel extends javax.swing.JPanel { dialog.close(); }); dialog.display((IngestModuleGlobalSettingsPanel) controller.getComponent(controller.getLookup())); + jComboBox1.setSelectedItem(controller.getIngestSetFilter().getLastSelected()); - } else { - settings.setRunIngestModulesOnFilter(jComboBox1.getSelectedItem().toString()); - settings.save(); + } else if (evt.getActionCommand().equals("comboBoxChanged")) { + controller.getIngestSetFilter().setLastSelected(jComboBox1.getSelectedItem().toString()); } - jComboBox1.setSelectedItem(settings.getRunIngestModulesOnFilter()); + }//GEN-LAST:event_jComboBox1ActionPerformed diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestTasksScheduler.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestTasksScheduler.java index 2fd8ed4222..169f404b61 100755 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestTasksScheduler.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestTasksScheduler.java @@ -150,7 +150,7 @@ final class IngestTasksScheduler { * @param job The job for which the tasks are to be scheduled. * * @throws InterruptedException if the calling thread is blocked due to a - * full tasks queue and is interrupted. + * full tasks queue and is interrupted. */ synchronized void scheduleIngestTasks(DataSourceIngestJob job) { if (!job.isCancelled()) { @@ -210,7 +210,7 @@ final class IngestTasksScheduler { /** * Schedules a file ingest task for an ingest job. * - * @param job The job for which the tasks are to be scheduled. + * @param job The job for which the tasks are to be scheduled. * @param file The file to be associated with the task. */ synchronized void scheduleFileIngestTask(DataSourceIngestJob job, AbstractFile file) { @@ -411,13 +411,13 @@ final class IngestTasksScheduler { if (fileName.equals(".") || fileName.equals("..")) { return false; } - - if (file.isFile()){ //is this the criteria we want to be using(will unallocated space files show return true?) - IngestSetFilter ingestSetFilter; - ingestSetFilter = new IngestSetFilter(task.getIngestJob().runIngestModulesOnFilter()); - if (!ingestSetFilter.match(file)){ - return false; - } + + if (file.isFile()) { //is this the criteria we want to be using(will unallocated space files show return true?) + IngestSetFilter ingestSetFilter; + ingestSetFilter = new IngestSetFilter(); + if (!ingestSetFilter.match(file)) { + return false; + } } // Skip the task if the file is one of a select group of special, large // NTFS or FAT file system files. @@ -487,7 +487,7 @@ final class IngestTasksScheduler { * well. * * @param taskQueue The queue from which to remove the tasks. - * @param jobId The id of the job for which the tasks are to be removed. + * @param jobId The id of the job for which the tasks are to be removed. */ synchronized private void removeTasksForJob(Collection taskQueue, long jobId) { Iterator iterator = taskQueue.iterator(); @@ -563,12 +563,12 @@ final class IngestTasksScheduler { static final List MEDIUM_PRI_PATHS = new ArrayList<>(); static final List HIGH_PRI_PATHS = new ArrayList<>(); + /* * prioritize root directory folders based on the assumption that we * are looking for user content. Other types of investigations may * want different priorities. */ - static /* * prioritize root directory folders based on the assumption that we * are looking for user content. Other types of investigations may diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties index 58a05ab228..5a954351ac 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/Bundle.properties @@ -4,7 +4,7 @@ OpenIDE-Module-Short-Description=Interesting Files Identifier ingest module. OpenIDE-Module-Name=Interesting Files Identifier OptionsCategory_Name_InterestingItemDefinitions=Interesting Files OptionsCategory_Keywords_InterestingItemDefinitions=InterestingItemDefinitions -OptionsCategory_Name_IngestSetFilterDefinitions=File Filter +OptionsCategory_Name_IngestSetFilterDefinitions=Ingest Set Filter OptionsCategory_Keywords_IngestSetFilterDefinitions=IngestSetFilterDefinitions InterestingItemsIdentifierIngestModule.moduleName=Interesting Files Identifier InterestingItemsIdentifierIngestModule.moduleDescription=Identifies interesting items as defined by interesting item rule sets. @@ -33,6 +33,8 @@ FilesSetRulePanel.pathSeparatorInfoLabel.text=Use / as path separator FilesIdentifierIngestJobSettingsPanel.border.title=Select interesting files sets to enable during ingest: FilesSetRulePanel.jLabel1.text=Type: FilesSetRulePanel.jLabel5.text=Enter information about files that you want to find. +InterestingItemDefsPanel.processUnallocCheckbox.toolTipText=Processes unallocated space, such as deleted files. Produces more complete results, but it may take longer to process on large images. +InterestingItemDefsPanel.processUnallocCheckbox.text=Process Unallocated Space InterestingItemDefsPanel.jLabel6.text=Set Details InterestingItemDefsPanel.jLabel8.text=File Size: InterestingItemDefsPanel.jLabel7.text=MIME Type: diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesIdentifierIngestJobSettingsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesIdentifierIngestJobSettingsPanel.java index 416573ca71..cd6741a6c0 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesIdentifierIngestJobSettingsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesIdentifierIngestJobSettingsPanel.java @@ -26,7 +26,6 @@ import java.util.TreeMap; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableColumn; -import org.openide.util.Exceptions; import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings; @@ -36,6 +35,7 @@ import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettingsPanel; * Ingest job settings panel for interesting files identifier ingest modules. */ final class FilesIdentifierIngestJobSettingsPanel extends IngestModuleIngestJobSettingsPanel implements Observer { + @Messages({ "FilesIdentifierIngestJobSettingsPanel.updateError=Error updating interesting files sets settings file.", "FilesIdentifierIngestJobSettingsPanel.getError=Error getting interesting files sets from settings file." @@ -53,7 +53,7 @@ final class FilesIdentifierIngestJobSettingsPanel extends IngestModuleIngestJobS * constructor. * * @return An instance of the ingest job settings panel interesting files - * identifier ingest modules. + * identifier ingest modules. */ static FilesIdentifierIngestJobSettingsPanel makePanel(FilesIdentifierIngestJobSettings settings) { FilesIdentifierIngestJobSettingsPanel panel = new FilesIdentifierIngestJobSettingsPanel(settings); @@ -83,7 +83,7 @@ final class FilesIdentifierIngestJobSettingsPanel extends IngestModuleIngestJobS */ List filesSetRows = new ArrayList<>(); try { - this.filesSetSnapshot = new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets(InterestingItemDefsManager.getINTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME(), InterestingItemDefsManager.getLEGACY_FILES_SET_DEFS_FILE_NAME())); + this.filesSetSnapshot = new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets(InterestingItemDefsManager.getInterestingFilesSetDefsSerializationName(), InterestingItemDefsManager.getLegacyFilesSetDefsFileName())); } catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) { MessageNotifyUtil.Message.error(Bundle.FilesIdentifierIngestJobSettingsPanel_getError()); this.filesSetSnapshot = new TreeMap<>(); @@ -138,7 +138,7 @@ final class FilesIdentifierIngestJobSettingsPanel extends IngestModuleIngestJobS List rowModels = new ArrayList<>(); TreeMap newFilesSetSnapshot; try { - newFilesSetSnapshot = new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets(InterestingItemDefsManager.getINTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME(), InterestingItemDefsManager.getLEGACY_FILES_SET_DEFS_FILE_NAME())); + newFilesSetSnapshot = new TreeMap<>(InterestingItemDefsManager.getInstance().getInterestingFilesSets(InterestingItemDefsManager.getInterestingFilesSetDefsSerializationName(), InterestingItemDefsManager.getLegacyFilesSetDefsFileName())); } catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) { MessageNotifyUtil.Message.error(Bundle.FilesIdentifierIngestJobSettingsPanel_updateError()); return; @@ -172,7 +172,7 @@ final class FilesIdentifierIngestJobSettingsPanel extends IngestModuleIngestJobS * job. * * @param filesSetRows A collection of row objects that bundles an - * interesting files set with an enabled flag + * interesting files set with an enabled flag */ FilesSetsTableModel(List filesSetRows) { this.filesSetRows = filesSetRows; @@ -182,7 +182,7 @@ final class FilesIdentifierIngestJobSettingsPanel extends IngestModuleIngestJobS * Refreshes the table with a new set of rows. * * @param filesSetRows A collection of row objects that bundles an - * interesting files set with an enabled flag + * interesting files set with an enabled flag */ void resetTableData(List filesSetRows) { this.filesSetRows = filesSetRows; diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesIdentifierIngestModule.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesIdentifierIngestModule.java index 04df50b406..84c193be90 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesIdentifierIngestModule.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/FilesIdentifierIngestModule.java @@ -83,7 +83,7 @@ final class FilesIdentifierIngestModule implements FileIngestModule { // to disable the interesting files set definition UI during ingest. List filesSets = new ArrayList<>(); try { - for (FilesSet set : InterestingItemDefsManager.getInstance().getInterestingFilesSets(InterestingItemDefsManager.getINTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME(), InterestingItemDefsManager.getLEGACY_FILES_SET_DEFS_FILE_NAME()).values()) { + for (FilesSet set : InterestingItemDefsManager.getInstance().getInterestingFilesSets(InterestingItemDefsManager.getInterestingFilesSetDefsSerializationName(), InterestingItemDefsManager.getLegacyFilesSetDefsFileName()).values()) { if (settings.interestingFilesSetIsEnabled(set.getName())) { filesSets.add(set); } @@ -103,7 +103,7 @@ final class FilesIdentifierIngestModule implements FileIngestModule { @Messages({"FilesIdentifierIngestModule.indexError.message=Failed to index interesting file hit artifact for keyword search."}) public ProcessResult process(AbstractFile file) { blackboard = Case.getCurrentCase().getServices().getBlackboard(); - + // Skip slack space files. if (file.getType().equals(TskData.TSK_DB_FILES_TYPE_ENUM.SLACK)) { return ProcessResult.OK; diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/IngestSetFilter.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/IngestSetFilter.java index 1a5ea46072..d158bfa0f6 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/IngestSetFilter.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/IngestSetFilter.java @@ -20,48 +20,97 @@ package org.sleuthkit.autopsy.modules.interestingitems; import java.util.Set; import org.openide.util.Exceptions; +import org.sleuthkit.autopsy.coreutils.ModuleSettings; import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.TskData; /** - * + * Allows limiting which files ingest is run on by storing rules and allowing + * files to be compared to them. * */ -public class IngestSetFilter { +public final class IngestSetFilter { FilesSet currentRules; String rulesKey; private boolean processUnallocatedSpace; public final static String ALL_FILES_FILTER = ""; public final static String ALL_FILES_AND_UNALLOCATED_FILTER = ""; - public final static String NEW_INGEST_FILTER= ""; - - public static Set getKeys() throws InterestingItemDefsManager.InterestingItemDefsManagerException { - InterestingItemDefsManager manager = InterestingItemDefsManager.getInstance(); - return manager.getInterestingFilesSets(InterestingItemDefsManager.getFILE_FILTER_SET_DEFS_SERIALIZATION_NAME(), "").keySet(); - } + public final static String NEW_INGEST_FILTER = ""; + private String lastSelected; + private static final String LAST_INGEST_FILTER_FILE = "CurrentIngestFilter"; + private static final String LAST_INGEST_FILTER_PROPERTY = "LastIngestFilter"; + /** + * Creates an IngestSetFilter for the filter specified by the key. + * + * @param key - The name of the filter you wish to create. + */ public IngestSetFilter(String key) { this.rulesKey = key; InterestingItemDefsManager manager = InterestingItemDefsManager.getInstance(); - if (key.equals(ALL_FILES_FILTER)) { - currentRules = null; - processUnallocatedSpace = false; - } else if (key.equals(ALL_FILES_AND_UNALLOCATED_FILTER)) { - currentRules = null; - processUnallocatedSpace = true; - } else { - try { - currentRules = manager.getInterestingFilesSets(InterestingItemDefsManager.getFILE_FILTER_SET_DEFS_SERIALIZATION_NAME(), "").get(key); - processUnallocatedSpace = currentRules.processesUnallocatedSpace(); - } catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) { - Exceptions.printStackTrace(ex); - } + switch (key) { + case ALL_FILES_FILTER: + currentRules = null; + processUnallocatedSpace = false; + break; + case ALL_FILES_AND_UNALLOCATED_FILTER: + currentRules = null; + processUnallocatedSpace = true; + break; + default: + try { + currentRules = manager.getInterestingFilesSets(InterestingItemDefsManager.getIngestSetFilterDefsName(), "").get(key); + processUnallocatedSpace = currentRules.processesUnallocatedSpace(); + } catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) { + Exceptions.printStackTrace(ex); + } + break; } } /** + * No argument constructor for IngestSetFilter, creates a filter using the + * same filter that was selected previously. + */ + public IngestSetFilter() { + InterestingItemDefsManager manager = InterestingItemDefsManager.getInstance(); + this.rulesKey = getLastSelected(); + switch (rulesKey) { + case ALL_FILES_FILTER: + currentRules = null; + processUnallocatedSpace = false; + break; + case ALL_FILES_AND_UNALLOCATED_FILTER: + currentRules = null; + processUnallocatedSpace = true; + break; + default: + try { + currentRules = manager.getInterestingFilesSets(InterestingItemDefsManager.getIngestSetFilterDefsName(), "").get(rulesKey); + processUnallocatedSpace = currentRules.processesUnallocatedSpace(); + } catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) { + Exceptions.printStackTrace(ex); + } + break; + } + + } + + /** + * Get the set of available Ingest Set Filters. * + * @return - the set of filter names + * @throws + * org.sleuthkit.autopsy.modules.interestingitems.InterestingItemDefsManager.InterestingItemDefsManagerException + */ + public static Set getKeys() throws InterestingItemDefsManager.InterestingItemDefsManagerException { + InterestingItemDefsManager manager = InterestingItemDefsManager.getInstance(); + return manager.getInterestingFilesSets(InterestingItemDefsManager.getIngestSetFilterDefsName(), "").keySet(); + } + + /** + * Returns access to the Rules currently being used by the Ingest Set Filter * * @return - the active file filter set from the InterestingItemsDefsManager */ @@ -78,11 +127,10 @@ public class IngestSetFilter { */ public boolean match(AbstractFile file) { boolean fileMatches = false; - if (isProcessUnallocatedSpace() == false && file.getType().equals(TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS)){ + if (isProcessUnallocatedSpace() == false && file.getType().equals(TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS)) { fileMatches = false; - } - else if (rulesKey.equals(ALL_FILES_FILTER) || rulesKey.equals(ALL_FILES_AND_UNALLOCATED_FILTER) ) { - fileMatches = true; + } else if (rulesKey.equals(ALL_FILES_FILTER) || rulesKey.equals(ALL_FILES_AND_UNALLOCATED_FILTER)) { + fileMatches = true; } else if (currentRules.fileIsMemberOf(file) != null) { fileMatches = true; } @@ -90,7 +138,39 @@ public class IngestSetFilter { } /** - * @return the processUnallocatedSpace + * Get the name of the Ingest Set Filter which was last used, so that when + * running on the same set of files you will not have to reselect that set. + * + * @return lastSelected - the string which represents the Ingest Set Filter + * which was last used. + */ + public String getLastSelected() { + if (lastSelected == null) { + if (ModuleSettings.configExists(LAST_INGEST_FILTER_FILE)) { + lastSelected = ModuleSettings.getConfigSetting(LAST_INGEST_FILTER_FILE, LAST_INGEST_FILTER_PROPERTY); + } else { + lastSelected = ALL_FILES_AND_UNALLOCATED_FILTER; + } + } + return lastSelected; + } + + /** + * Saves the last selected IngestSetFilter, to a file so that it can be + * loaded later. + * + * @return True if value was saved successfully, false if it was not. + */ + public void setLastSelected(String lastSelectedFilter) { + lastSelected = lastSelectedFilter; + ModuleSettings.setConfigSetting(LAST_INGEST_FILTER_FILE, LAST_INGEST_FILTER_PROPERTY, lastSelected); + } + + /** + * Get whether or not unallocated space should be processed as a boolean. + * + * @return the processUnallocatedSpace true if unallocated space should be + * processed false if unallocated space should not be processed */ public boolean isProcessUnallocatedSpace() { return processUnallocatedSpace; diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/IngestSetFilterDefsOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/IngestSetFilterDefsOptionsPanelController.java index e98c74ad89..0e94f371eb 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/IngestSetFilterDefsOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/IngestSetFilterDefsOptionsPanelController.java @@ -30,21 +30,23 @@ import org.openide.util.Lookup; @OptionsPanelController.TopLevelRegistration( categoryName = "#OptionsCategory_Name_IngestSetFilterDefinitions", - iconBase = "org/sleuthkit/autopsy/images/interesting_item_32x32.png", + iconBase = "org/sleuthkit/autopsy/images/ingest_set_filter32x32.png", keywords = "#OptionsCategory_Keywords_IngestSetFilterDefinitions", keywordsCategory = "IngestSetFilterDefinitions", position = 7 ) /** - * Class for creating an InterestingItemDefsPanel which will be used for configuring the IngestSetFilter. + * Class for creating an InterestingItemDefsPanel which will be used for + * configuring the IngestSetFilter. */ public final class IngestSetFilterDefsOptionsPanelController extends OptionsPanelController { private InterestingItemDefsPanel panel; private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); private boolean changed; - + private final IngestSetFilter filter = new IngestSetFilter(); + /** * Component should load its data here. */ @@ -69,11 +71,15 @@ public final class IngestSetFilterDefsOptionsPanelController extends OptionsPane if (!(panel == null)) { nameList.addAll(panel.getKeys()); } - String[] returnArray = {}; + String[] returnArray = {}; nameList.toArray(returnArray); return nameList.toArray(returnArray); } + public IngestSetFilter getIngestSetFilter() { + return filter; + } + /** * This method is called when both the Ok and Apply buttons are pressed. It * applies to any of the panels that have been opened in the process of @@ -138,9 +144,16 @@ public final class IngestSetFilterDefsOptionsPanelController extends OptionsPane pcs.removePropertyChangeListener(l); } + /** + * Creates an interestingItemsDefPanel that will be labeled to indicate it + * is for Ingest Set Filter settings + * + * @return an InterestingItemDefsPanel which has text and fields modified to + * indicate it is for Ingest Set Filtering. + */ private InterestingItemDefsPanel getPanel() { if (panel == null) { - panel = new InterestingItemDefsPanel(InterestingItemDefsManager.getFILE_FILTER_SET_DEFS_SERIALIZATION_NAME(), ""); + panel = new InterestingItemDefsPanel(InterestingItemDefsManager.getIngestSetFilterDefsName(), ""); panel.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsManager.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsManager.java index b35afa8b8f..5c814c10d2 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsManager.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsManager.java @@ -52,9 +52,9 @@ final class InterestingItemDefsManager extends Observable { private static final List ILLEGAL_FILE_NAME_CHARS = Collections.unmodifiableList(new ArrayList<>(Arrays.asList("\\", "/", ":", "*", "?", "\"", "<", ">"))); private static final List ILLEGAL_FILE_PATH_CHARS = Collections.unmodifiableList(new ArrayList<>(Arrays.asList("\\", ":", "*", "?", "\"", "<", ">"))); private static final String LEGACY_FILES_SET_DEFS_FILE_NAME = "InterestingFilesSetDefs.xml"; //NON-NLS - private static final String INTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME = "InterestingFileSets.settings"; - private static final String FILE_FILTER_SET_DEFS_SERIALIZATION_NAME = "FileFilterSets.settings"; - private static final String INTERESTING_FILES_SET_DEFS_SERIALIZATION_PATH = PlatformUtil.getUserConfigDirectory() + File.separator; + private static final String INTERESTING_FILES_SET_DEFS_NAME = "InterestingFileSets.settings"; + private static final String INGEST_SET_FILTER_DEFS_NAME = "IngestSetFilterDefs.settings"; + private static final String INTERESTING_FILES_SET_DEFS_PATH = PlatformUtil.getUserConfigDirectory() + File.separator; private static final String LEGACY_FILE_SET_DEFS_PATH = PlatformUtil.getUserConfigDirectory() + File.separator; private static InterestingItemDefsManager instance; @@ -90,29 +90,29 @@ final class InterestingItemDefsManager extends Observable { /** * @return the LEGACY_FILES_SET_DEFS_FILE_NAME */ - static String getLEGACY_FILES_SET_DEFS_FILE_NAME() { + static String getLegacyFilesSetDefsFileName() { return LEGACY_FILES_SET_DEFS_FILE_NAME; } /** - * @return the INTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME + * @return the INTERESTING_FILES_SET_DEFS_NAME */ - static String getINTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME() { - return INTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME; + static String getInterestingFilesSetDefsSerializationName() { + return INTERESTING_FILES_SET_DEFS_NAME; } /** - * @return the FILE_FILTER_SET_DEFS_SERIALIZATION_NAME + * @return the INGEST_SET_FILTER_DEFS_NAME */ - static String getFILE_FILTER_SET_DEFS_SERIALIZATION_NAME() { - return FILE_FILTER_SET_DEFS_SERIALIZATION_NAME; + static String getIngestSetFilterDefsName() { + return INGEST_SET_FILTER_DEFS_NAME; } /** * Gets a copy of the current interesting files set definitions. * * @return A map of interesting files set names to interesting file sets, - * possibly empty. + * possibly empty. */ synchronized Map getInterestingFilesSets(String serialFileName, String legacyFilePath) throws InterestingItemDefsManagerException { return FilesSetXML.readDefinitionsFile(serialFileName, LEGACY_FILE_SET_DEFS_PATH); @@ -123,10 +123,10 @@ final class InterestingItemDefsManager extends Observable { * previous definitions. * * @param filesSets A mapping of interesting files set names to files sets, - * used to enforce unique files set names. + * used to enforce unique files set names. */ synchronized void setInterestingFilesSets(Map filesSets, String serialFileName) throws InterestingItemDefsManagerException { - FilesSetXML.writeDefinitionsFile(INTERESTING_FILES_SET_DEFS_SERIALIZATION_PATH+serialFileName, filesSets); + FilesSetXML.writeDefinitionsFile(INTERESTING_FILES_SET_DEFS_PATH + serialFileName, filesSets); this.setChanged(); this.notifyObservers(); } @@ -179,8 +179,8 @@ final class InterestingItemDefsManager extends Observable { return filesSets; } // Check if the legacy xml file exists. - if(!legacyFileName.isEmpty()){ - File defsFile = new File(LEGACY_FILE_SET_DEFS_PATH+legacyFileName); + if (!legacyFileName.isEmpty()) { + File defsFile = new File(LEGACY_FILE_SET_DEFS_PATH + legacyFileName); if (!defsFile.exists()) { return filesSets; } @@ -218,12 +218,13 @@ final class InterestingItemDefsManager extends Observable { * Reads the definitions from the serialization file * * @return the map representing settings saved to serialization file, - * empty set if the file does not exist. + * empty set if the file does not exist. * * @throws InterestingItemDefsManagerException if file could not be read */ private static Map readSerializedDefinitions(String serialFileName) throws InterestingItemDefsManagerException { - String filePath = INTERESTING_FILES_SET_DEFS_SERIALIZATION_PATH + serialFileName; + String filePath; + filePath = INTERESTING_FILES_SET_DEFS_PATH + serialFileName; System.out.println(filePath); File fileSetFile = new File(filePath); if (fileSetFile.exists()) { @@ -236,16 +237,16 @@ final class InterestingItemDefsManager extends Observable { throw new InterestingItemDefsManagerException(String.format("Failed to read settings from %s", filePath), ex); } } else { - return new HashMap(); + return new HashMap<>(); } } /** * Reads in an interesting files set. * - * @param setElem An interesting files set XML element + * @param setElem An interesting files set XML element * @param filesSets A collection to which the set is to be added. - * @param filePath The source file, used for error reporting. + * @param filePath The source file, used for error reporting. */ private static void readFilesSet(Element setElem, Map filesSets, String filePath) { // The file set must have a unique name. @@ -319,10 +320,10 @@ final class InterestingItemDefsManager extends Observable { * Construct an interesting files set file name rule from the data in an * XML element. * - * @param elem The file name rule XML element. + * @param elem The file name rule XML element. * * @return A file name rule, or null if there is an error (the error is - * logged). + * logged). */ private static FilesSet.Rule readFileNameRule(Element elem) { String ruleName = FilesSetXML.readRuleName(elem); @@ -380,7 +381,7 @@ final class InterestingItemDefsManager extends Observable { * @param elem The file name extension rule XML element. * * @return A file name extension rule, or null if there is an error (the - * error is logged). + * error is logged). */ private static FilesSet.Rule readFileExtensionRule(Element elem) { String ruleName = FilesSetXML.readRuleName(elem); @@ -473,7 +474,7 @@ final class InterestingItemDefsManager extends Observable { * @param ruleElement The XML element. * * @return The meta-type condition, or null if there is an error - * (logged). + * (logged). */ private static FilesSet.Rule.MetaTypeCondition readMetaTypeCondition(Element ruleElement) { FilesSet.Rule.MetaTypeCondition condition = null; diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java index 1118d88e64..b0666ad9ab 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java @@ -115,7 +115,7 @@ public final class InterestingItemDefsOptionsPanelController extends OptionsPane private InterestingItemDefsPanel getPanel() { if (panel == null) { - panel = new InterestingItemDefsPanel(InterestingItemDefsManager.getINTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME(), InterestingItemDefsManager.getLEGACY_FILES_SET_DEFS_FILE_NAME()); + panel = new InterestingItemDefsPanel(InterestingItemDefsManager.getInterestingFilesSetDefsSerializationName(), InterestingItemDefsManager.getLegacyFilesSetDefsFileName()); panel.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.form b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.form index b4c3076206..48a03bd2b7 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.form @@ -63,126 +63,126 @@ + - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -214,7 +214,10 @@ - + + + + @@ -839,6 +842,19 @@ + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java index f5eddd81c9..a230ce8157 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsPanel.java @@ -67,7 +67,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp private final String settingsFileName; private final String settingsLegacyFileName; private final String ruleDialogTitle; - + // The following is a map of interesting files set names to interesting // files set definitions. It is a snapshot of the files set definitions // obtained from the interesting item definitions manager at the time the @@ -81,7 +81,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp * Constructs an interesting item definitions panel. */ InterestingItemDefsPanel(String settingsName, String legacySettingsName) { - this.initComponents(); + this.initComponents(); this.settingsLegacyFileName = legacySettingsName; this.customInit(); this.setsList.setModel(setsListModel); @@ -89,30 +89,28 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp this.rulesList.setModel(rulesListModel); this.rulesList.addListSelectionListener(new InterestingItemDefsPanel.RulesListSelectionListener()); this.settingsFileName = settingsName; - - if (legacySettingsName.equals("")){ //Hide the mimetype settings when this is displaying FileSet rules instead of interesting item rules + + if (legacySettingsName.equals("")) { //Hide the mimetype settings when this is displaying FileSet rules instead of interesting item rules this.mimeTypeComboBox.setVisible(false); this.jLabel7.setVisible(false); this.ruleDialogTitle = "IngestFileFilter.title"; - } - else { + } else { this.ruleDialogTitle = "FilesSetPanel.title"; } - + } - Set getKeys(){ + Set getKeys() { load(); return filesSets.keySet(); } - + @NbBundle.Messages({"InterestingItemDefsPanel.Title=Global Interesting Items Settings", - "IngestFilterItemDefsPanel.Title=Global Ingest Filter Settings" }) + "IngestFilterItemDefsPanel.Title=Global Ingest Filter Settings"}) private void customInit() { - if (settingsLegacyFileName.equals("")){ + if (settingsLegacyFileName.equals("")) { setName(Bundle.IngestFilterItemDefsPanel_Title()); - } - else { + } else { setName(Bundle.InterestingItemDefsPanel_Title()); } Set fileTypesCollated = new HashSet<>(); @@ -145,7 +143,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp this.fileSizeUnitComboBox.setSelectedIndex(1); this.equalitySignComboBox.setSelectedIndex(2); } - + /** * @inheritDoc */ @@ -205,6 +203,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp this.setsListModel.clear(); this.setDescriptionTextArea.setText(""); this.ignoreKnownFilesCheckbox.setSelected(true); + this.processUnallocCheckbox.setSelected(true); this.newSetButton.setEnabled(true); this.editSetButton.setEnabled(false); this.deleteSetButton.setEnabled(false); @@ -252,7 +251,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp // selected files set. InterestingItemDefsPanel.this.setDescriptionTextArea.setText(selectedSet.getDescription()); InterestingItemDefsPanel.this.ignoreKnownFilesCheckbox.setSelected(selectedSet.ignoresKnownFiles()); - + InterestingItemDefsPanel.this.processUnallocCheckbox.setSelected(selectedSet.processesUnallocatedSpace()); // Enable the new, edit and delete set buttons. InterestingItemDefsPanel.this.newSetButton.setEnabled(true); InterestingItemDefsPanel.this.editSetButton.setEnabled(true); @@ -357,8 +356,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp * respond to user interactions with the dialog. * * @param selectedSet The currently selected files set, may be null to - * indicate a new interesting files set definition is to - * be created. + * indicate a new interesting files set definition is to be created. */ private void doFileSetsDialog(FilesSet selectedSet) { // Create a files set defintion panle. @@ -405,7 +403,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp * dialog box and respond to user interactions with the dialog. * * @param selectedRule The currently selected rule, may be null to indicate - * a new rule definition is to be created. + * a new rule definition is to be created. */ private void doFilesSetRuleDialog(FilesSet.Rule selectedRule) { // Create a files set rule panel. @@ -452,19 +450,21 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp }); } } + /** * Adds an interesting files set definition to the collection of definitions * owned by this panel. If there is a definition with the same name, it will * be replaced, so this is an add/edit operation. * - * @param oldSet A set to replace, null if the new set is not a - * replacement. - * @param name The name of the files set. - * @param description The description of the files set. + * @param oldSet A set to replace, null if the new set is not a replacement. + * @param name The name of the files set. + * @param description The description of the files set. * @param ignoresKnownFiles Whether or not the files set ignores known - * files. - * @param rules The set membership rules for the set. + * files. + * @param rules The set membership rules for the set. + * @param processesUnallocatedSpace Whether or not this set of rules processes + * unallocated space */ void replaceFilesSet(FilesSet oldSet, String name, String description, boolean ignoresKnownFiles, Map rules, boolean processesUnallocatedSpace) { if (oldSet != null) { @@ -496,6 +496,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ + @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { @@ -543,6 +544,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp equalitySignComboBox = new javax.swing.JComboBox(); fileSizeSpinner = new javax.swing.JSpinner(); fileSizeUnitComboBox = new javax.swing.JComboBox(); + processUnallocCheckbox = new javax.swing.JCheckBox(); setFont(getFont().deriveFont(getFont().getStyle() & ~java.awt.Font.BOLD, 11)); @@ -750,101 +752,111 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp fileSizeUnitComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { Bundle.InterestingItemDefsPanel_bytes(), Bundle.InterestingItemDefsPanel_kiloBytes(), Bundle.InterestingItemDefsPanel_megaBytes(), Bundle.InterestingItemDefsPanel_gigaBytes() })); fileSizeUnitComboBox.setEnabled(false); + org.openide.awt.Mnemonics.setLocalizedText(processUnallocCheckbox, org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.processUnallocCheckbox.text")); // NOI18N + processUnallocCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(InterestingItemDefsPanel.class, "InterestingItemDefsPanel.processUnallocCheckbox.toolTipText")); // NOI18N + processUnallocCheckbox.setEnabled(false); + processUnallocCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + processUnallocCheckboxActionPerformed(evt); + } + }); + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(360, 360, 360) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(rulesListLabel) + .addComponent(jLabel5) + .addComponent(jLabel6) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(ignoreKnownFilesCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(processUnallocCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() - .addGap(360, 360, 360) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rulesListLabel) - .addComponent(jLabel5) - .addComponent(ignoreKnownFilesCheckbox) - .addComponent(jLabel6)) - .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(setsListLabel) + .addComponent(setsListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 314, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 314, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() + .addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(deleteSetButton))) + .addGap(12, 12, 12) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(20, 20, 20) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(setsListLabel) - .addComponent(setsListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 314, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 314, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(newSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(editSetButton, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(deleteSetButton))) - .addGap(12, 12, 12) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGap(20, 20, 20) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel3) - .addComponent(jLabel2)) - .addGap(6, 6, 6)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() - .addComponent(jLabel4) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED))) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(rulePathConditionTextField, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(fileNameTextField))) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel7) - .addComponent(jLabel8)) - .addGap(6, 6, 6) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() - .addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(fileSizeSpinner, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(8, 8, 8)) - .addComponent(mimeTypeComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))) + .addComponent(jLabel3) + .addComponent(jLabel2)) + .addGap(6, 6, 6)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() + .addComponent(jLabel4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED))) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(rulePathConditionTextField, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(fileNameTextField))) .addGroup(jPanel1Layout.createSequentialGroup() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(setDescScrollPanel) - .addComponent(rulesListScrollPane)) - .addGap(7, 7, 7)) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel1) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGap(92, 92, 92) - .addComponent(filesRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(dirsRadioButton) + .addComponent(jLabel7) + .addComponent(jLabel8)) + .addGap(6, 6, 6) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() + .addComponent(equalitySignComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(bothRadioButton)) + .addComponent(fileSizeSpinner, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(fileSizeUnitComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(8, 8, 8)) + .addComponent(mimeTypeComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(setDescScrollPanel) + .addComponent(rulesListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 342, Short.MAX_VALUE)) + .addGap(7, 7, 7)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel1) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(92, 92, 92) + .addComponent(filesRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(dirsRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(bothRadioButton)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(newRuleButton) + .addGap(18, 18, 18) + .addComponent(editRuleButton) + .addGap(18, 18, 18) + .addComponent(deleteRuleButton)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(96, 96, 96) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(newRuleButton) - .addGap(18, 18, 18) - .addComponent(editRuleButton) - .addGap(18, 18, 18) - .addComponent(deleteRuleButton)) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGap(96, 96, 96) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(fileNameRadioButton) - .addGap(4, 4, 4) - .addComponent(fileNameExtensionRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(fileNameRegexCheckbox)) - .addComponent(rulePathConditionRegexCheckBox)))) - .addGap(4, 4, 4))))) - .addGap(23, 23, 23)) + .addComponent(fileNameRadioButton) + .addGap(4, 4, 4) + .addComponent(fileNameExtensionRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(fileNameRegexCheckbox)) + .addComponent(rulePathConditionRegexCheckBox)))) + .addGap(4, 4, 4))) + .addGap(85, 85, 85)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -872,7 +884,9 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(setDescScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(ignoreKnownFilesCheckbox) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(ignoreKnownFilesCheckbox) + .addComponent(processUnallocCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(rulesListLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) @@ -1000,6 +1014,10 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp // TODO add your handling code here: }//GEN-LAST:event_fileNameTextFieldActionPerformed + private void processUnallocCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_processUnallocCheckboxActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_processUnallocCheckboxActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JRadioButton bothRadioButton; private javax.swing.JButton deleteRuleButton; @@ -1032,6 +1050,7 @@ final class InterestingItemDefsPanel extends IngestModuleGlobalSettingsPanel imp private javax.swing.JComboBox mimeTypeComboBox; private javax.swing.JButton newRuleButton; private javax.swing.JButton newSetButton; + private javax.swing.JCheckBox processUnallocCheckbox; private javax.swing.JCheckBox rulePathConditionRegexCheckBox; private javax.swing.JTextField rulePathConditionTextField; private javax.swing.JList rulesList; diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemsIngestModuleFactory.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemsIngestModuleFactory.java index 86899508f7..a327f665b2 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemsIngestModuleFactory.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemsIngestModuleFactory.java @@ -20,7 +20,6 @@ package org.sleuthkit.autopsy.modules.interestingitems; import java.util.ArrayList; import java.util.List; -import org.openide.util.Exceptions; import org.openide.util.NbBundle; import org.openide.util.NbBundle.Messages; import org.openide.util.lookup.ServiceProvider; @@ -70,7 +69,7 @@ final public class InterestingItemsIngestModuleFactory extends IngestModuleFacto @Override public IngestModuleGlobalSettingsPanel getGlobalSettingsPanel() { - InterestingItemDefsPanel panel = new InterestingItemDefsPanel(InterestingItemDefsManager.getINTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME(), InterestingItemDefsManager.getLEGACY_FILES_SET_DEFS_FILE_NAME()); + InterestingItemDefsPanel panel = new InterestingItemDefsPanel(InterestingItemDefsManager.getInterestingFilesSetDefsSerializationName(), InterestingItemDefsManager.getLegacyFilesSetDefsFileName()); panel.load(); return panel; } @@ -84,7 +83,7 @@ final public class InterestingItemsIngestModuleFactory extends IngestModuleFacto // Doing so also keeps the serialization simple. List enabledFilesSetNames = new ArrayList<>(); try { - for (String name : InterestingItemDefsManager.getInstance().getInterestingFilesSets(InterestingItemDefsManager.getINTERESTING_FILES_SET_DEFS_SERIALIZATION_NAME(), InterestingItemDefsManager.getLEGACY_FILES_SET_DEFS_FILE_NAME()).keySet()) { + for (String name : InterestingItemDefsManager.getInstance().getInterestingFilesSets(InterestingItemDefsManager.getInterestingFilesSetDefsSerializationName(), InterestingItemDefsManager.getLegacyFilesSetDefsFileName()).keySet()) { enabledFilesSetNames.add(name); } } catch (InterestingItemDefsManager.InterestingItemDefsManagerException ex) {