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)