19 package org.sleuthkit.autopsy.keywordsearch;
21 import java.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.HashMap;
27 import java.util.List;
31 import org.openide.util.NbBundle;
33 import javax.swing.DefaultListModel;
40 @SuppressWarnings(
"PMD.SingularField")
41 abstract class AdHocSearchPanel extends javax.swing.JPanel {
43 private final String keywordSearchErrorDialogHeader =
org.openide.util.NbBundle.getMessage(this.getClass(),
"AbstractKeywordSearchPerformer.search.dialogErrorHeader");
44 protected int filesIndexed;
45 private final Map<Long, String> dataSourceMap =
new HashMap<>();
46 private final List<String> toolTipList =
new ArrayList<>();
47 private List<DataSource> dataSources =
new ArrayList<>();
48 private final DefaultListModel<String> dataSourceListModel =
new DefaultListModel<>();
54 private void initListeners() {
55 KeywordSearch.addNumIndexedFilesChangeListener(
56 new PropertyChangeListener() {
58 public void propertyChange(PropertyChangeEvent evt) {
59 String changed = evt.getPropertyName();
60 Object newValue = evt.getNewValue();
62 if (changed.equals(KeywordSearch.NUM_FILES_CHANGE_EVT)) {
63 int newFilesIndexed = ((Integer) newValue);
64 filesIndexed = newFilesIndexed;
65 postFilesIndexedChange();
74 protected abstract void postFilesIndexedChange();
81 abstract List<KeywordList> getKeywordLists();
88 abstract Set<Long> getDataSourcesSelected();
95 public void setFilesIndexed(
int filesIndexed) {
96 this.filesIndexed = filesIndexed;
103 public void search() {
104 boolean isIngestRunning = IngestManager.getInstance().isIngestRunning();
106 if (filesIndexed == 0) {
108 filesIndexed = KeywordSearch.getServer().queryNumIndexedFiles();
109 }
catch (KeywordSearchModuleException | NoOpenCoreException ignored) {
112 if (filesIndexed == 0) {
113 if (isIngestRunning) {
114 KeywordSearchUtil.displayDialog(keywordSearchErrorDialogHeader, NbBundle.getMessage(
this.getClass(),
115 "AbstractKeywordSearchPerformer.search.noFilesInIdxMsg",
116 KeywordSearchSettings.getUpdateFrequency().getTime()), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
118 KeywordSearchUtil.displayDialog(keywordSearchErrorDialogHeader, NbBundle.getMessage(
this.getClass(),
119 "AbstractKeywordSearchPerformer.search.noFilesIdxdMsg"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
125 if (isIngestRunning) {
126 if (KeywordSearchUtil.displayConfirmDialog(
org.openide.util.NbBundle.getMessage(
this.getClass(),
"AbstractKeywordSearchPerformer.search.searchIngestInProgressTitle"),
127 NbBundle.getMessage(
this.getClass(),
"AbstractKeywordSearchPerformer.search.ingestInProgressBody"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN) ==
false) {
132 final List<KeywordList> keywordLists = getKeywordLists();
133 if (keywordLists.isEmpty()) {
134 KeywordSearchUtil.displayDialog(keywordSearchErrorDialogHeader, NbBundle.getMessage(
this.getClass(),
135 "AbstractKeywordSearchPerformer.search.emptyKeywordErrorBody"),
136 KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
140 AdHocSearchDelegator man =
new AdHocSearchDelegator(keywordLists, getDataSourcesSelected());
141 if (man.validate()) {
144 KeywordSearchUtil.displayDialog(keywordSearchErrorDialogHeader, NbBundle.getMessage(
this.getClass(),
145 "AbstractKeywordSearchPerformer.search.invalidSyntaxHeader"), KeywordSearchUtil.DIALOG_MESSAGE_TYPE.ERROR);
154 synchronized List<String> getDataSourceArray() {
155 List<String> dsList =
new ArrayList<>();
157 Collections.sort(this.dataSources, (DataSource ds1, DataSource ds2) -> ds1.getName().compareTo(ds2.getName()));
158 for (DataSource ds : dataSources) {
159 String dsName = ds.getName();
160 File dataSourceFullName =
new File(dsName);
161 String displayName = dataSourceFullName.getName();
162 dataSourceMap.put(ds.getId(), displayName);
163 toolTipList.add(dsName);
164 dsList.add(displayName);
173 synchronized void setDataSources(List<DataSource> dataSources) {
174 this.dataSources = dataSources;
183 Map<Long, String> getDataSourceMap() {
184 return dataSourceMap;
191 List<String> getDataSourceToolTipList() {
199 final DefaultListModel<String> getDataSourceListModel() {
200 return dataSourceListModel;