X-Git-Url: https://git.mdrn.pl/pylucene.git/blobdiff_plain/a2e61f0c04805cfcb8706176758d1283c7e3a55c..aaeed5504b982cf3545252ab528713250aa33eed:/lucene-java-3.5.0/lucene/contrib/queryparser/src/java/org/apache/lucene/queryParser/core/QueryParserHelper.java diff --git a/lucene-java-3.5.0/lucene/contrib/queryparser/src/java/org/apache/lucene/queryParser/core/QueryParserHelper.java b/lucene-java-3.5.0/lucene/contrib/queryparser/src/java/org/apache/lucene/queryParser/core/QueryParserHelper.java new file mode 100644 index 0000000..626d8a5 --- /dev/null +++ b/lucene-java-3.5.0/lucene/contrib/queryparser/src/java/org/apache/lucene/queryParser/core/QueryParserHelper.java @@ -0,0 +1,261 @@ +package org.apache.lucene.queryParser.core; + +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +import org.apache.lucene.queryParser.core.builders.QueryBuilder; +import org.apache.lucene.queryParser.core.config.QueryConfigHandler; +import org.apache.lucene.queryParser.core.nodes.QueryNode; +import org.apache.lucene.queryParser.core.parser.SyntaxParser; +import org.apache.lucene.queryParser.core.processors.QueryNodeProcessor; + +/** + *

+ * This class is a helper for the query parser framework, it does all the three + * query parser phrases at once: text parsing, query processing and query + * building. + *

+ *

+ * It contains methods that allows the user to change the implementation used on + * the three phases. + *

+ * + * @see QueryNodeProcessor + * @see SyntaxParser + * @see QueryBuilder + * @see QueryConfigHandler + */ +public class QueryParserHelper { + + private QueryNodeProcessor processor; + + private SyntaxParser syntaxParser; + + private QueryBuilder builder; + + private QueryConfigHandler config; + + /** + * Creates a query parser helper object using the specified configuration, + * text parser, processor and builder. + * + * @param queryConfigHandler + * the query configuration handler that will be initially set to this + * helper + * @param syntaxParser + * the text parser that will be initially set to this helper + * @param processor + * the query processor that will be initially set to this helper + * @param builder + * the query builder that will be initially set to this helper + * + * @see QueryNodeProcessor + * @see SyntaxParser + * @see QueryBuilder + * @see QueryConfigHandler + */ + public QueryParserHelper(QueryConfigHandler queryConfigHandler, SyntaxParser syntaxParser, QueryNodeProcessor processor, + QueryBuilder builder) { + this.syntaxParser = syntaxParser; + this.config = queryConfigHandler; + this.processor = processor; + this.builder = builder; + + if (processor != null) { + processor.setQueryConfigHandler(queryConfigHandler); + } + + } + + /** + * Returns the processor object used to process the query node tree, it + * returns null if no processor is used. + * + * @return the actual processor used to process the query node tree, + * null if no processor is used + * + * @see QueryNodeProcessor + * @see #setQueryNodeProcessor(QueryNodeProcessor) + */ + public QueryNodeProcessor getQueryNodeProcessor() { + return processor; + } + + /** + * Sets the processor that will be used to process the query node tree. If + * there is any {@link QueryConfigHandler} returned by + * {@link #getQueryConfigHandler()}, it will be set on the processor. The + * argument can be null, which means that no processor will be + * used to process the query node tree. + * + * @param processor + * the processor that will be used to process the query node tree, + * this argument can be null + * + * @see #getQueryNodeProcessor() + * @see QueryNodeProcessor + */ + public void setQueryNodeProcessor(QueryNodeProcessor processor) { + this.processor = processor; + this.processor.setQueryConfigHandler(getQueryConfigHandler()); + + } + + /** + * Sets the text parser that will be used to parse the query string, it cannot + * be null. + * + * @param syntaxParser + * the text parser that will be used to parse the query string + * + * @see #getSyntaxParser() + * @see SyntaxParser + */ + public void setSyntaxParser(SyntaxParser syntaxParser) { + + if (syntaxParser == null) { + throw new IllegalArgumentException("textParser should not be null!"); + } + + this.syntaxParser = syntaxParser; + + } + + /** + * The query builder that will be used to build an object from the query node + * tree. It cannot be null. + * + * @param queryBuilder + * the query builder used to build something from the query node tree + * + * @see #getQueryBuilder() + * @see QueryBuilder + */ + public void setQueryBuilder(QueryBuilder queryBuilder) { + + if (queryBuilder == null) { + throw new IllegalArgumentException("queryBuilder should not be null!"); + } + + this.builder = queryBuilder; + + } + + /** + * Returns the query configuration handler, which is used during the query + * node tree processing. It can be null. + * + * @return the query configuration handler used on the query processing, + * null if not query configuration handler is defined + * + * @see QueryConfigHandler + * @see #setQueryConfigHandler(QueryConfigHandler) + */ + public QueryConfigHandler getQueryConfigHandler() { + return config; + } + + /** + * Returns the query builder used to build a object from the query node tree. + * The object produced by this builder is returned by + * {@link #parse(String, String)}. + * + * @return the query builder + * + * @see #setQueryBuilder(QueryBuilder) + * @see QueryBuilder + */ + public QueryBuilder getQueryBuilder() { + return this.builder; + } + + /** + * Returns the text parser used to build a query node tree from a query + * string. The default text parser instance returned by this method is a + * {@link SyntaxParser}. + * + * @return the text parse used to build query node trees. + * + * @see SyntaxParser + * @see #setSyntaxParser(SyntaxParser) + */ + public SyntaxParser getSyntaxParser() { + return this.syntaxParser; + } + + /** + * Sets the query configuration handler that will be used during query + * processing. It can be null. It's also set to the processor + * returned by {@link #getQueryNodeProcessor()}. + * + * @param config + * the query configuration handler used during query processing, it + * can be null + * + * @see #getQueryConfigHandler() + * @see QueryConfigHandler + */ + public void setQueryConfigHandler(QueryConfigHandler config) { + this.config = config; + QueryNodeProcessor processor = getQueryNodeProcessor(); + + if (processor != null) { + processor.setQueryConfigHandler(config); + } + + } + + /** + * Parses a query string to an object, usually some query object.
+ *
+ * In this method the three phases are executed:
+ *
+ *      1st - the query string is parsed using the + * text parser returned by {@link #getSyntaxParser()}, the result is a query + * node tree
+ *
+ *      2nd - the query node tree is processed by the + * processor returned by {@link #getQueryNodeProcessor()}
+ *
+ *      3th - a object is built from the query node + * tree using the builder returned by {@link #getQueryBuilder()} + * + * @param query + * the query string + * @param defaultField + * the default field used by the text parser + * + * @return the object built from the query + * + * @throws QueryNodeException + * if something wrong happens along the three phases + */ + public Object parse(String query, String defaultField) + throws QueryNodeException { + QueryNode queryTree = getSyntaxParser().parse(query, defaultField); + + QueryNodeProcessor processor = getQueryNodeProcessor(); + + if (processor != null) { + queryTree = processor.process(queryTree); + } + + return getQueryBuilder().build(queryTree); + + } + +}