From f771ca1634e7ee2b26cd28bdc233db2a9af5ca10 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Wed, 7 May 2014 10:34:26 -0400 Subject: [PATCH] Add more change listeners for UserPreferences --- .../autopsy/core/UserPreferences.java | 11 +++++- .../corecomponents/AutopsyOptionsPanel.java | 11 +++--- .../DirectoryTreeTopComponent.java | 2 +- .../autopsy/ingest/IngestManager.java | 35 +++++++++++-------- 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java b/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java index ea2604ba89..abd8056fee 100755 --- a/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java +++ b/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java @@ -33,7 +33,8 @@ public final class UserPreferences { public static final String HIDE_KNOWN_FILES_IN_DATA_SOURCES_TREE = "HideKnownFilesInDataSourcesTree"; //NON-NLS public static final String HIDE_KNOWN_FILES_IN_VIEWS_TREE = "HideKnownFilesInViewsTree"; //NON-NLS public static final String DISPLAY_TIMES_IN_LOCAL_TIME = "DisplayTimesInLocalTime"; //NON-NLS - + public static final String NUMBER_OF_FILE_INGEST_THREADS = "NumberOfFileingestThreads"; //NON-NLS + // Prevent instantiation. private UserPreferences() { } @@ -77,4 +78,12 @@ public final class UserPreferences { public static void setDisplayTimesInLocalTime(boolean value) { preferences.putBoolean(DISPLAY_TIMES_IN_LOCAL_TIME, value); } + + public static int numberOfFileIngestThreads() { + return preferences.getInt(NUMBER_OF_FILE_INGEST_THREADS, 2); + } + + public static void setNumberOfFileIngestThreads(int value) { + preferences.putInt(NUMBER_OF_FILE_INGEST_THREADS, value); + } } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java index ae46e94cce..a39246e34b 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java @@ -20,10 +20,12 @@ package org.sleuthkit.autopsy.corecomponents; import javax.swing.DefaultComboBoxModel; import org.sleuthkit.autopsy.core.UserPreferences; -import org.sleuthkit.autopsy.ingest.IngestManager; +/** + * Options panel that allow users to set application preferences. + */ final class AutopsyOptionsPanel extends javax.swing.JPanel { - + AutopsyOptionsPanel(AutopsyOptionsPanelController controller) { initComponents(); numberOfFileIngestThreadsComboBox.setModel(new DefaultComboBoxModel<>(new Integer[]{1, 2, 4, 8, 16})); @@ -39,7 +41,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { boolean useLocalTime = UserPreferences.displayTimesInLocalTime(); useLocalTimeRB.setSelected(useLocalTime); useGMTTimeRB.setSelected(!useLocalTime); - numberOfFileIngestThreadsComboBox.setSelectedItem(IngestManager.getNumberOfFileIngestThreads()); + numberOfFileIngestThreadsComboBox.setSelectedItem(UserPreferences.numberOfFileIngestThreads()); } void store() { @@ -47,7 +49,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { UserPreferences.setHideKnownFilesInDataSourcesTree(dataSourcesHideKnownCB.isSelected()); UserPreferences.setHideKnownFilesInViewsTree(viewsHideKnownCB.isSelected()); UserPreferences.setDisplayTimesInLocalTime(useLocalTimeRB.isSelected()); - IngestManager.setNumberOfFileIngestThreads((Integer) numberOfFileIngestThreadsComboBox.getSelectedItem()); + UserPreferences.setNumberOfFileIngestThreads((Integer) numberOfFileIngestThreadsComboBox.getSelectedItem()); } boolean valid() { @@ -161,7 +163,6 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { .addComponent(numberOfFileIngestThreadsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.ButtonGroup buttonGroup1; private javax.swing.ButtonGroup buttonGroup3; diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index 0f61cecf01..958387337d 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -139,7 +139,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat refreshContentTreeSafe(); break; case UserPreferences.HIDE_KNOWN_FILES_IN_VIEWS_TREE: - // RJCTODO: There does not appear to be a way to refresh the Views subtree + // TODO: Need a way to refresh the Views subtree break; } } diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java index 3b566decd4..6ded7ccf6a 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestManager.java @@ -29,16 +29,17 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; +import java.util.prefs.PreferenceChangeEvent; +import java.util.prefs.PreferenceChangeListener; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.Logger; import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.ProgressHandleFactory; import org.openide.util.Cancellable; -import org.openide.util.NbPreferences; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; import org.sleuthkit.datamodel.Content; -import java.util.prefs.Preferences; import javax.swing.JOptionPane; +import org.sleuthkit.autopsy.core.UserPreferences; /** * Manages the execution of ingest jobs. @@ -46,12 +47,10 @@ import javax.swing.JOptionPane; public class IngestManager { private static final int MAX_NUMBER_OF_DATA_SOURCE_INGEST_THREADS = 1; - private static final String NUMBER_OF_FILE_INGEST_THREADS_KEY = "NumberOfFileingestThreads"; //NON-NLS private static final int MIN_NUMBER_OF_FILE_INGEST_THREADS = 1; private static final int MAX_NUMBER_OF_FILE_INGEST_THREADS = 16; private static final int DEFAULT_NUMBER_OF_FILE_INGEST_THREADS = 2; private static final Logger logger = Logger.getLogger(IngestManager.class.getName()); - private static final Preferences userPreferences = NbPreferences.forModule(IngestManager.class); private static final IngestManager instance = new IngestManager(); private final PropertyChangeSupport ingestJobEventPublisher = new PropertyChangeSupport(IngestManager.class); private final PropertyChangeSupport ingestModuleEventPublisher = new PropertyChangeSupport(IngestManager.class); @@ -82,10 +81,23 @@ public class IngestManager { */ private IngestManager() { startDataSourceIngestThread(); - int numberOfFileIngestThreads = getNumberOfFileIngestThreads(); + int numberOfFileIngestThreads = UserPreferences.numberOfFileIngestThreads(); + if ((numberOfFileIngestThreads < MIN_NUMBER_OF_FILE_INGEST_THREADS) || (numberOfFileIngestThreads > MAX_NUMBER_OF_FILE_INGEST_THREADS)) { + numberOfFileIngestThreads = DEFAULT_NUMBER_OF_FILE_INGEST_THREADS; + UserPreferences.setNumberOfFileIngestThreads(numberOfFileIngestThreads); + } for (int i = 0; i < numberOfFileIngestThreads; ++i) { startFileIngestThread(); } + + UserPreferences.addChangeListener(new PreferenceChangeListener() { + @Override + public void preferenceChange(PreferenceChangeEvent evt) { + if (evt.getKey().equals(UserPreferences.NUMBER_OF_FILE_INGEST_THREADS)) { + setNumberOfFileIngestThreads(); + } + } + }); } /** @@ -115,13 +127,6 @@ public class IngestManager { return MAX_NUMBER_OF_FILE_INGEST_THREADS; } - /** - * Gets the number of file ingest threads the ingest manager will use. - */ - public synchronized static int getNumberOfFileIngestThreads() { - return userPreferences.getInt(NUMBER_OF_FILE_INGEST_THREADS_KEY, DEFAULT_NUMBER_OF_FILE_INGEST_THREADS); - } - /** * Changes the number of file ingest threads the ingest manager will use to * no more than MAX_NUMBER_OF_FILE_INGEST_THREADS and no less than @@ -130,12 +135,12 @@ public class IngestManager { * * @param numberOfThreads The desired number of file ingest threads. */ - public synchronized static void setNumberOfFileIngestThreads(int numberOfThreads) { + public synchronized static void setNumberOfFileIngestThreads() { + int numberOfThreads = UserPreferences.numberOfFileIngestThreads(); if ((numberOfThreads < MIN_NUMBER_OF_FILE_INGEST_THREADS) || (numberOfThreads > MAX_NUMBER_OF_FILE_INGEST_THREADS)) { numberOfThreads = DEFAULT_NUMBER_OF_FILE_INGEST_THREADS; + UserPreferences.setNumberOfFileIngestThreads(numberOfThreads); } - userPreferences.putInt(NUMBER_OF_FILE_INGEST_THREADS_KEY, numberOfThreads); - if (instance.fileIngestThreads.size() != numberOfThreads) { if (instance.fileIngestThreads.size() > numberOfThreads) { Long[] threadIds = instance.fileIngestThreads.keySet().toArray(new Long[instance.fileIngestThreads.size()]);