package org.jabref.logic.search.rules.describer; import org.jabref.model.search.rules.ContainBasedSearchRule; import org.jabref.model.search.rules.GrammarBasedSearchRule; import org.jabref.model.search.rules.RegexBasedSearchRule; import org.jabref.model.search.rules.SearchRule; public class SearchDescribers { private SearchDescribers() { } /** * Get the search describer for a given search rule and a given search query. * * @param searchRule the rule that encodes the search logic * @param query the search query * @return the search describer to turn the search into something human understandable */ public static SearchDescriber getSearchDescriberFor(SearchRule searchRule, String query) { if (searchRule instanceof GrammarBasedSearchRule) { GrammarBasedSearchRule grammarBasedSearchRule = (GrammarBasedSearchRule) searchRule; return new GrammarBasedSearchRuleDescriber(grammarBasedSearchRule.isCaseSensitiveSearch(), grammarBasedSearchRule.isRegExpSearch(), grammarBasedSearchRule.getTree()); } else if (searchRule instanceof ContainBasedSearchRule) { ContainBasedSearchRule containBasedSearchRule = (ContainBasedSearchRule) searchRule; return new ContainsAndRegexBasedSearchRuleDescriber(containBasedSearchRule.isCaseSensitive(), false, query); } else if (searchRule instanceof RegexBasedSearchRule) { RegexBasedSearchRule regexBasedSearchRule = (RegexBasedSearchRule) searchRule; return new ContainsAndRegexBasedSearchRuleDescriber(regexBasedSearchRule.isCaseSensitive(), true, query); } else { throw new IllegalStateException("Cannot find a describer for searchRule " + searchRule + " and query " + query); } } }