diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties index 4154a913b9..a89ea845dd 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties @@ -233,3 +233,5 @@ LocalDiskSelectionDialog.okButton.text=OK LocalDiskPanel.localDiskLabel.text=Local Disk: LocalDiskPanel.imageWriterErrorLabel.text=Error Label LocalDiskSelectionDialog.title=Select Local Disk +ViewPreferencesDialog.okButton.text=OK +ViewPreferencesDialog.cancelButton.text=Cancel diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CasePreferences.java b/Core/src/org/sleuthkit/autopsy/casemodule/CasePreferences.java new file mode 100755 index 0000000000..8d40b23538 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CasePreferences.java @@ -0,0 +1,93 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2018 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.casemodule; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Properties; +import java.util.logging.Level; +import org.sleuthkit.autopsy.coreutils.Logger; + +/** + * Read and update case preference file values. + */ +public final class CasePreferences { + + private static final String SETTINGS_FILE = "CasePreferences.properties"; //NON-NLS + public static final String GROUP_ITEMS_IN_TREE_BY_DATASOURCE = "GroupItemsInTreeByDataSource"; //NON-NLS + + private static final Logger logger = Logger.getLogger(CasePreferences.class.getName()); + + private Boolean groupItemsInTreeByDataSource = null; + + //DLG: + public CasePreferences(Case currentCase) { + loadFromStorage(currentCase); + } + + public Boolean getGroupItemsInTreeByDataSource() { + return groupItemsInTreeByDataSource; + } + + public void setGroupItemsInTreeByDataSource(boolean value) { + groupItemsInTreeByDataSource = value; + } + + /** + * Load case preferences from the settings file. + */ + private void loadFromStorage(Case currentCase) { + Path settingsFile = Paths.get(currentCase.getConfigDirectory(), SETTINGS_FILE); //NON-NLS + if (settingsFile.toFile().exists()) { + // Read the settings + try (InputStream inputStream = Files.newInputStream(settingsFile)) { + Properties props = new Properties(); + props.load(inputStream); + if (props.getProperty("groupByDataSource", "false").equals("true")) { + groupItemsInTreeByDataSource = true; + } else { + groupItemsInTreeByDataSource = false; + } + } catch (IOException ex) { + logger.log(Level.SEVERE, "Error reading settings file", ex); + } + } + } + + /** + * Store case preferences in the settings file. + */ + public void saveToStorage(Case currentCase) { + Path settingsFile = Paths.get(currentCase.getConfigDirectory(), SETTINGS_FILE); //NON-NLS + Properties props = new Properties(); + if (groupItemsInTreeByDataSource != null) { + props.setProperty("groupByDataSource", (groupItemsInTreeByDataSource ? "true" : "false")); + } + + try (OutputStream fos = Files.newOutputStream(settingsFile)) { + props.store(fos, ""); //NON-NLS + } catch (IOException ex) { + logger.log(Level.SEVERE, "Error writing settings file", ex); + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/ViewPreferencesPanel.form b/Core/src/org/sleuthkit/autopsy/casemodule/ViewPreferencesPanel.form deleted file mode 100755 index 4f9abb50dc..0000000000 --- a/Core/src/org/sleuthkit/autopsy/casemodule/ViewPreferencesPanel.form +++ /dev/null @@ -1,28 +0,0 @@ - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/ViewPreferencesPanel.java b/Core/src/org/sleuthkit/autopsy/casemodule/ViewPreferencesPanel.java deleted file mode 100755 index c9e8f59d1a..0000000000 --- a/Core/src/org/sleuthkit/autopsy/casemodule/ViewPreferencesPanel.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.sleuthkit.autopsy.casemodule; - -/** - * - * @author dgrove - */ -public class ViewPreferencesPanel extends javax.swing.JPanel { - - /** - * Creates new form ViewPreferencesPanel - */ - public ViewPreferencesPanel() { - initComponents(); - } - - /** - * 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 - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 400, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 300, Short.MAX_VALUE) - ); - }// //GEN-END:initComponents - - - // Variables declaration - do not modify//GEN-BEGIN:variables - // End of variables declaration//GEN-END:variables -} diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsOptionsPanelController.java index fcd2131f90..8fa16928d4 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsOptionsPanelController.java @@ -31,7 +31,7 @@ import org.openide.util.Lookup; iconBase = "org/sleuthkit/autopsy/casemodule/services/tag-options-panel-icon.png", keywords = "#OptionsCategory_TagNames", keywordsCategory = "CustomTagNames", - position = 11 + position = 12 ) public final class TagsOptionsPanelController extends OptionsPanelController { diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamOptionsPanelController.java index dab04c255f..045afe99b5 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/EamOptionsPanelController.java @@ -35,7 +35,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; */ @OptionsPanelController.TopLevelRegistration(categoryName = "#OptionsCategory_Name_Central_Repository_Options", iconBase = "org/sleuthkit/autopsy/centralrepository/images/options-icon.png", - position = 14, + position = 15, keywords = "#OptionsCategory_Keywords_Central_Repository_Options", keywordsCategory = "CentralRepository") public final class EamOptionsPanelController extends OptionsPanelController { diff --git a/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java b/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java index 78b726111e..3b92e24481 100644 --- a/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java +++ b/Core/src/org/sleuthkit/autopsy/core/UserPreferences.java @@ -189,11 +189,11 @@ public final class UserPreferences { preferences.putInt(NUMBER_OF_FILE_INGEST_THREADS, value); } - public static boolean groupItemsInTreeByDatasource() { + public static boolean groupItemsInTreeByDatasource() { //DLG: Replace use of this with the equivallent method in CasePreferences return preferences.getBoolean(GROUP_ITEMS_IN_TREE_BY_DATASOURCE, false); } - public static void setGroupItemsInTreeByDatasource(boolean value) { + public static void setGroupItemsInTreeByDatasource(boolean value) { //DLG: Replace use of this with the equivallent method in CasePreferences preferences.putBoolean(GROUP_ITEMS_IN_TREE_BY_DATASOURCE, value); } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form index a9ead822e7..b63f0c6f8b 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.form @@ -69,7 +69,7 @@ - + @@ -83,7 +83,7 @@ - + @@ -232,12 +232,12 @@ - + - + @@ -254,19 +254,19 @@ - - - - - + + + + + - - - + + + @@ -291,27 +291,27 @@ - + - + - + - + - + - + - + - + @@ -324,36 +324,36 @@ - + - + - + - + - + - + - + - + @@ -363,24 +363,24 @@ - + - + - + - + - + - + @@ -390,24 +390,24 @@ - + - + - + - + - + - + @@ -417,30 +417,30 @@ - + - + - + - + - + - + diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java index 6c5a67a3f7..2bdf9dd7ea 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/AutopsyOptionsPanel.java @@ -286,15 +286,15 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { */ void load() { boolean keepPreferredViewer = UserPreferences.keepPreferredContentViewer(); - keepCurrentViewerRB.setSelected(keepPreferredViewer); - useBestViewerRB.setSelected(!keepPreferredViewer); - dataSourcesHideKnownCB.setSelected(UserPreferences.hideKnownFilesInDataSourcesTree()); - viewsHideKnownCB.setSelected(UserPreferences.hideKnownFilesInViewsTree()); - dataSourcesHideSlackCB.setSelected(UserPreferences.hideSlackFilesInDataSourcesTree()); - viewsHideSlackCB.setSelected(UserPreferences.hideSlackFilesInViewsTree()); + oldKeepCurrentViewerRB.setSelected(keepPreferredViewer); + oldUseBestViewerRB.setSelected(!keepPreferredViewer); + oldDataSourcesHideKnownCB.setSelected(UserPreferences.hideKnownFilesInDataSourcesTree()); + oldViewsHideKnownCB.setSelected(UserPreferences.hideKnownFilesInViewsTree()); + oldDataSourcesHideSlackCB.setSelected(UserPreferences.hideSlackFilesInDataSourcesTree()); + oldViewsHideSlackCB.setSelected(UserPreferences.hideSlackFilesInViewsTree()); boolean useLocalTime = UserPreferences.displayTimesInLocalTime(); - useLocalTimeRB.setSelected(useLocalTime); - useGMTTimeRB.setSelected(!useLocalTime); + oldUseLocalTimeRB.setSelected(useLocalTime); + oldUseGMTTimeRB.setSelected(!useLocalTime); String path = ModuleSettings.getConfigSetting(ReportBranding.MODULE_NAME, ReportBranding.AGENCY_LOGO_PATH_PROP); boolean useDefault = (path == null || path.isEmpty()); defaultLogoRB.setSelected(useDefault); @@ -350,12 +350,12 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { * Store the current user preferences. */ void store() { - UserPreferences.setKeepPreferredContentViewer(keepCurrentViewerRB.isSelected()); - UserPreferences.setHideKnownFilesInDataSourcesTree(dataSourcesHideKnownCB.isSelected()); - UserPreferences.setHideKnownFilesInViewsTree(viewsHideKnownCB.isSelected()); - UserPreferences.setHideSlackFilesInDataSourcesTree(dataSourcesHideSlackCB.isSelected()); - UserPreferences.setHideSlackFilesInViewsTree(viewsHideSlackCB.isSelected()); - UserPreferences.setDisplayTimesInLocalTime(useLocalTimeRB.isSelected()); + UserPreferences.setKeepPreferredContentViewer(oldKeepCurrentViewerRB.isSelected()); + UserPreferences.setHideKnownFilesInDataSourcesTree(oldDataSourcesHideKnownCB.isSelected()); + UserPreferences.setHideKnownFilesInViewsTree(oldViewsHideKnownCB.isSelected()); + UserPreferences.setHideSlackFilesInDataSourcesTree(oldDataSourcesHideSlackCB.isSelected()); + UserPreferences.setHideSlackFilesInViewsTree(oldViewsHideSlackCB.isSelected()); + UserPreferences.setDisplayTimesInLocalTime(oldUseLocalTimeRB.isSelected()); UserPreferences.setLogFileCount(Integer.parseInt(logFileCount.getText())); if (!agencyLogoPathField.getText().isEmpty()) { File file = new File(agencyLogoPathField.getText()); @@ -535,19 +535,19 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { defaultLogoRB = new javax.swing.JRadioButton(); specifyLogoRB = new javax.swing.JRadioButton(); agencyLogoPathFieldValidationLabel = new javax.swing.JLabel(); - viewPanel = new javax.swing.JPanel(); + oldViewPanel = new javax.swing.JPanel(); jLabelSelectFile = new javax.swing.JLabel(); - useBestViewerRB = new javax.swing.JRadioButton(); - keepCurrentViewerRB = new javax.swing.JRadioButton(); + oldUseBestViewerRB = new javax.swing.JRadioButton(); + oldKeepCurrentViewerRB = new javax.swing.JRadioButton(); jLabelHideKnownFiles = new javax.swing.JLabel(); - dataSourcesHideKnownCB = new javax.swing.JCheckBox(); - viewsHideKnownCB = new javax.swing.JCheckBox(); + oldDataSourcesHideKnownCB = new javax.swing.JCheckBox(); + oldViewsHideKnownCB = new javax.swing.JCheckBox(); jLabelHideSlackFiles = new javax.swing.JLabel(); - dataSourcesHideSlackCB = new javax.swing.JCheckBox(); - viewsHideSlackCB = new javax.swing.JCheckBox(); + oldDataSourcesHideSlackCB = new javax.swing.JCheckBox(); + oldViewsHideSlackCB = new javax.swing.JCheckBox(); jLabelTimeDisplay = new javax.swing.JLabel(); - useLocalTimeRB = new javax.swing.JRadioButton(); - useGMTTimeRB = new javax.swing.JRadioButton(); + oldUseLocalTimeRB = new javax.swing.JRadioButton(); + oldUseGMTTimeRB = new javax.swing.JRadioButton(); runtimePanel = new javax.swing.JPanel(); maxMemoryLabel = new javax.swing.JLabel(); maxMemoryUnitsLabel = new javax.swing.JLabel(); @@ -643,137 +643,137 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { .addGap(0, 0, Short.MAX_VALUE)) ); - viewPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.viewPanel.border.title"))); // NOI18N + oldViewPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldViewPanel.border.title"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jLabelSelectFile, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelSelectFile.text")); // NOI18N - fileSelectionButtonGroup.add(useBestViewerRB); - org.openide.awt.Mnemonics.setLocalizedText(useBestViewerRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useBestViewerRB.text")); // NOI18N - useBestViewerRB.setToolTipText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useBestViewerRB.toolTipText")); // NOI18N - useBestViewerRB.addActionListener(new java.awt.event.ActionListener() { + fileSelectionButtonGroup.add(oldUseBestViewerRB); + org.openide.awt.Mnemonics.setLocalizedText(oldUseBestViewerRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldUseBestViewerRB.text")); // NOI18N + oldUseBestViewerRB.setToolTipText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldUseBestViewerRB.toolTipText")); // NOI18N + oldUseBestViewerRB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - useBestViewerRBActionPerformed(evt); + oldUseBestViewerRBActionPerformed(evt); } }); - fileSelectionButtonGroup.add(keepCurrentViewerRB); - org.openide.awt.Mnemonics.setLocalizedText(keepCurrentViewerRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.keepCurrentViewerRB.text")); // NOI18N - keepCurrentViewerRB.setToolTipText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText")); // NOI18N - keepCurrentViewerRB.addActionListener(new java.awt.event.ActionListener() { + fileSelectionButtonGroup.add(oldKeepCurrentViewerRB); + org.openide.awt.Mnemonics.setLocalizedText(oldKeepCurrentViewerRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldKeepCurrentViewerRB.text")); // NOI18N + oldKeepCurrentViewerRB.setToolTipText(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldKeepCurrentViewerRB.toolTipText")); // NOI18N + oldKeepCurrentViewerRB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - keepCurrentViewerRBActionPerformed(evt); + oldKeepCurrentViewerRBActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(jLabelHideKnownFiles, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelHideKnownFiles.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(dataSourcesHideKnownCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.dataSourcesHideKnownCB.text")); // NOI18N - dataSourcesHideKnownCB.addActionListener(new java.awt.event.ActionListener() { + org.openide.awt.Mnemonics.setLocalizedText(oldDataSourcesHideKnownCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldDataSourcesHideKnownCB.text")); // NOI18N + oldDataSourcesHideKnownCB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - dataSourcesHideKnownCBActionPerformed(evt); + oldDataSourcesHideKnownCBActionPerformed(evt); } }); - org.openide.awt.Mnemonics.setLocalizedText(viewsHideKnownCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.viewsHideKnownCB.text")); // NOI18N - viewsHideKnownCB.addActionListener(new java.awt.event.ActionListener() { + org.openide.awt.Mnemonics.setLocalizedText(oldViewsHideKnownCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldViewsHideKnownCB.text")); // NOI18N + oldViewsHideKnownCB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - viewsHideKnownCBActionPerformed(evt); + oldViewsHideKnownCBActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(jLabelHideSlackFiles, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelHideSlackFiles.text")); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(dataSourcesHideSlackCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.dataSourcesHideSlackCB.text")); // NOI18N - dataSourcesHideSlackCB.addActionListener(new java.awt.event.ActionListener() { + org.openide.awt.Mnemonics.setLocalizedText(oldDataSourcesHideSlackCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldDataSourcesHideSlackCB.text")); // NOI18N + oldDataSourcesHideSlackCB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - dataSourcesHideSlackCBActionPerformed(evt); + oldDataSourcesHideSlackCBActionPerformed(evt); } }); - org.openide.awt.Mnemonics.setLocalizedText(viewsHideSlackCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.viewsHideSlackCB.text")); // NOI18N - viewsHideSlackCB.addActionListener(new java.awt.event.ActionListener() { + org.openide.awt.Mnemonics.setLocalizedText(oldViewsHideSlackCB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldViewsHideSlackCB.text")); // NOI18N + oldViewsHideSlackCB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - viewsHideSlackCBActionPerformed(evt); + oldViewsHideSlackCBActionPerformed(evt); } }); org.openide.awt.Mnemonics.setLocalizedText(jLabelTimeDisplay, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.jLabelTimeDisplay.text")); // NOI18N - displayTimesButtonGroup.add(useLocalTimeRB); - org.openide.awt.Mnemonics.setLocalizedText(useLocalTimeRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useLocalTimeRB.text")); // NOI18N - useLocalTimeRB.addActionListener(new java.awt.event.ActionListener() { + displayTimesButtonGroup.add(oldUseLocalTimeRB); + org.openide.awt.Mnemonics.setLocalizedText(oldUseLocalTimeRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldUseLocalTimeRB.text")); // NOI18N + oldUseLocalTimeRB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - useLocalTimeRBActionPerformed(evt); + oldUseLocalTimeRBActionPerformed(evt); } }); - displayTimesButtonGroup.add(useGMTTimeRB); - org.openide.awt.Mnemonics.setLocalizedText(useGMTTimeRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.useGMTTimeRB.text")); // NOI18N - useGMTTimeRB.addActionListener(new java.awt.event.ActionListener() { + displayTimesButtonGroup.add(oldUseGMTTimeRB); + org.openide.awt.Mnemonics.setLocalizedText(oldUseGMTTimeRB, org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.oldUseGMTTimeRB.text")); // NOI18N + oldUseGMTTimeRB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - useGMTTimeRBActionPerformed(evt); + oldUseGMTTimeRBActionPerformed(evt); } }); - javax.swing.GroupLayout viewPanelLayout = new javax.swing.GroupLayout(viewPanel); - viewPanel.setLayout(viewPanelLayout); - viewPanelLayout.setHorizontalGroup( - viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, viewPanelLayout.createSequentialGroup() + javax.swing.GroupLayout oldViewPanelLayout = new javax.swing.GroupLayout(oldViewPanel); + oldViewPanel.setLayout(oldViewPanelLayout); + oldViewPanelLayout.setHorizontalGroup( + oldViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, oldViewPanelLayout.createSequentialGroup() .addContainerGap() - .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(viewPanelLayout.createSequentialGroup() + .addGroup(oldViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(oldViewPanelLayout.createSequentialGroup() .addGap(10, 10, 10) - .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(viewPanelLayout.createSequentialGroup() - .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(useGMTTimeRB) - .addComponent(keepCurrentViewerRB) - .addComponent(useBestViewerRB) - .addComponent(dataSourcesHideKnownCB) - .addComponent(viewsHideKnownCB)) + .addGroup(oldViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(oldViewPanelLayout.createSequentialGroup() + .addGroup(oldViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(oldUseGMTTimeRB) + .addComponent(oldKeepCurrentViewerRB) + .addComponent(oldUseBestViewerRB) + .addComponent(oldDataSourcesHideKnownCB) + .addComponent(oldViewsHideKnownCB)) .addGap(0, 0, Short.MAX_VALUE)) - .addGroup(viewPanelLayout.createSequentialGroup() - .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(dataSourcesHideSlackCB) - .addComponent(viewsHideSlackCB) - .addComponent(useLocalTimeRB)) + .addGroup(oldViewPanelLayout.createSequentialGroup() + .addGroup(oldViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(oldDataSourcesHideSlackCB) + .addComponent(oldViewsHideSlackCB) + .addComponent(oldUseLocalTimeRB)) .addContainerGap(158, Short.MAX_VALUE)))) - .addGroup(viewPanelLayout.createSequentialGroup() - .addGroup(viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(oldViewPanelLayout.createSequentialGroup() + .addGroup(oldViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabelHideSlackFiles) .addComponent(jLabelTimeDisplay) .addComponent(jLabelHideKnownFiles) .addComponent(jLabelSelectFile)) .addGap(30, 30, 30)))) ); - viewPanelLayout.setVerticalGroup( - viewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, viewPanelLayout.createSequentialGroup() + oldViewPanelLayout.setVerticalGroup( + oldViewPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, oldViewPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabelSelectFile) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(useBestViewerRB) + .addComponent(oldUseBestViewerRB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(keepCurrentViewerRB) + .addComponent(oldKeepCurrentViewerRB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabelHideKnownFiles) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(dataSourcesHideKnownCB) + .addComponent(oldDataSourcesHideKnownCB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(viewsHideKnownCB) + .addComponent(oldViewsHideKnownCB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabelHideSlackFiles) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(dataSourcesHideSlackCB) + .addComponent(oldDataSourcesHideSlackCB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(viewsHideSlackCB) + .addComponent(oldViewsHideSlackCB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabelTimeDisplay) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(useLocalTimeRB) + .addComponent(oldUseLocalTimeRB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(useGMTTimeRB)) + .addComponent(oldUseGMTTimeRB)) ); runtimePanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(AutopsyOptionsPanel.class, "AutopsyOptionsPanel.runtimePanel.border.title"))); // NOI18N @@ -889,7 +889,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(logoPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 1010, Short.MAX_VALUE) .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(viewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(oldViewPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(runtimePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addContainerGap()) @@ -899,7 +899,7 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { .addGroup(jPanel1Layout.createSequentialGroup() .addGap(0, 0, 0) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(viewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(oldViewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(runtimePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(logoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -940,37 +940,37 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); }//GEN-LAST:event_memFieldKeyReleased - private void useGMTTimeRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useGMTTimeRBActionPerformed + private void oldUseGMTTimeRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oldUseGMTTimeRBActionPerformed firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - }//GEN-LAST:event_useGMTTimeRBActionPerformed + }//GEN-LAST:event_oldUseGMTTimeRBActionPerformed - private void useLocalTimeRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useLocalTimeRBActionPerformed + private void oldUseLocalTimeRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oldUseLocalTimeRBActionPerformed firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - }//GEN-LAST:event_useLocalTimeRBActionPerformed + }//GEN-LAST:event_oldUseLocalTimeRBActionPerformed - private void viewsHideSlackCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewsHideSlackCBActionPerformed + private void oldViewsHideSlackCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oldViewsHideSlackCBActionPerformed firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - }//GEN-LAST:event_viewsHideSlackCBActionPerformed + }//GEN-LAST:event_oldViewsHideSlackCBActionPerformed - private void dataSourcesHideSlackCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dataSourcesHideSlackCBActionPerformed + private void oldDataSourcesHideSlackCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oldDataSourcesHideSlackCBActionPerformed firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - }//GEN-LAST:event_dataSourcesHideSlackCBActionPerformed + }//GEN-LAST:event_oldDataSourcesHideSlackCBActionPerformed - private void viewsHideKnownCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewsHideKnownCBActionPerformed + private void oldViewsHideKnownCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oldViewsHideKnownCBActionPerformed firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - }//GEN-LAST:event_viewsHideKnownCBActionPerformed + }//GEN-LAST:event_oldViewsHideKnownCBActionPerformed - private void dataSourcesHideKnownCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dataSourcesHideKnownCBActionPerformed + private void oldDataSourcesHideKnownCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oldDataSourcesHideKnownCBActionPerformed firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - }//GEN-LAST:event_dataSourcesHideKnownCBActionPerformed + }//GEN-LAST:event_oldDataSourcesHideKnownCBActionPerformed - private void keepCurrentViewerRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_keepCurrentViewerRBActionPerformed + private void oldKeepCurrentViewerRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oldKeepCurrentViewerRBActionPerformed firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - }//GEN-LAST:event_keepCurrentViewerRBActionPerformed + }//GEN-LAST:event_oldKeepCurrentViewerRBActionPerformed - private void useBestViewerRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useBestViewerRBActionPerformed + private void oldUseBestViewerRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_oldUseBestViewerRBActionPerformed firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null); - }//GEN-LAST:event_useBestViewerRBActionPerformed + }//GEN-LAST:event_oldUseBestViewerRBActionPerformed private void specifyLogoRBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_specifyLogoRBActionPerformed agencyLogoPathField.setEnabled(true); @@ -1028,8 +1028,6 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { private javax.swing.JLabel agencyLogoPathFieldValidationLabel; private javax.swing.JLabel agencyLogoPreview; private javax.swing.JButton browseLogosButton; - private javax.swing.JCheckBox dataSourcesHideKnownCB; - private javax.swing.JCheckBox dataSourcesHideSlackCB; private javax.swing.JRadioButton defaultLogoRB; private javax.swing.ButtonGroup displayTimesButtonGroup; private javax.swing.ButtonGroup fileSelectionButtonGroup; @@ -1039,7 +1037,6 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { private javax.swing.JLabel jLabelTimeDisplay; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JRadioButton keepCurrentViewerRB; private javax.swing.JTextField logFileCount; private javax.swing.JTextField logNumAlert; private javax.swing.JPanel logoPanel; @@ -1050,17 +1047,20 @@ final class AutopsyOptionsPanel extends javax.swing.JPanel { private javax.swing.JLabel maxMemoryUnitsLabel1; private javax.swing.JTextField memField; private javax.swing.JLabel memFieldValidationLabel; + private javax.swing.JCheckBox oldDataSourcesHideKnownCB; + private javax.swing.JCheckBox oldDataSourcesHideSlackCB; + private javax.swing.JRadioButton oldKeepCurrentViewerRB; + private javax.swing.JRadioButton oldUseBestViewerRB; + private javax.swing.JRadioButton oldUseGMTTimeRB; + private javax.swing.JRadioButton oldUseLocalTimeRB; + private javax.swing.JPanel oldViewPanel; + private javax.swing.JCheckBox oldViewsHideKnownCB; + private javax.swing.JCheckBox oldViewsHideSlackCB; private javax.swing.JLabel restartNecessaryWarning; private javax.swing.JPanel runtimePanel; private javax.swing.JRadioButton specifyLogoRB; private javax.swing.JLabel systemMemoryTotal; private javax.swing.JLabel totalMemoryLabel; - private javax.swing.JRadioButton useBestViewerRB; - private javax.swing.JRadioButton useGMTTimeRB; - private javax.swing.JRadioButton useLocalTimeRB; - private javax.swing.JPanel viewPanel; - private javax.swing.JCheckBox viewsHideKnownCB; - private javax.swing.JCheckBox viewsHideSlackCB; // End of variables declaration//GEN-END:variables } diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties index bb98cc90f6..1a83101f5e 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle.properties @@ -96,14 +96,6 @@ DataResultViewerThumbnail.comboBox.mediumThumbnails=Medium Thumbnails DataResultViewerThumbnail.comboBox.largeThumbnails=Large Thumbnails DataResultViewerThumbnail.switchPage.done.errMsg=Error making thumbnails\: {0} AboutWindowPanel.actVerboseLogging.text=Activate verbose logging -AutopsyOptionsPanel.viewsHideKnownCB.text=Views area -AutopsyOptionsPanel.dataSourcesHideKnownCB.text=Data Sources area (the directory hierarchy) -AutopsyOptionsPanel.useBestViewerRB.toolTipText=For example, change from Hex to Media when a JPEG is selected. -AutopsyOptionsPanel.useBestViewerRB.text=Change to the most specific file viewer -AutopsyOptionsPanel.useGMTTimeRB.text=Use GMT -AutopsyOptionsPanel.useLocalTimeRB.text=Use local time zone -AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText=For example, stay in Hex view when a JPEG is selected. -AutopsyOptionsPanel.keepCurrentViewerRB.text=Stay on the same file viewer AutopsyOptionsPanel.jLabelSelectFile.text=When selecting a file: AutopsyOptionsPanel.jLabelHideKnownFiles.text=Hide known files (i.e. those in the NIST NSRL) in the: AutopsyOptionsPanel.jLabelTimeDisplay.text=When displaying times: @@ -154,8 +146,6 @@ MultiUserSettingsPanel.lbTestDbWarning.text= MultiUserSettingsPanel.KeywordSearchNull=Cannot find keyword search service MultiUserSettingsPanel.InvalidPortNumber=Invalid port number AutopsyOptionsPanel.jLabelHideSlackFiles.text=Hide slack files in the: -AutopsyOptionsPanel.dataSourcesHideSlackCB.text=Data Sources area (the directory hierarchy) -AutopsyOptionsPanel.viewsHideSlackCB.text=Views area AutopsyOptionsPanel.agencyLogoImageLabel.toolTipText= AutopsyOptionsPanel.agencyLogoPathField.text= SortChooserDialog.label=remove @@ -177,7 +167,41 @@ AutopsyOptionsPanel.specifyLogoRB.text=Specify a logo AutopsyOptionsPanel.agencyLogoPreview.text=
No logo
selected
AutopsyOptionsPanel.logoPanel.border.title=Logo AutopsyOptionsPanel.runtimePanel.border.title=Runtime -AutopsyOptionsPanel.viewPanel.border.title=View DataResultPanel.matchLabel.text=Results DataResultPanel.numberOfChildNodesLabel.text=0 DataResultPanel.descriptionLabel.text=directoryPath +ViewPreferencesPanel.selectFileLabel.text=When selecting a file: +ViewPreferencesPanel.globalSettingsPanel.border.title=Global Settings +ViewPreferencesPanel.displayTimeLabel.text=When displaying times: +ViewPreferencesPanel.hideSlackFilesLabel.text=Hide slack files in the: +ViewPreferencesPanel.groupByDataSourceCheckbox.text=Group by data source +ViewPreferencesPanel.hideKnownFilesLabel.text=Hide known files (i.e. those in the NIST NSRL) in the: +ViewPreferencesPanel.hideOtherUsersTagsCheckbox.text=Hide other user's tags +ViewPreferencesPanel.currentCaseSettingsPanel.border.title=Current Case Settings +OptionsCategory_Name_View=View +OptionsCategory_Keywords_View=View +ViewPreferencesDialog.okButton.text=OK +ViewPreferencesDialog.cancelButton.text=Cancel +AutopsyOptionsPanel.oldViewPanel.border.title=View +AutopsyOptionsPanel.oldUseBestViewerRB.toolTipText=For example, change from Hex to Media when a JPEG is selected. +AutopsyOptionsPanel.oldUseBestViewerRB.text=Change to the most specific file viewer +AutopsyOptionsPanel.oldKeepCurrentViewerRB.toolTipText=For example, stay in Hex view when a JPEG is selected. +AutopsyOptionsPanel.oldKeepCurrentViewerRB.text=Stay on the same file viewer +AutopsyOptionsPanel.oldDataSourcesHideKnownCB.text=Data Sources area (the directory hierarchy) +AutopsyOptionsPanel.oldViewsHideKnownCB.text=Views area +AutopsyOptionsPanel.oldDataSourcesHideSlackCB.text=Data Sources area (the directory hierarchy) +AutopsyOptionsPanel.oldViewsHideSlackCB.text=Views area +AutopsyOptionsPanel.oldUseLocalTimeRB.text=Use local time zone +AutopsyOptionsPanel.oldUseGMTTimeRB.text=Use GMT +ViewPreferencesPanel.useBestViewerRadioButton.toolTipText=For example, change from Hex to Media when a JPEG is selected. +ViewPreferencesPanel.useBestViewerRadioButton.text=Change to the most specific file viewer +ViewPreferencesPanel.keepCurrentViewerRadioButton.toolTipText=For example, stay in Hex view when a JPEG is selected. +ViewPreferencesPanel.keepCurrentViewerRadioButton.text=Stay on the same file viewer +ViewPreferencesPanel.useLocalTimeRadioButton.text=Use local time zone +ViewPreferencesPanel.useGMTTimeRadioButton.text=Use GMT +ViewPreferencesPanel.dataSourcesHideKnownCheckbox.text=Data Sources area (the directory hierarchy) +ViewPreferencesPanel.viewsHideKnownCheckbox.text=Views area +ViewPreferencesPanel.dataSourcesHideSlackCheckbox.text=Data Sources area (the directory hierarchy) +ViewPreferencesPanel.viewsHideSlackCheckbox.text=Views area +ViewPreferencesPanel.currentSessionSettingsPanel.border.title=Current Session Settings +ViewPreferencesPanel.hideRejectedResultsCheckbox.text=Hide rejected results diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties index cbdabb3747..0eadc6458b 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/Bundle_ja.properties @@ -79,14 +79,6 @@ DataResultViewerThumbnail.comboBox.mediumThumbnails=\u30b5\u30e0\u30cd\u30a4\u30 DataResultViewerThumbnail.comboBox.largeThumbnails=\u30b5\u30e0\u30cd\u30a4\u30eb\uff08\u5927\uff09 DataResultViewerThumbnail.switchPage.done.errMsg=\u30b5\u30e0\u30cd\u30a4\u30eb\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff1a {0} AboutWindowPanel.actVerboseLogging.text=Verbose\u30ed\u30b0\u3092\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8 -AutopsyOptionsPanel.viewsHideKnownCB.text=\u30d3\u30e5\u30fc\u30a8\u30ea\u30a2 -AutopsyOptionsPanel.dataSourcesHideKnownCB.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30a8\u30ea\u30a2\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u968e\u5c64\uff09 -AutopsyOptionsPanel.useBestViewerRB.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u306fHEX\u304b\u3089\u30e1\u30c7\u30a3\u30a2\u306b\u5909\u66f4\u3059\u308b\u3002 -AutopsyOptionsPanel.useBestViewerRB.text=\u6700\u3082\u5c02\u9580\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u306b\u5909\u66f4 -AutopsyOptionsPanel.useGMTTimeRB.text=GMT\u3092\u4f7f\u7528 -AutopsyOptionsPanel.useLocalTimeRB.text=\u30ed\u30fc\u30ab\u30eb\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528 -AutopsyOptionsPanel.keepCurrentViewerRB.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u305d\u306e\u307e\u307eHEX\u30d3\u30e5\u30fc\u3092\u4f7f\u7528\u3002 -AutopsyOptionsPanel.keepCurrentViewerRB.text=\u305d\u306e\u307e\u307e\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u3092\u4f7f\u7528 AutopsyOptionsPanel.jLabelSelectFile.text=\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u5834\u5408\uff1a AutopsyOptionsPanel.jLabelHideKnownFiles.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\uff08NIST NSRL\u5185\u306e\uff09\u3092\u6b21\u306b\u96a0\u3059\uff1a AutopsyOptionsPanel.jLabelTimeDisplay.text=\u6642\u9593\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a @@ -131,3 +123,22 @@ MediaViewImagePanel.externalViewerButton.text=\u5916\u90e8\u30d3\u30e5\u30fc\u30 DataResultPanel.matchLabel.text=\u7d50\u679c DataResultPanel.numberOfChildNodesLabel.text=0 DataResultPanel.descriptionLabel.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30d1\u30b9 +ViewPreferencesPanel.selectFileLabel.text=\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3059\u308b\u5834\u5408\uff1a +ViewPreferencesPanel.displayTimeLabel.text=\u6642\u9593\u3092\u8868\u793a\u3059\u308b\u5834\u5408\uff1a +ViewPreferencesPanel.hideKnownFilesLabel.text=\u65e2\u77e5\u30d5\u30a1\u30a4\u30eb\uff08NIST NSRL\u5185\u306e\uff09\u3092\u6b21\u306b\u96a0\u3059\uff1a +AutopsyOptionsPanel.oldUseBestViewerRB.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u306fHEX\u304b\u3089\u30e1\u30c7\u30a3\u30a2\u306b\u5909\u66f4\u3059\u308b\u3002 +AutopsyOptionsPanel.oldUseBestViewerRB.text=\u6700\u3082\u5c02\u9580\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u306b\u5909\u66f4 +AutopsyOptionsPanel.oldKeepCurrentViewerRB.text=\u305d\u306e\u307e\u307e\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u3092\u4f7f\u7528 +AutopsyOptionsPanel.oldKeepCurrentViewerRB.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u305d\u306e\u307e\u307eHEX\u30d3\u30e5\u30fc\u3092\u4f7f\u7528\u3002 +AutopsyOptionsPanel.oldDataSourcesHideKnownCB.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30a8\u30ea\u30a2\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u968e\u5c64\uff09 +AutopsyOptionsPanel.oldViewsHideKnownCB.text=\u30d3\u30e5\u30fc\u30a8\u30ea\u30a2 +AutopsyOptionsPanel.oldUseLocalTimeRB.text=\u30ed\u30fc\u30ab\u30eb\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528 +AutopsyOptionsPanel.oldUseGMTTimeRB.text=GMT\u3092\u4f7f\u7528 +ViewPreferencesPanel.useBestViewerRadioButton.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u306fHEX\u304b\u3089\u30e1\u30c7\u30a3\u30a2\u306b\u5909\u66f4\u3059\u308b\u3002 +ViewPreferencesPanel.useBestViewerRadioButton.text=\u6700\u3082\u5c02\u9580\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u306b\u5909\u66f4 +ViewPreferencesPanel.keepCurrentViewerRadioButton.text=\u305d\u306e\u307e\u307e\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u30d3\u30e5\u30fc\u30a2\u3092\u4f7f\u7528 +ViewPreferencesPanel.keepCurrentViewerRadioButton.toolTipText=\u4f8b\u3048\u3070\u3001JPEG\u304c\u9078\u629e\u3055\u308c\u305f\u5834\u5408\u306b\u305d\u306e\u307e\u307eHEX\u30d3\u30e5\u30fc\u3092\u4f7f\u7528\u3002 +ViewPreferencesPanel.useLocalTimeRadioButton.text=\u30ed\u30fc\u30ab\u30eb\u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3092\u4f7f\u7528 +ViewPreferencesPanel.useGMTTimeRadioButton.text=GMT\u3092\u4f7f\u7528 +ViewPreferencesPanel.dataSourcesHideKnownCheckbox.text=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u30a8\u30ea\u30a2\uff08\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u968e\u5c64\uff09 +ViewPreferencesPanel.viewsHideKnownCheckbox.text=\u30d3\u30e5\u30fc\u30a8\u30ea\u30a2 diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanelController.java b/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanelController.java index 9c23379975..212bfa7dcd 100644 --- a/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/MultiUserSettingsPanelController.java @@ -31,7 +31,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; @OptionsPanelController.TopLevelRegistration(categoryName = "#OptionsCategory_Name_Multi_User_Settings", iconBase = "org/sleuthkit/autopsy/images/User-Group-icon-green32.png", - position = 3, + position = 4, keywords = "#OptionsCategory_Keywords_Multi_User_Options", keywordsCategory = "Multi-User") public final class MultiUserSettingsPanelController extends OptionsPanelController { diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesDialog.form b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesDialog.form new file mode 100755 index 0000000000..d57d767a1e --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesDialog.form @@ -0,0 +1,78 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesDialog.java b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesDialog.java new file mode 100755 index 0000000000..bab69e596b --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesDialog.java @@ -0,0 +1,133 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2018 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.awt.Dialog; +import org.openide.util.NbBundle; +import org.openide.windows.WindowManager; + +/** + * Popup dialog for hosting the ViewPreferencesPanel. This is intended to be + * used from the DirectoryTreeTopComponent. + */ +final public class ViewPreferencesDialog extends javax.swing.JDialog { + + /** + * Creates new form ViewPreferencesDialog + */ + @NbBundle.Messages({ + "ViewPreferencesDialog.title.text=View Preferences" + }) + public ViewPreferencesDialog() { + super(WindowManager.getDefault().getMainWindow(), + Bundle.ViewPreferencesDialog_title_text(), + Dialog.ModalityType.APPLICATION_MODAL); + initComponents(); + viewPreferencesPanel.load(); + } + + /** + * Show the dialog. + */ + public void display() { + setLocationRelativeTo(WindowManager.getDefault().getMainWindow()); + setVisible(true); + } + + /** + * Close the dialog. + */ + private void close() { + setVisible(false); + dispose(); + } + + /** + * 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 + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + okButton = new javax.swing.JButton(); + cancelButton = new javax.swing.JButton(); + viewPreferencesPanel = new org.sleuthkit.autopsy.corecomponents.ViewPreferencesPanel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); + + org.openide.awt.Mnemonics.setLocalizedText(okButton, org.openide.util.NbBundle.getMessage(ViewPreferencesDialog.class, "ViewPreferencesDialog.okButton.text")); // NOI18N + okButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + okButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(ViewPreferencesDialog.class, "ViewPreferencesDialog.cancelButton.text")); // NOI18N + cancelButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cancelButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(viewPreferencesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(viewPreferencesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(okButton) + .addComponent(cancelButton)) + .addContainerGap()) + ); + + pack(); + }// //GEN-END:initComponents + + private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed + viewPreferencesPanel.store(); + close(); + }//GEN-LAST:event_okButtonActionPerformed + + private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed + close(); + }//GEN-LAST:event_cancelButtonActionPerformed + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton cancelButton; + private javax.swing.JButton okButton; + private org.sleuthkit.autopsy.corecomponents.ViewPreferencesPanel viewPreferencesPanel; + // End of variables declaration//GEN-END:variables +} diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesPanel.form b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesPanel.form new file mode 100755 index 0000000000..1fcbee8b23 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesPanel.form @@ -0,0 +1,335 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesPanel.java b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesPanel.java new file mode 100755 index 0000000000..1e9b1fcbbd --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesPanel.java @@ -0,0 +1,362 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2018 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Objects; +import java.util.Properties; +import java.util.logging.Level; +import javax.swing.JPanel; +import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.casemodule.CasePreferences; +import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; +import org.sleuthkit.autopsy.core.UserPreferences; +import org.sleuthkit.autopsy.coreutils.Logger; + +/** + * Panel for configuring view preferences. + */ +public class ViewPreferencesPanel extends JPanel implements OptionsPanel { + + private static final Logger logger = Logger.getLogger(ViewPreferencesPanel.class.getName()); + + private Case currentCase = null; + private CasePreferences casePreferences = null; + + /** + * Creates new form ViewPreferencesPanel + */ + public ViewPreferencesPanel() { + initComponents(); + } + + @Override + public void load() { + boolean keepPreferredViewer = UserPreferences.keepPreferredContentViewer(); + keepCurrentViewerRadioButton.setSelected(keepPreferredViewer); + useBestViewerRadioButton.setSelected(!keepPreferredViewer); + + boolean useLocalTime = UserPreferences.displayTimesInLocalTime(); + useLocalTimeRadioButton.setSelected(useLocalTime); + useGMTTimeRadioButton.setSelected(!useLocalTime); + + dataSourcesHideKnownCheckbox.setSelected(UserPreferences.hideKnownFilesInDataSourcesTree()); + viewsHideKnownCheckbox.setSelected(UserPreferences.hideKnownFilesInViewsTree()); + + dataSourcesHideSlackCheckbox.setSelected(UserPreferences.hideSlackFilesInDataSourcesTree()); + viewsHideSlackCheckbox.setSelected(UserPreferences.hideSlackFilesInViewsTree()); + + hideOtherUsersTagsCheckbox.setSelected(UserPreferences.showOnlyCurrentUserTags() == false); + + try { + currentCase = Case.getCurrentCaseThrows(); + casePreferences = new CasePreferences(currentCase); + + groupByDataSourceCheckbox.setSelected(Objects.equals(casePreferences.getGroupItemsInTreeByDataSource(), true)); + } catch (NoCurrentCaseException ex) { + // No open case. + } + } + + @Override + public void store() { + UserPreferences.setKeepPreferredContentViewer(keepCurrentViewerRadioButton.isSelected()); + UserPreferences.setDisplayTimesInLocalTime(useLocalTimeRadioButton.isSelected()); + UserPreferences.setHideKnownFilesInDataSourcesTree(dataSourcesHideKnownCheckbox.isSelected()); + UserPreferences.setHideKnownFilesInViewsTree(viewsHideKnownCheckbox.isSelected()); + UserPreferences.setHideSlackFilesInDataSourcesTree(dataSourcesHideSlackCheckbox.isSelected()); + UserPreferences.setHideSlackFilesInViewsTree(viewsHideSlackCheckbox.isSelected()); + + UserPreferences.setShowOnlyCurrentUserTags(hideOtherUsersTagsCheckbox.isSelected()); + + if (currentCase != null) { + /* + * Only write the value if it has already been previously stored, or + * if the checkbox is selected. This allows GroupDataSourcesDialog + * to work. + */ + if (casePreferences.getGroupItemsInTreeByDataSource() != null || groupByDataSourceCheckbox.isSelected()) { + firePropertyChange( + CasePreferences.GROUP_ITEMS_IN_TREE_BY_DATASOURCE, + casePreferences.getGroupItemsInTreeByDataSource(), Boolean.valueOf(groupByDataSourceCheckbox.isSelected())); + casePreferences.setGroupItemsInTreeByDataSource(groupByDataSourceCheckbox.isSelected()); + } + casePreferences.saveToStorage(currentCase); + } + } + + /** + * 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 + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + globalSettingsPanel = new javax.swing.JPanel(); + selectFileLabel = new javax.swing.JLabel(); + useBestViewerRadioButton = new javax.swing.JRadioButton(); + keepCurrentViewerRadioButton = new javax.swing.JRadioButton(); + hideKnownFilesLabel = new javax.swing.JLabel(); + dataSourcesHideKnownCheckbox = new javax.swing.JCheckBox(); + viewsHideKnownCheckbox = new javax.swing.JCheckBox(); + hideSlackFilesLabel = new javax.swing.JLabel(); + dataSourcesHideSlackCheckbox = new javax.swing.JCheckBox(); + viewsHideSlackCheckbox = new javax.swing.JCheckBox(); + displayTimeLabel = new javax.swing.JLabel(); + useLocalTimeRadioButton = new javax.swing.JRadioButton(); + useGMTTimeRadioButton = new javax.swing.JRadioButton(); + currentCaseSettingsPanel = new javax.swing.JPanel(); + hideOtherUsersTagsCheckbox = new javax.swing.JCheckBox(); + groupByDataSourceCheckbox = new javax.swing.JCheckBox(); + currentSessionSettingsPanel = new javax.swing.JPanel(); + hideRejectedResultsCheckbox = new javax.swing.JCheckBox(); + + globalSettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.globalSettingsPanel.border.title"))); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(selectFileLabel, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.selectFileLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(useBestViewerRadioButton, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.useBestViewerRadioButton.text")); // NOI18N + useBestViewerRadioButton.setToolTipText(org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.useBestViewerRadioButton.toolTipText")); // NOI18N + useBestViewerRadioButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + useBestViewerRadioButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(keepCurrentViewerRadioButton, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.keepCurrentViewerRadioButton.text")); // NOI18N + keepCurrentViewerRadioButton.setToolTipText(org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.keepCurrentViewerRadioButton.toolTipText")); // NOI18N + keepCurrentViewerRadioButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + keepCurrentViewerRadioButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(hideKnownFilesLabel, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.hideKnownFilesLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(dataSourcesHideKnownCheckbox, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.dataSourcesHideKnownCheckbox.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(viewsHideKnownCheckbox, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.viewsHideKnownCheckbox.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(hideSlackFilesLabel, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.hideSlackFilesLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(dataSourcesHideSlackCheckbox, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.dataSourcesHideSlackCheckbox.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(viewsHideSlackCheckbox, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.viewsHideSlackCheckbox.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(displayTimeLabel, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.displayTimeLabel.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(useLocalTimeRadioButton, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.useLocalTimeRadioButton.text")); // NOI18N + useLocalTimeRadioButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + useLocalTimeRadioButtonActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(useGMTTimeRadioButton, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.useGMTTimeRadioButton.text")); // NOI18N + useGMTTimeRadioButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + useGMTTimeRadioButtonActionPerformed(evt); + } + }); + + javax.swing.GroupLayout globalSettingsPanelLayout = new javax.swing.GroupLayout(globalSettingsPanel); + globalSettingsPanel.setLayout(globalSettingsPanelLayout); + globalSettingsPanelLayout.setHorizontalGroup( + globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, globalSettingsPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(displayTimeLabel) + .addGroup(globalSettingsPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(keepCurrentViewerRadioButton) + .addComponent(useBestViewerRadioButton) + .addComponent(useGMTTimeRadioButton) + .addComponent(useLocalTimeRadioButton))) + .addComponent(selectFileLabel)) + .addGap(18, 18, 18) + .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(hideKnownFilesLabel) + .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(globalSettingsPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(dataSourcesHideSlackCheckbox) + .addComponent(viewsHideSlackCheckbox))) + .addComponent(hideSlackFilesLabel)) + .addGroup(globalSettingsPanelLayout.createSequentialGroup() + .addGap(10, 10, 10) + .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(dataSourcesHideKnownCheckbox) + .addComponent(viewsHideKnownCheckbox))))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + globalSettingsPanelLayout.setVerticalGroup( + globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, globalSettingsPanelLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(globalSettingsPanelLayout.createSequentialGroup() + .addComponent(hideKnownFilesLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(dataSourcesHideKnownCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(viewsHideKnownCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(hideSlackFilesLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(dataSourcesHideSlackCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(viewsHideSlackCheckbox)) + .addGroup(globalSettingsPanelLayout.createSequentialGroup() + .addComponent(selectFileLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(useBestViewerRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(keepCurrentViewerRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(displayTimeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(useLocalTimeRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(useGMTTimeRadioButton)))) + ); + + currentCaseSettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.currentCaseSettingsPanel.border.title"))); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(hideOtherUsersTagsCheckbox, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.hideOtherUsersTagsCheckbox.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(groupByDataSourceCheckbox, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.groupByDataSourceCheckbox.text")); // NOI18N + + javax.swing.GroupLayout currentCaseSettingsPanelLayout = new javax.swing.GroupLayout(currentCaseSettingsPanel); + currentCaseSettingsPanel.setLayout(currentCaseSettingsPanelLayout); + currentCaseSettingsPanelLayout.setHorizontalGroup( + currentCaseSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(currentCaseSettingsPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(currentCaseSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(hideOtherUsersTagsCheckbox) + .addComponent(groupByDataSourceCheckbox)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + currentCaseSettingsPanelLayout.setVerticalGroup( + currentCaseSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(currentCaseSettingsPanelLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(hideOtherUsersTagsCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(groupByDataSourceCheckbox) + .addGap(20, 20, 20)) + ); + + currentSessionSettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.currentSessionSettingsPanel.border.title"))); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(hideRejectedResultsCheckbox, org.openide.util.NbBundle.getMessage(ViewPreferencesPanel.class, "ViewPreferencesPanel.hideRejectedResultsCheckbox.text")); // NOI18N + + javax.swing.GroupLayout currentSessionSettingsPanelLayout = new javax.swing.GroupLayout(currentSessionSettingsPanel); + currentSessionSettingsPanel.setLayout(currentSessionSettingsPanelLayout); + currentSessionSettingsPanelLayout.setHorizontalGroup( + currentSessionSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(currentSessionSettingsPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(hideRejectedResultsCheckbox) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + currentSessionSettingsPanelLayout.setVerticalGroup( + currentSessionSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(currentSessionSettingsPanelLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(hideRejectedResultsCheckbox)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(currentSessionSettingsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(globalSettingsPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(currentCaseSettingsPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(globalSettingsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(currentCaseSettingsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(currentSessionSettingsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private void useBestViewerRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useBestViewerRadioButtonActionPerformed + useBestViewerRadioButton.setSelected(true); + keepCurrentViewerRadioButton.setSelected(false); + }//GEN-LAST:event_useBestViewerRadioButtonActionPerformed + + private void keepCurrentViewerRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_keepCurrentViewerRadioButtonActionPerformed + useBestViewerRadioButton.setSelected(false); + keepCurrentViewerRadioButton.setSelected(true); + }//GEN-LAST:event_keepCurrentViewerRadioButtonActionPerformed + + private void useLocalTimeRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useLocalTimeRadioButtonActionPerformed + useLocalTimeRadioButton.setSelected(true); + useGMTTimeRadioButton.setSelected(false); + }//GEN-LAST:event_useLocalTimeRadioButtonActionPerformed + + private void useGMTTimeRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useGMTTimeRadioButtonActionPerformed + useLocalTimeRadioButton.setSelected(false); + useGMTTimeRadioButton.setSelected(true); + }//GEN-LAST:event_useGMTTimeRadioButtonActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel currentCaseSettingsPanel; + private javax.swing.JPanel currentSessionSettingsPanel; + private javax.swing.JCheckBox dataSourcesHideKnownCheckbox; + private javax.swing.JCheckBox dataSourcesHideSlackCheckbox; + private javax.swing.JLabel displayTimeLabel; + private javax.swing.JPanel globalSettingsPanel; + private javax.swing.JCheckBox groupByDataSourceCheckbox; + private javax.swing.JLabel hideKnownFilesLabel; + private javax.swing.JCheckBox hideOtherUsersTagsCheckbox; + private javax.swing.JCheckBox hideRejectedResultsCheckbox; + private javax.swing.JLabel hideSlackFilesLabel; + private javax.swing.JRadioButton keepCurrentViewerRadioButton; + private javax.swing.JLabel selectFileLabel; + private javax.swing.JRadioButton useBestViewerRadioButton; + private javax.swing.JRadioButton useGMTTimeRadioButton; + private javax.swing.JRadioButton useLocalTimeRadioButton; + private javax.swing.JCheckBox viewsHideKnownCheckbox; + private javax.swing.JCheckBox viewsHideSlackCheckbox; + // End of variables declaration//GEN-END:variables +} diff --git a/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesPanelController.java b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesPanelController.java new file mode 100755 index 0000000000..40efcd0149 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/corecomponents/ViewPreferencesPanelController.java @@ -0,0 +1,149 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2018 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.corecomponents; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import javax.swing.JComponent; +import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; +import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; +import java.util.logging.Level; +import org.openide.util.NbBundle.Messages; +import org.sleuthkit.autopsy.coreutils.Logger; + +/** + * Controller for the main settings panel + */ +@OptionsPanelController.TopLevelRegistration(categoryName = "#OptionsCategory_Name_View", + iconBase = "org/sleuthkit/autopsy/images/view-preferences-32.png", + position = 2, + keywords = "#OptionsCategory_Keywords_View", + keywordsCategory = "View") +public final class ViewPreferencesPanelController extends OptionsPanelController { + + private ViewPreferencesPanel panel; + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private boolean changed; + private static final Logger logger = Logger.getLogger(ViewPreferencesPanelController.class.getName()); + + @Override + public void update() { + getPanel().load(); + changed = false; + } + + @Override + public void applyChanges() { + getPanel().store(); + changed = false; + } + + @Override + public void cancel() { + } + + @Override + public boolean isValid() { + return true; + } + + @Override + public boolean isChanged() { + return changed; + } + + @Override + public HelpCtx getHelpCtx() { + return null; + } + + @Override + public JComponent getComponent(Lookup masterLookup) { + return getPanel(); + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + if (pcs.getPropertyChangeListeners().length == 0) { + pcs.addPropertyChangeListener(l); + } + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + /** + * Note the NetBeans Framework does not appear to call this at all. We + * are using NetBeans 7.3.1 Build 201306052037. Perhaps in a future + * version of the Framework this will be resolved, but for now, simply + * don't unregister anything and add one time only in the + * addPropertyChangeListener() method above. + */ + } + + /** + * Retrieve an instance of the ViewPreferencesPanel. + * + * @return A ViewPreferencesPanel instance. + */ + private ViewPreferencesPanel getPanel() { + if (panel == null) { + panel = new ViewPreferencesPanel(); + panel.addPropertyChangeListener((PropertyChangeEvent evt) -> { + if (evt.getPropertyName().equals(OptionsPanelController.PROP_CHANGED)) { + changed(); + } + }); + } + return panel; + } + + /** + * Executed whenever a property change occurs. + */ + @Messages({"ViewOptionsController.moduleErr=Error processing value changes.", + "ViewOptionsController.moduleErr.msg=Value change processing failed."}) + void changed() { + if (!changed) { + changed = true; + + try { + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error processing property change", ex); //NON-NLS + MessageNotifyUtil.Notify.show( + Bundle.ViewOptionsController_moduleErr(), + Bundle.ViewOptionsController_moduleErr_msg(), + MessageNotifyUtil.MessageType.ERROR); + } + } + + try { + pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null); + } catch (Exception e) { + logger.log(Level.SEVERE, "Error processing property change validation.", e); //NON-NLS + MessageNotifyUtil.Notify.show( + Bundle.ViewOptionsController_moduleErr(), + Bundle.ViewOptionsController_moduleErr_msg(), + MessageNotifyUtil.MessageType.ERROR); + } + } +} diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyTreeChildFactory.java b/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyTreeChildFactory.java index 70f0ca3ce6..6fd17f6c4c 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyTreeChildFactory.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/AutopsyTreeChildFactory.java @@ -24,10 +24,12 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; import java.util.List; +import java.util.Objects; import java.util.logging.Level; import org.openide.nodes.ChildFactory; import org.openide.nodes.Node; import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.casemodule.CasePreferences; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.coreutils.Logger; @@ -52,11 +54,17 @@ public final class AutopsyTreeChildFactory extends ChildFactory.Detachable list) { try { + Case currentCase = Case.getCurrentCaseThrows(); + CasePreferences casePreferences = new CasePreferences(currentCase); SleuthkitCase tskCase = Case.getCurrentCaseThrows().getSleuthkitCase(); - if (UserPreferences.groupItemsInTreeByDatasource()) { + if (Objects.equals(casePreferences.getGroupItemsInTreeByDataSource(), true)) { List dataSources = tskCase.getDataSources(); List keys = new ArrayList<>(); dataSources.forEach((datasource) -> { diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java b/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java index 366aa12979..dc19f0ecb1 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ExtractedContent.java @@ -26,6 +26,7 @@ import java.util.Comparator; import java.util.EnumSet; import java.util.HashMap; import java.util.List; +import java.util.Objects; import java.util.logging.Level; import org.openide.nodes.ChildFactory; import org.openide.nodes.Children; @@ -34,6 +35,7 @@ import org.openide.nodes.Sheet; import org.openide.util.NbBundle; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.casemodule.CasePreferences; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.coreutils.Logger; @@ -288,10 +290,11 @@ public class ExtractedContent implements AutopsyVisitableItem { @Override protected boolean createKeys(List list) { - //TEST COMMENT if (skCase != null) { try { - List types = (UserPreferences.groupItemsInTreeByDatasource()) ? + Case currentCase = Case.getCurrentCaseThrows(); + CasePreferences casePreferences = new CasePreferences(currentCase); + List types = Objects.equals(casePreferences.getGroupItemsInTreeByDataSource(), true) ? blackboard.getArtifactTypesInUse(datasourceObjId) : skCase.getArtifactTypesInUse() ; @@ -313,6 +316,8 @@ public class ExtractedContent implements AutopsyVisitableItem { node.updateDisplayName(); } } + } catch (NoCurrentCaseException ex) { + Logger.getLogger(TypeFactory.class.getName()).log(Level.SEVERE, "No current case open: " + ex.getLocalizedMessage()); //NON-NLS } catch (TskCoreException ex) { Logger.getLogger(TypeFactory.class.getName()).log(Level.SEVERE, "Error getting list of artifacts in use: " + ex.getLocalizedMessage()); //NON-NLS } @@ -356,9 +361,14 @@ public class ExtractedContent implements AutopsyVisitableItem { // a performance increase might be had by adding a // "getBlackboardArtifactCount()" method to skCase try { - this.childCount = UserPreferences.groupItemsInTreeByDatasource() ? + Case currentCase = Case.getCurrentCaseThrows(); + CasePreferences casePreferences = new CasePreferences(currentCase); + this.childCount = Objects.equals(casePreferences.getGroupItemsInTreeByDataSource(), true) ? blackboard.getArtifactsCount(type.getTypeID(), datasourceObjId) : skCase.getBlackboardArtifactsTypeCount(type.getTypeID()); + } catch (NoCurrentCaseException ex) { + Logger.getLogger(TypeNode.class.getName()) + .log(Level.WARNING, "No current case open.", ex); //NON-NLS } catch (TskException ex) { Logger.getLogger(TypeNode.class.getName()) .log(Level.WARNING, "Error getting child count", ex); //NON-NLS @@ -480,11 +490,15 @@ public class ExtractedContent implements AutopsyVisitableItem { protected boolean createKeys(List list) { if (skCase != null) { try { + Case currentCase = Case.getCurrentCaseThrows(); + CasePreferences casePreferences = new CasePreferences(currentCase); List arts = - UserPreferences.groupItemsInTreeByDatasource() ? + Objects.equals(casePreferences.getGroupItemsInTreeByDataSource(), true) ? blackboard.getArtifacts(type.getTypeID(), datasourceObjId) : skCase.getBlackboardArtifacts(type.getTypeID()); list.addAll(arts); + } catch (NoCurrentCaseException ex) { + Logger.getLogger(ArtifactFactory.class.getName()).log(Level.SEVERE, "No current case open.", ex); //NON-NLS } catch (TskException ex) { Logger.getLogger(ArtifactFactory.class.getName()).log(Level.SEVERE, "Couldn't get blackboard artifacts from database", ex); //NON-NLS } diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/accounts/Accounts.java b/Core/src/org/sleuthkit/autopsy/datamodel/accounts/Accounts.java index 557e6582ca..ff34985bc7 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/accounts/Accounts.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/accounts/Accounts.java @@ -57,6 +57,7 @@ import org.openide.util.NbBundle; import org.openide.util.Utilities; import org.openide.util.lookup.Lookups; import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.casemodule.CasePreferences; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.corecomponents.DataResultTopComponent; @@ -152,9 +153,17 @@ final public class Accounts implements AutopsyVisitableItem { * based on the UserPreferences groupItemsInTreeByDatasource setting */ private String getFilterByDataSourceClause() { - return (UserPreferences.groupItemsInTreeByDatasource()) ? - " AND blackboard_artifacts.data_source_obj_id = " + datasourceObjId + " " - : " "; + try { + Case currentCase = Case.getCurrentCaseThrows(); + CasePreferences casePreferences = new CasePreferences(currentCase); + if (Objects.equals(casePreferences.getGroupItemsInTreeByDataSource(), true)) { + return " AND blackboard_artifacts.data_source_obj_id = " + datasourceObjId + " "; + } + } catch (NoCurrentCaseException ex) { + LOGGER.log(Level.SEVERE, "No current case open.", ex); //DLG: Review this change. How should we return out of this??? + } + + return " "; } /** @@ -164,6 +173,7 @@ final public class Accounts implements AutopsyVisitableItem { * @return An Action that will toggle whether rejected artifacts are shown * in the tree rooted by this Accounts instance. */ + //DLG: Remove this! public Action newToggleShowRejectedAction() { return new ToggleShowRejected(); } @@ -1686,6 +1696,7 @@ final public class Accounts implements AutopsyVisitableItem { } + //DLG: Remove this! private final class ToggleShowRejected extends AbstractAction { @NbBundle.Messages("ToggleShowRejected.name=Show Rejected Results") @@ -1699,6 +1710,16 @@ final public class Accounts implements AutopsyVisitableItem { reviewStatusBus.post(new ReviewStatusChangeEvent(Collections.emptySet(), null)); } } + + /** + * Update the user interface to show or hide rejected artifacts. + * + * @param showRejected Show rejected artifacts? Yes if true; otherwise no. + */ + public void setShowRejected(boolean showRejected) { + this.showRejected = showRejected; + reviewStatusBus.post(new ReviewStatusChangeEvent(Collections.emptySet(), null)); + } private abstract class ReviewStatusAction extends AbstractAction { diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/Bundle.properties b/Core/src/org/sleuthkit/autopsy/directorytree/Bundle.properties index b90711b8d9..10bd0622cb 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/directorytree/Bundle.properties @@ -59,7 +59,7 @@ DirectoryTreeFilterNode.action.collapseAll.text=Collapse All DirectoryTreeFilterNode.action.openFileSrcByAttr.text=Open File Search by Attributes DirectoryTreeFilterNode.action.runIngestMods.text=Run Ingest Modules DirectoryTreeTopComponent.action.viewArtContent.text=View Artifact Content -DirectoryTreeTopComponent.showRejectedCheckBox.text=Show Rejected Results +DirectoryTreeTopComponent.showRejectedCheckBox.text=Show Rejected ExplorerNodeActionVisitor.action.imgDetails.title=Image Details ExplorerNodeActionVisitor.action.extUnallocToSingleFiles=Extract Unallocated Space to Single Files ExplorerNodeActionVisitor.action.fileSystemDetails.title=File System Details @@ -119,10 +119,11 @@ AddExternalViewerRulePanel.browseButton.text=Browse AddExternalViewerRulePanel.exePathTextField.text= AddExternalViewerRulePanel.exePathLabel.text=Path of the program to use for files with this type or extension AddExternalViewerRulePanel.extRadioButton.text=Extension -DirectoryTreeTopComponent.groupByDatasourceCheckBox.text=Group by Data Source +DirectoryTreeTopComponent.groupByDatasourceCheckBox.text=Group Data Source GroupDataSourcesDialog.dataSourceCountLabel.text=jLabel1 GroupDataSourcesDialog.queryLabel.text=Would you like to group by data source for faster loading? GroupDataSourcesDialog.yesButton.text=Yes GroupDataSourcesDialog.noButton.text=No GroupDataSourcesDialog.title=Group by Data Source? -DirectoryTreeTopComponent.showOnlyCurrentUserTagsCheckbox.text=Hide Other User's Tags +DirectoryTreeTopComponent.showOnlyCurrentUserTagsCheckbox.text=Hide Other Tags +DirectoryTreeTopComponent.openViewPreferencesButton.text= diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.form b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.form index 8fa8265e06..bacd1d8903 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.form +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.form @@ -18,44 +18,44 @@ - - - - - - + - - + + + + + + + + + + + + + + - + + - - - - - - - - - - - - - - - - + + + + + + + + + - - + @@ -139,12 +139,36 @@
+ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java index 17cac06732..880ebce710 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/DirectoryTreeTopComponent.java @@ -60,7 +60,9 @@ import org.openide.util.NbBundle.Messages; import org.openide.windows.TopComponent; import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.casemodule.CasePreferences; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; +import org.sleuthkit.autopsy.corecomponents.ViewPreferencesDialog; import org.sleuthkit.autopsy.core.RuntimeProperties; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.corecomponentinterfaces.CoreComponentControl; @@ -111,6 +113,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat private static final Logger LOGGER = Logger.getLogger(DirectoryTreeTopComponent.class.getName()); private AutopsyTreeChildFactory autopsyTreeChildFactory; private Children autopsyTreeChildren; + private Accounts accounts; private static final long DEFAULT_DATASOURCE_GROUPING_THRESHOLD = 5; // Threshold for prompting the user about grouping by data source private static final String GROUPING_THRESHOLD_NAME = "GroupDataSourceThreshold"; private static final String SETTINGS_FILE = "CasePreferences.properties"; //NON-NLS @@ -151,7 +154,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat switch (evt.getKey()) { case UserPreferences.HIDE_KNOWN_FILES_IN_DATA_SRCS_TREE: case UserPreferences.HIDE_SLACK_FILES_IN_DATA_SRCS_TREE: - case UserPreferences.GROUP_ITEMS_IN_TREE_BY_DATASOURCE: + //DLG: case UserPreferences.GROUP_ITEMS_IN_TREE_BY_DATASOURCE: refreshContentTreeSafe(); break; case UserPreferences.SHOW_ONLY_CURRENT_USER_TAGS: @@ -194,6 +197,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat treeView = new BeanTreeView(); backButton = new javax.swing.JButton(); forwardButton = new javax.swing.JButton(); + openViewPreferencesButton = new javax.swing.JButton(); showRejectedCheckBox = new javax.swing.JCheckBox(); groupByDatasourceCheckBox = new javax.swing.JCheckBox(); showOnlyCurrentUserTagsCheckbox = new javax.swing.JCheckBox(); @@ -232,7 +236,22 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat } }); + openViewPreferencesButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/directorytree/view-preferences-24.png"))); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(openViewPreferencesButton, org.openide.util.NbBundle.getMessage(DirectoryTreeTopComponent.class, "DirectoryTreeTopComponent.openViewPreferencesButton.text")); // NOI18N + openViewPreferencesButton.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED)); + openViewPreferencesButton.setPreferredSize(new java.awt.Dimension(30, 30)); + openViewPreferencesButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + openViewPreferencesButtonActionPerformed(evt); + } + }); + org.openide.awt.Mnemonics.setLocalizedText(showRejectedCheckBox, org.openide.util.NbBundle.getMessage(DirectoryTreeTopComponent.class, "DirectoryTreeTopComponent.showRejectedCheckBox.text")); // NOI18N + showRejectedCheckBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + showRejectedCheckBoxActionPerformed(evt); + } + }); org.openide.awt.Mnemonics.setLocalizedText(groupByDatasourceCheckBox, org.openide.util.NbBundle.getMessage(DirectoryTreeTopComponent.class, "DirectoryTreeTopComponent.groupByDatasourceCheckBox.text")); // NOI18N groupByDatasourceCheckBox.addActionListener(new java.awt.event.ActionListener() { @@ -254,36 +273,37 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(treeView) .addGroup(layout.createSequentialGroup() - .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(showOnlyCurrentUserTagsCheckbox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGap(1, 1, 1) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(showRejectedCheckBox) - .addComponent(groupByDatasourceCheckBox)) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addComponent(showOnlyCurrentUserTagsCheckbox) + .addGap(18, 18, 18) + .addComponent(showRejectedCheckBox) + .addGap(18, 18, 18) + .addComponent(groupByDatasourceCheckBox)) + .addGroup(layout.createSequentialGroup() + .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(254, 254, 254) + .addComponent(openViewPreferencesButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() + .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(5, 5, 5) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(showRejectedCheckBox) - .addComponent(showOnlyCurrentUserTagsCheckbox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(groupByDatasourceCheckBox)) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(forwardButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(openViewPreferencesButton, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(9, 9, 9) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(showOnlyCurrentUserTagsCheckbox) + .addComponent(showRejectedCheckBox) + .addComponent(groupByDatasourceCheckBox)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(treeView, javax.swing.GroupLayout.DEFAULT_SIZE, 843, Short.MAX_VALUE) - .addGap(0, 0, 0)) + .addComponent(treeView, javax.swing.GroupLayout.DEFAULT_SIZE, 870, Short.MAX_VALUE)) ); }// //GEN-END:initComponents @@ -337,17 +357,27 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat }//GEN-LAST:event_forwardButtonActionPerformed private void groupByDatasourceCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_groupByDatasourceCheckBoxActionPerformed - UserPreferences.setGroupItemsInTreeByDatasource(this.groupByDatasourceCheckBox.isSelected()); + UserPreferences.setGroupItemsInTreeByDatasource(this.groupByDatasourceCheckBox.isSelected()); //DLG: Remove this checkbox }//GEN-LAST:event_groupByDatasourceCheckBoxActionPerformed private void showOnlyCurrentUserTagsCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showOnlyCurrentUserTagsCheckboxActionPerformed - UserPreferences.setShowOnlyCurrentUserTags(this.showOnlyCurrentUserTagsCheckbox.isSelected()); + UserPreferences.setShowOnlyCurrentUserTags(this.showOnlyCurrentUserTagsCheckbox.isSelected()); //DLG: Remove this checkbox }//GEN-LAST:event_showOnlyCurrentUserTagsCheckboxActionPerformed + private void showRejectedCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showRejectedCheckBoxActionPerformed + //DLG: Remove this checkbox + }//GEN-LAST:event_showRejectedCheckBoxActionPerformed + + private void openViewPreferencesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openViewPreferencesButtonActionPerformed + ViewPreferencesDialog dialog = new ViewPreferencesDialog(); + dialog.display(); + }//GEN-LAST:event_openViewPreferencesButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton backButton; private javax.swing.JButton forwardButton; private javax.swing.JCheckBox groupByDatasourceCheckBox; + private javax.swing.JButton openViewPreferencesButton; private javax.swing.JCheckBox showOnlyCurrentUserTagsCheckbox; private javax.swing.JCheckBox showRejectedCheckBox; private javax.swing.JScrollPane treeView; @@ -410,40 +440,20 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat * @param dataSourceCount */ private void promptForDataSourceGrouping(Case currentCase, int dataSourceCount) { - Path settingsFile = Paths.get(currentCase.getConfigDirectory(), SETTINGS_FILE); //NON-NLS - if (settingsFile.toFile().exists()) { - // Read the setting - try (InputStream inputStream = Files.newInputStream(settingsFile)) { - Properties props = new Properties(); - props.load(inputStream); - if (props.getProperty("groupByDataSource", "false").equals("true")) { - UserPreferences.setGroupItemsInTreeByDatasource(true); - groupByDatasourceCheckBox.setSelected(true); - } - } catch (IOException ex) { - LOGGER.log(Level.SEVERE, "Error reading settings file", ex); - } - } else { + CasePreferences casePreferences = new CasePreferences(currentCase); + + if (casePreferences.getGroupItemsInTreeByDataSource() == null) { GroupDataSourcesDialog dialog = new GroupDataSourcesDialog(dataSourceCount); dialog.display(); if (dialog.groupByDataSourceSelected()) { - UserPreferences.setGroupItemsInTreeByDatasource(true); - groupByDatasourceCheckBox.setSelected(true); + casePreferences.setGroupItemsInTreeByDataSource(true); + refreshContentTreeSafe(); //DLG: Consider an event. + } else { + casePreferences.setGroupItemsInTreeByDataSource(false); } // Save the response - Properties props = new Properties(); - if (dialog.groupByDataSourceSelected()) { - props.setProperty("groupByDataSource", "true"); - } else { - props.setProperty("groupByDataSource", "false"); - } - - try (OutputStream fos = Files.newOutputStream(settingsFile)) { - props.store(fos, ""); //NON-NLS - } catch (IOException ex) { - LOGGER.log(Level.SEVERE, "Error writing settings file", ex); - } + casePreferences.saveToStorage(currentCase); } } @@ -545,7 +555,7 @@ public final class DirectoryTreeTopComponent extends TopComponent implements Dat Children resultsChildren = results.getChildren(); Arrays.stream(resultsChildren.getNodes()).forEach(tree::expandNode); - Accounts accounts = resultsChildren.findChild(Accounts.NAME).getLookup().lookup(Accounts.class); + accounts = resultsChildren.findChild(Accounts.NAME).getLookup().lookup(Accounts.class); if (!Objects.isNull(accounts)) { showRejectedCheckBox.setAction(accounts.newToggleShowRejectedAction()); showRejectedCheckBox.setSelected(false); diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerOptionsPanelController.java index 35523a65dc..bbbac25bdd 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/ExternalViewerOptionsPanelController.java @@ -34,7 +34,7 @@ import org.openide.util.Lookup; iconBase = "org/sleuthkit/autopsy/directorytree/external-viewer-rules-32x32.png", keywords = "#OptionsCategory_Keywords_ExternalViewer", keywordsCategory = "ExternalViewer", - position = 12 + position = 13 ) public final class ExternalViewerOptionsPanelController extends OptionsPanelController { diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/ViewContextAction.java b/Core/src/org/sleuthkit/autopsy/directorytree/ViewContextAction.java index f4da3a3edf..585241c4f8 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/ViewContextAction.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/ViewContextAction.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2017 Basis Technology Corp. + * Copyright 2011-2018 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -35,6 +35,7 @@ import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.util.NbBundle.Messages; import org.sleuthkit.autopsy.casemodule.Case; +import org.sleuthkit.autopsy.casemodule.CasePreferences; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; @@ -138,15 +139,24 @@ public class ViewContextAction extends AbstractAction { */ DirectoryTreeTopComponent treeViewTopComponent = DirectoryTreeTopComponent.findInstance(); ExplorerManager treeViewExplorerMgr = treeViewTopComponent.getExplorerManager(); + Case currentCase; + try { + currentCase = Case.getCurrentCaseThrows(); + } catch (NoCurrentCaseException ex) { + MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_cannotFindNode()); + logger.log(Level.SEVERE, "Failed to locate data source node in tree.", ex); //NON-NLS + return; + } Node parentTreeViewNode; - if (UserPreferences.groupItemsInTreeByDatasource()) { // 'Group by Data Source' view + CasePreferences casePreferences = new CasePreferences(currentCase); + if (Objects.equals(casePreferences.getGroupItemsInTreeByDataSource(), true)) { // 'Group by Data Source' view SleuthkitCase skCase; String dsname; try { // get the objid/name of the datasource of the selected content. - skCase = Case.getCurrentCaseThrows().getSleuthkitCase(); + skCase = currentCase.getSleuthkitCase(); long contentDSObjid = content.getDataSource().getId(); DataSource datasource = skCase.getDataSource(contentDSObjid); dsname = datasource.getName(); @@ -162,7 +172,7 @@ public class ViewContextAction extends AbstractAction { logger.log(Level.SEVERE, "Failed to locate data source node in tree."); //NON-NLS return; } - } catch (NoCurrentCaseException| TskDataException | TskCoreException ex) { + } catch (TskDataException | TskCoreException ex) { MessageNotifyUtil.Message.error(Bundle.ViewContextAction_errorMessage_cannotFindNode()); logger.log(Level.SEVERE, "Failed to locate data source node in tree.", ex); //NON-NLS return; diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/view-preferences-24.png b/Core/src/org/sleuthkit/autopsy/directorytree/view-preferences-24.png new file mode 100755 index 0000000000..b18a37372d Binary files /dev/null and b/Core/src/org/sleuthkit/autopsy/directorytree/view-preferences-24.png differ diff --git a/Core/src/org/sleuthkit/autopsy/images/view-preferences-32.png b/Core/src/org/sleuthkit/autopsy/images/view-preferences-32.png new file mode 100755 index 0000000000..45611a8d65 Binary files /dev/null and b/Core/src/org/sleuthkit/autopsy/images/view-preferences-32.png differ diff --git a/Core/src/org/sleuthkit/autopsy/ingest/IngestOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/ingest/IngestOptionsPanelController.java index 69c88d63c4..056f93d719 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/IngestOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/IngestOptionsPanelController.java @@ -30,7 +30,7 @@ import org.openide.util.Lookup; @OptionsPanelController.TopLevelRegistration( categoryName = "#OptionsCategory_Name_IngestOptions", iconBase = "org/sleuthkit/autopsy/images/file_ingest_filter32x32.png", - position = 2, + position = 3, keywords = "#OptionsCategory_Keywords_IngestOptions", keywordsCategory = "IngestOptions") diff --git a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchOptionsPanelController.java index e15ea5a6e9..042c49ed3b 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/fileextmismatch/FileExtMismatchOptionsPanelController.java @@ -30,7 +30,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; @OptionsPanelController.TopLevelRegistration( categoryName = "#OptionsCategory_Name_FileExtMismatchOptions", iconBase = "org/sleuthkit/autopsy/modules/fileextmismatch/options-icon.png", - position = 8, + position = 9, keywords = "#OptionsCategory_FileExtMismatch", keywordsCategory = "KeywordSearchOptions") public final class FileExtMismatchOptionsPanelController extends OptionsPanelController { diff --git a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdOptionsPanelController.java index 08979c124e..e724a74856 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/filetypeid/FileTypeIdOptionsPanelController.java @@ -31,7 +31,7 @@ import org.openide.util.Lookup; iconBase = "org/sleuthkit/autopsy/modules/filetypeid/user-defined-file-types-settings.png", keywords = "#OptionsCategory_Keywords_FileTypeId", keywordsCategory = "FileTypeId", - position = 9 + position = 10 ) public final class FileTypeIdOptionsPanelController extends OptionsPanelController { diff --git a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDatabaseOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDatabaseOptionsPanelController.java index a4d85eef9b..41de451c67 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDatabaseOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/hashdatabase/HashDatabaseOptionsPanelController.java @@ -30,7 +30,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; @OptionsPanelController.TopLevelRegistration( categoryName = "#OptionsCategory_Name_HashDatabase", iconBase = "org/sleuthkit/autopsy/modules/hashdatabase/options_icon.png", - position = 7, + position = 8, keywords = "#OptionsCategory_Keywords_HashDatabase", keywordsCategory = "HashDatabase", id = "HashDatabase") diff --git a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java index 7087b6c013..6d239ae78d 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java +++ b/Core/src/org/sleuthkit/autopsy/modules/interestingitems/InterestingItemDefsOptionsPanelController.java @@ -32,7 +32,7 @@ import org.openide.util.Lookup; iconBase = "org/sleuthkit/autopsy/images/interesting_item_32x32.png", keywords = "#OptionsCategory_Keywords_InterestingItemDefinitions", keywordsCategory = "InterestingItemDefinitions", - position = 10 + position = 11 ) public final class InterestingItemDefsOptionsPanelController extends OptionsPanelController { diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/configuration/AutoIngestSettingsPanelController.java b/Experimental/src/org/sleuthkit/autopsy/experimental/configuration/AutoIngestSettingsPanelController.java index 50e2e18e4c..c616403ce6 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/configuration/AutoIngestSettingsPanelController.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/configuration/AutoIngestSettingsPanelController.java @@ -31,7 +31,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; @OptionsPanelController.TopLevelRegistration(categoryName = "#OptionsCategory_Name_Auto_Ingest", iconBase = "org/sleuthkit/autopsy/experimental/images/autoIngest32.png", - position = 4, + position = 5, keywords = "#OptionsCategory_Keywords_Auto_Ingest_Settings", keywordsCategory = "Auto Ingest") public final class AutoIngestSettingsPanelController extends OptionsPanelController { diff --git a/Experimental/src/org/sleuthkit/autopsy/experimental/configuration/SharedConfiguration.java b/Experimental/src/org/sleuthkit/autopsy/experimental/configuration/SharedConfiguration.java index 106e521142..f9dba08034 100644 --- a/Experimental/src/org/sleuthkit/autopsy/experimental/configuration/SharedConfiguration.java +++ b/Experimental/src/org/sleuthkit/autopsy/experimental/configuration/SharedConfiguration.java @@ -102,7 +102,6 @@ public class SharedConfiguration { private boolean hideKnownFilesInViews; private boolean hideSlackFilesInDataSource; private boolean hideSlackFilesInViews; - private boolean groupDatasources; private boolean keepPreferredViewer; /** @@ -353,7 +352,6 @@ public class SharedConfiguration { fileIngestThreads = UserPreferences.numberOfFileIngestThreads(); hideSlackFilesInDataSource = UserPreferences.hideSlackFilesInDataSourcesTree(); hideSlackFilesInViews = UserPreferences.hideSlackFilesInViewsTree(); - groupDatasources = UserPreferences.groupItemsInTreeByDatasource(); } /** @@ -369,8 +367,7 @@ public class SharedConfiguration { UserPreferences.setKeepPreferredContentViewer(keepPreferredViewer); UserPreferences.setNumberOfFileIngestThreads(fileIngestThreads); UserPreferences.setHideSlackFilesInDataSourcesTree(hideSlackFilesInDataSource); - UserPreferences.setHideSlackFilesInViewsTree(hideSlackFilesInViews); - UserPreferences.setGroupItemsInTreeByDatasource(groupDatasources); + UserPreferences.setHideSlackFilesInViewsTree(hideSlackFilesInViews); } /** diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryOptionsPanelController.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryOptionsPanelController.java index 0ffcaf194c..af91181287 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryOptionsPanelController.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryOptionsPanelController.java @@ -34,7 +34,7 @@ import org.openide.util.Lookup; iconBase = "org/sleuthkit/autopsy/imagegallery/images/btn_icon_image_gallery_32.png", keywords = "#OptionsCategory_Keywords_Options", keywordsCategory = "Options", - position = 14 + position = 15 ) @org.openide.util.NbBundle.Messages({"OptionsCategory_Name_Options=Image / Video Gallery", "OptionsCategory_Keywords_Options=image video gallery category "}) public final class ImageGalleryOptionsPanelController extends OptionsPanelController { diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java index 91f5b504d4..40c7c2d938 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchOptionsPanelController.java @@ -30,7 +30,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; @OptionsPanelController.TopLevelRegistration( categoryName = "#OptionsCategory_Name_KeywordSearchOptions", iconBase = "org/sleuthkit/autopsy/keywordsearch/options-icon.png", - position = 5, + position = 6, keywords = "#OptionsCategory_Keywords_KeywordSearchOptions", keywordsCategory = "KeywordSearchOptions") public final class KeywordSearchOptionsPanelController extends OptionsPanelController {