/** * Copyright (c) 20015 by Brainwy Software Ltda. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.shared_ui.search; import java.util.HashSet; import java.util.Set; import org.eclipse.search.ui.ISearchQuery; import org.python.pydev.shared_core.string.StringUtils; public abstract class AbstractSearchIndexQuery implements ISearchQuery, ICustomSearchQuery { public final String text; protected ScopeAndData scopeAndData; private boolean caseSensitive = true; private boolean wholeWord = true; public AbstractSearchIndexQuery(String text) { this.text = text; this.scopeAndData = new ScopeAndData(SearchIndexData.SCOPE_WORKSPACE, ""); } public AbstractSearchIndexQuery(SearchIndexData data) { this.text = data.textPattern; this.caseSensitive = data.isCaseSensitive; this.wholeWord = data.isWholeWord; this.scopeAndData = new ScopeAndData(data.scope, data.scopeData); } public boolean getIgnoreCase() { return !this.caseSensitive; } @Override public String getSearchString() { return this.text; } @Override public boolean isCaseSensitive() { return this.caseSensitive; } @Override public boolean isWholeWord() { return this.wholeWord; } /** * Used for replace later on (we can't do a regexp replace because we don't have a pattern for ${0}, ${1}, ...) */ @Override public boolean isRegexSearch() { return false; } public String getResultLabel(int nMatches) { String searchString = text; if (nMatches == 1) { return StringUtils.format("%s - 1 match", searchString); } return StringUtils.format("%s - %s matches", searchString, nMatches); } @Override public boolean canRerun() { return true; } @Override public boolean canRunInBackground() { return true; } public StringMatcherWithIndexSemantics createStringMatcher() { boolean ignoreCase = getIgnoreCase(); StringMatcherWithIndexSemantics stringMatcher = new StringMatcherWithIndexSemantics( text, ignoreCase, wholeWord); return stringMatcher; } protected Set<String> makeTextFieldPatternsToSearchFromText() { Set<String> split = new HashSet<>(); for (String s : StringUtils.splitForIndexMatching(this.text)) { // We need to search in lowercase (we only index case-insensitive). String lowerCase = s.toLowerCase(); if (!this.isWholeWord()) { if (!lowerCase.startsWith("*")) { lowerCase = '*' + lowerCase; } if (!lowerCase.endsWith("*")) { lowerCase = lowerCase + '*'; } } split.add(lowerCase); } return split; } }