/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kie.workbench.common.services.refactoring.backend.server.query.builder; import org.apache.lucene.index.Term; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.RegexpQuery; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.util.automaton.RegExp; import org.kie.workbench.common.services.refactoring.model.index.terms.valueterms.ValueIndexTerm; public abstract class AbstractQueryBuilder { public Query getQuery( ValueIndexTerm valueTerm ) { final String text = getText(valueTerm); Term term = new Term( valueTerm.getTerm(), text ); Query termQuery; switch(valueTerm.getSearchType()) { case PREFIX: termQuery = new PrefixQuery(term); break; case WILDCARD: termQuery = new WildcardQuery(term); break; case REGEXP: termQuery = new RegexpQuery(term, RegExp.NONE); // NONE until there's a specific reason to use extend regex syntax break; case NORMAL: termQuery = new TermQuery(term); break; default: throw new UnsupportedOperationException(ValueIndexTerm.TermSearchType.class.getSimpleName() + " value " + valueTerm.getSearchType().toString() + " is unsupported!"); } return termQuery; } /** * The following are all special characters in lucene queries: </br> * <code>+ - && || ! ( ) { } [ ] ^ " ~ * ? : \</code> * </p> * However, only <code>-</code> is something that would be used in a name. * * @param term * @return */ private String getText(ValueIndexTerm term) { return term.getValue().toLowerCase(); } }