add --shared
[pylucene.git] / lucene-java-3.4.0 / lucene / contrib / queryparser / src / java / org / apache / lucene / queryParser / standard / processors / LowercaseExpandedTermsQueryNodeProcessor.java
1 package org.apache.lucene.queryParser.standard.processors;
2
3 /**
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.
7  * The ASF licenses this file to You under the Apache License, Version 2.0
8  * (the "License"); you may not use this file except in compliance with
9  * the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 import java.util.List;
21
22 import org.apache.lucene.queryParser.core.QueryNodeException;
23 import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
24 import org.apache.lucene.queryParser.core.nodes.FieldQueryNode;
25 import org.apache.lucene.queryParser.core.nodes.FuzzyQueryNode;
26 import org.apache.lucene.queryParser.core.nodes.ParametricQueryNode;
27 import org.apache.lucene.queryParser.core.nodes.QueryNode;
28 import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl;
29 import org.apache.lucene.queryParser.core.util.UnescapedCharSequence;
30 import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
31 import org.apache.lucene.queryParser.standard.nodes.WildcardQueryNode;
32
33 /**
34  * This processor verifies if 
35  * {@link ConfigurationKeys#LOWERCASE_EXPANDED_TERMS} is defined in the
36  * {@link QueryConfigHandler}. If it is and the expanded terms should be
37  * lower-cased, it looks for every {@link WildcardQueryNode},
38  * {@link FuzzyQueryNode} and {@link ParametricQueryNode} and lower-case its
39  * term. <br/>
40  * 
41  * @see ConfigurationKeys#LOWERCASE_EXPANDED_TERMS
42  */
43 public class LowercaseExpandedTermsQueryNodeProcessor extends
44     QueryNodeProcessorImpl {
45
46   public LowercaseExpandedTermsQueryNodeProcessor() {
47     // empty constructor
48   }
49
50   @Override
51   public QueryNode process(QueryNode queryTree) throws QueryNodeException {
52     Boolean lowercaseExpandedTerms = getQueryConfigHandler().get(ConfigurationKeys.LOWERCASE_EXPANDED_TERMS);
53
54     if (lowercaseExpandedTerms != null && lowercaseExpandedTerms) {
55       return super.process(queryTree);
56     }
57
58     return queryTree;
59
60   }
61
62   @Override
63   protected QueryNode postProcessNode(QueryNode node) throws QueryNodeException {
64
65     if (node instanceof WildcardQueryNode || node instanceof FuzzyQueryNode
66         || node instanceof ParametricQueryNode) {
67
68       FieldQueryNode fieldNode = (FieldQueryNode) node;
69       fieldNode.setText(UnescapedCharSequence.toLowerCase(fieldNode.getText()));
70     }
71
72     return node;
73
74   }
75
76   @Override
77   protected QueryNode preProcessNode(QueryNode node) throws QueryNodeException {
78
79     return node;
80
81   }
82
83   @Override
84   protected List<QueryNode> setChildrenOrder(List<QueryNode> children)
85       throws QueryNodeException {
86
87     return children;
88
89   }
90
91 }