19 package org.sleuthkit.autopsy.keywordsearch;
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.LinkedHashMap;
24 import java.util.List;
26 import java.util.logging.Level;
27 import org.openide.nodes.AbstractNode;
28 import org.openide.nodes.Children;
29 import org.openide.nodes.Node;
30 import org.openide.util.NbBundle;
40 class KeywordSearchQueryDelegator {
42 private List<KeywordList> keywordLists;
43 private List<KeywordSearchQuery> queryDelegates;
44 private static int resultWindowCount = 0;
45 private static Logger logger = Logger.
getLogger(KeywordSearchQueryDelegator.class.getName());
47 public KeywordSearchQueryDelegator(List<KeywordList> keywordLists) {
48 this.keywordLists = keywordLists;
54 queryDelegates =
new ArrayList<>();
56 for (KeywordList keywordList : keywordLists) {
57 for (Keyword keyword : keywordList.getKeywords()) {
58 KeywordSearchQuery query;
59 if (keyword.searchTermIsLiteral()) {
61 if (keyword.searchTermIsWholeWord()) {
62 query =
new LuceneQuery(keywordList, keyword);
66 query =
new TermsComponentQuery(keywordList, keyword);
68 query.setSubstringQuery();
72 query =
new TermsComponentQuery(keywordList, keyword);
74 queryDelegates.add(query);
83 public void execute() {
84 Collection<QueryRequest> queryRequests =
new ArrayList<>();
86 StringBuilder queryConcat =
new StringBuilder();
87 for (KeywordSearchQuery q : queryDelegates) {
88 Map<String, Object> kvs =
new LinkedHashMap<>();
89 final String queryStr = q.getQueryString();
90 queryConcat.append(queryStr).append(
" ");
91 queryRequests.add(
new QueryRequest(kvs, ++queryID, q));
94 String queryConcatStr = queryConcat.toString();
95 final int queryConcatStrLen = queryConcatStr.length();
96 final String queryStrShort = queryConcatStrLen > 15 ? queryConcatStr.substring(0, 14) +
"..." : queryConcatStr;
97 final String windowTitle = NbBundle.getMessage(this.getClass(),
"KeywordSearchQueryManager.execute.exeWinTitle", ++resultWindowCount, queryStrShort);
98 DataResultTopComponent searchResultWin = DataResultTopComponent.createInstance(windowTitle);
101 if (queryRequests.size() > 0) {
102 Children childNodes =
103 Children.create(
new KeywordSearchResultFactory(queryRequests, searchResultWin),
true);
105 rootNode =
new AbstractNode(childNodes);
107 rootNode = Node.EMPTY;
110 final String pathText = NbBundle.getMessage(this.getClass(),
"KeywordSearchQueryManager.pathText.text");
112 DataResultTopComponent.initInstance(pathText,
new TableFilterNode(rootNode,
true, KeywordSearch.class.getName()),
113 queryRequests.size(), searchResultWin);
115 searchResultWin.requestActive();
123 public boolean validate() {
124 boolean allValid =
true;
125 for (KeywordSearchQuery tcq : queryDelegates) {
126 if (!tcq.validate()) {
127 logger.log(Level.WARNING,
"Query has invalid syntax: {0}", tcq.getQueryString());
synchronized static Logger getLogger(String name)