diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java index 5df888052b..f5eed043fa 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/ImageNode.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2012-2019 Basis Technology Corp. + * Copyright 2012-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -110,7 +110,7 @@ public class ImageNode extends AbstractContentNode { actionsList.add(a); } actionsList.addAll(ExplorerNodeActionVisitor.getActions(content)); - actionsList.add(new FileSearchAction(Bundle.ImageNode_getActions_openFileSearchByAttr_text())); + actionsList.add(new FileSearchAction(Bundle.ImageNode_getActions_openFileSearchByAttr_text(), content.getId())); actionsList.add(new ViewSummaryInformationAction(content.getId())); actionsList.add(new RunIngestModulesAction(Collections.singletonList(content))); actionsList.add(new NewWindowViewAction(NbBundle.getMessage(this.getClass(), "ImageNode.getActions.viewInNewWin.text"), this)); diff --git a/Core/src/org/sleuthkit/autopsy/datamodel/SpecialDirectoryNode.java b/Core/src/org/sleuthkit/autopsy/datamodel/SpecialDirectoryNode.java index a3c6691ba2..244f9ece70 100644 --- a/Core/src/org/sleuthkit/autopsy/datamodel/SpecialDirectoryNode.java +++ b/Core/src/org/sleuthkit/autopsy/datamodel/SpecialDirectoryNode.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2017-2019 Basis Technology Corp. + * Copyright 2017-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -65,7 +65,7 @@ public abstract class SpecialDirectoryNode extends AbstractAbstractFileNodesingletonList(content))); diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/FileSearchAction.java b/Core/src/org/sleuthkit/autopsy/directorytree/FileSearchAction.java index 9ec86b7900..a3f64f1e13 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/FileSearchAction.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/FileSearchAction.java @@ -1,15 +1,15 @@ /* * Autopsy Forensic Browser - * - * Copyright 2011 Basis Technology Corp. + * + * Copyright 2011-2021 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. @@ -28,14 +28,26 @@ import org.openide.util.Lookup; */ public class FileSearchAction extends AbstractAction { + private final Long dataSourceId; + + public FileSearchAction(String title, long dataSourceID) { + super(title); + dataSourceId = dataSourceID; + } + public FileSearchAction(String title) { super(title); + dataSourceId = null; } @Override public void actionPerformed(ActionEvent e) { FileSearchProvider searcher = Lookup.getDefault().lookup(FileSearchProvider.class); - searcher.showDialog(); + if (dataSourceId == null) { + searcher.showDialog(); + } else { + searcher.showDialog(dataSourceId); + } } } diff --git a/Core/src/org/sleuthkit/autopsy/directorytree/FileSearchProvider.java b/Core/src/org/sleuthkit/autopsy/directorytree/FileSearchProvider.java index 991126e2c5..523a4a69bd 100644 --- a/Core/src/org/sleuthkit/autopsy/directorytree/FileSearchProvider.java +++ b/Core/src/org/sleuthkit/autopsy/directorytree/FileSearchProvider.java @@ -1,15 +1,15 @@ /* * Autopsy Forensic Browser - * - * Copyright 2011 Basis Technology Corp. + * + * Copyright 2011-2021 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. @@ -23,5 +23,8 @@ package org.sleuthkit.autopsy.directorytree; */ public interface FileSearchProvider { + public void showDialog(Long dataSourceID); + + @Deprecated public void showDialog(); } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DataSourceFilter.java b/Core/src/org/sleuthkit/autopsy/filesearch/DataSourceFilter.java index fd0a232dcf..1d0063a8ff 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DataSourceFilter.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DataSourceFilter.java @@ -48,6 +48,15 @@ class DataSourceFilter extends AbstractFileSearchFilter { return this.getComponent().isSelected(); } + /** + * Set the data source filter to select the specified data source initially. + * + * @param dataSourceId - The data source to select. + */ + void setSelectedDataSource(long dataSourceId) { + this.getComponent().setDataSourceSelected(dataSourceId); + } + /** * Reset the data source filter to be up to date with the current case. */ diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/DataSourcePanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/DataSourcePanel.java index 7b19d4d5c8..6fc610b224 100755 --- a/Core/src/org/sleuthkit/autopsy/filesearch/DataSourcePanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/DataSourcePanel.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2018 Basis Technology Corp. + * Copyright 2018-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -152,6 +152,19 @@ public class DataSourcePanel extends javax.swing.JPanel { this.dataSourceNoteLabel.setEnabled(enabled); } + /** + * Set the data source initially selected in this filter. + * + * @param dataSourceId - The object ID of the data source which will be + * selected. + */ + void setDataSourceSelected(long dataSourceId) { + this.dataSourceCheckBox.setSelected(true); + setComponentsEnabled(); + String dataSourceName = dataSourceMap.get(dataSourceId); + dataSourceList.setSelectedValue(dataSourceName, true); + } + /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchAction.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchAction.java index fb78ee8e74..11d8f94561 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchAction.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchAction.java @@ -32,6 +32,7 @@ final class FileSearchAction extends CallableSystemAction implements FileSearchP private static final long serialVersionUID = 1L; private static FileSearchAction instance = null; private static FileSearchDialog searchDialog; + private static Long selectedDataSourceId; FileSearchAction() { super(); @@ -39,7 +40,7 @@ final class FileSearchAction extends CallableSystemAction implements FileSearchP Case.addEventTypeSubscriber(EnumSet.of(Case.Events.CURRENT_CASE), (PropertyChangeEvent evt) -> { if (evt.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) { setEnabled(evt.getNewValue() != null); - if (searchDialog != null && evt.getNewValue() != null){ + if (searchDialog != null && evt.getNewValue() != null) { searchDialog.resetCaseDependentFilters(); } } @@ -57,7 +58,9 @@ final class FileSearchAction extends CallableSystemAction implements FileSearchP public void actionPerformed(ActionEvent e) { if (searchDialog == null) { searchDialog = new FileSearchDialog(); - } + } + //Preserve whatever the previously selected data source was + selectedDataSourceId = null; searchDialog.setVisible(true); } @@ -66,6 +69,8 @@ final class FileSearchAction extends CallableSystemAction implements FileSearchP if (searchDialog == null) { searchDialog = new FileSearchDialog(); } + // + searchDialog.setSelectedDataSourceFilter(selectedDataSourceId); searchDialog.setVisible(true); } @@ -85,7 +90,15 @@ final class FileSearchAction extends CallableSystemAction implements FileSearchP } @Override - public void showDialog() { + public void showDialog(Long dataSourceId) { + selectedDataSourceId = dataSourceId; performAction(); + + } + + @Override + @Deprecated + public void showDialog() { + showDialog(null); } } diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchDialog.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchDialog.java index 01217f7008..a98e531700 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchDialog.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchDialog.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2018 Basis Technology Corp. + * Copyright 2011-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,6 +29,8 @@ import org.openide.windows.WindowManager; @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives final class FileSearchDialog extends javax.swing.JDialog { + private static final long serialVersionUID = 1L; + /** * Creates new form FileSearchDialog */ @@ -48,6 +50,15 @@ final class FileSearchDialog extends javax.swing.JDialog { }); } + /** + * Set the data source filter to select the specified data source initially. + * + * @param dataSourceId - The data source to select. + */ + void setSelectedDataSourceFilter(long dataSourceId) { + fileSearchPanel1.setDataSourceFilter(dataSourceId); + } + /** * Reset the filters which are populated with options based on the contents * of the current case. diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java index 4775041b1f..14b1578076 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/FileSearchPanel.java @@ -57,13 +57,13 @@ import org.sleuthkit.datamodel.TskCoreException; */ @SuppressWarnings("PMD.SingularField") // UI widgets cause lots of false positives class FileSearchPanel extends javax.swing.JPanel { - + private static final Logger logger = Logger.getLogger(FileSearchPanel.class.getName()); private static final long serialVersionUID = 1L; private final List filters = new ArrayList<>(); private static int resultWindowCount = 0; //keep track of result windows so they get unique names - private static MimeTypeFilter mimeTypeFilter = new MimeTypeFilter(); - private static DataSourceFilter dataSourceFilter = new DataSourceFilter(); + private static final MimeTypeFilter mimeTypeFilter = new MimeTypeFilter(); + private static final DataSourceFilter dataSourceFilter = new DataSourceFilter(); private static final String EMPTY_WHERE_CLAUSE = NbBundle.getMessage(DateSearchFilter.class, "FileSearchPanel.emptyWhereClause.text"); private static SwingWorker searchWorker = null; @@ -106,7 +106,6 @@ class FileSearchPanel extends javax.swing.JPanel { DateSearchFilter dateFilter = new DateSearchFilter(); KnownStatusSearchFilter knowStatusFilter = new KnownStatusSearchFilter(); HashSearchFilter hashFilter = new HashSearchFilter(); - panel2.add(new FilterArea(NbBundle.getMessage(this.getClass(), "FileSearchPanel.filterTitle.name"), nameFilter)); panel3.add(new FilterArea(NbBundle.getMessage(this.getClass(), "FileSearchPanel.filterTitle.metadata"), sizeFilter)); @@ -149,6 +148,15 @@ class FileSearchPanel extends javax.swing.JPanel { searchButton.setEnabled(isValidSearch()); } + /** + * Set the data source filter to select the specified data source initially. + * + * @param dataSourceId - The data source to select. + */ + void setDataSourceFilter(long dataSourceId) { + dataSourceFilter.setSelectedDataSource(dataSourceId); + } + /** * @return true if any of the filters in the panel are enabled (checked) */ @@ -334,7 +342,7 @@ class FileSearchPanel extends javax.swing.JPanel { return enabledFilters; } - + /** * Reset the filters which are populated with options based on the contents * of the current case. diff --git a/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.java b/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.java index 676ef4188d..3128f7982f 100644 --- a/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.java +++ b/Core/src/org/sleuthkit/autopsy/filesearch/MimeTypePanel.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2018 Basis Technology Corp. + * Copyright 2011-2021 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License");