Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/FieldQueryNode.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/FieldQueryNode.java (revision 1128796) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/FieldQueryNode.java (working copy) @@ -25,8 +25,7 @@ /** * A {@link FieldQueryNode} represents a element that contains field/text tuple */ -public class FieldQueryNode extends QueryNodeImpl implements TextableQueryNode, - FieldableNode { +public class FieldQueryNode extends QueryNodeImpl implements FieldValuePairQueryNode, TextableQueryNode { /** * The term's field @@ -180,4 +179,14 @@ } + @Override + public CharSequence getValue() { + return getText(); + } + + @Override + public void setValue(CharSequence value) { + setText(value); + } + } Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/FieldValuePairQueryNode.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/FieldValuePairQueryNode.java (revision 0) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/FieldValuePairQueryNode.java (revision 0) @@ -0,0 +1,5 @@ +package org.apache.lucene.queryParser.core.nodes; + +public interface FieldValuePairQueryNode extends FieldableNode, ValueQueryNode { + +} Property changes on: contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/FieldValuePairQueryNode.java ___________________________________________________________________ Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/NumberQueryNode.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/NumberQueryNode.java (revision 0) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/NumberQueryNode.java (revision 0) @@ -0,0 +1,9 @@ +package org.apache.lucene.queryParser.core.nodes; + +public interface NumberQueryNode { + + void setNumber(Number number); + + Number getNumber(); + +} Property changes on: contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/NumberQueryNode.java ___________________________________________________________________ Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/ValueQueryNode.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/ValueQueryNode.java (revision 0) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/ValueQueryNode.java (revision 0) @@ -0,0 +1,9 @@ +package org.apache.lucene.queryParser.core.nodes; + +public interface ValueQueryNode extends QueryNode { + + public void setValue(T value); + + public T getValue(); + +} Property changes on: contrib/queryparser/src/java/org/apache/lucene/queryParser/core/nodes/ValueQueryNode.java ___________________________________________________________________ Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/builders/RangeQueryNodeBuilder.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/builders/RangeQueryNodeBuilder.java (revision 1128796) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/builders/RangeQueryNodeBuilder.java (working copy) @@ -1,67 +0,0 @@ -package org.apache.lucene.queryParser.standard.builders; - -/** - * 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.QueryNodeException; -import org.apache.lucene.queryParser.core.nodes.ParametricQueryNode; -import org.apache.lucene.queryParser.core.nodes.QueryNode; -import org.apache.lucene.queryParser.core.nodes.ParametricQueryNode.CompareOperator; -import org.apache.lucene.queryParser.standard.config.MultiTermRewriteMethodAttribute; -import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode; -import org.apache.lucene.search.MultiTermQuery; -import org.apache.lucene.search.TermRangeQuery; - -/** - * Builds a {@link TermRangeQuery} object from a {@link RangeQueryNode} object. - */ -public class RangeQueryNodeBuilder implements StandardQueryBuilder { - - public RangeQueryNodeBuilder() { - // empty constructor - } - - public TermRangeQuery build(QueryNode queryNode) throws QueryNodeException { - RangeQueryNode rangeNode = (RangeQueryNode) queryNode; - ParametricQueryNode upper = rangeNode.getUpperBound(); - ParametricQueryNode lower = rangeNode.getLowerBound(); - - boolean lowerInclusive = false; - boolean upperInclusive = false; - - if (upper.getOperator() == CompareOperator.LE) { - upperInclusive = true; - } - - if (lower.getOperator() == CompareOperator.GE) { - lowerInclusive = true; - } - - String field = rangeNode.getField().toString(); - - TermRangeQuery rangeQuery = TermRangeQuery.newStringRange(field, lower.getTextAsString(), upper.getTextAsString(), lowerInclusive, upperInclusive); - - MultiTermQuery.RewriteMethod method = (MultiTermQuery.RewriteMethod)queryNode.getTag(MultiTermRewriteMethodAttribute.TAG_ID); - if (method != null) { - rangeQuery.setRewriteMethod(method); - } - - return rangeQuery; - - } - -} Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/builders/StandardQueryTreeBuilder.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/builders/StandardQueryTreeBuilder.java (revision 1128796) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/builders/StandardQueryTreeBuilder.java (working copy) @@ -32,7 +32,7 @@ import org.apache.lucene.queryParser.core.nodes.TokenizedPhraseQueryNode; import org.apache.lucene.queryParser.standard.nodes.MultiPhraseQueryNode; import org.apache.lucene.queryParser.standard.nodes.PrefixWildcardQueryNode; -import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode; +import org.apache.lucene.queryParser.standard.nodes.TermRangeQueryNode; import org.apache.lucene.queryParser.standard.nodes.RegexpQueryNode; import org.apache.lucene.queryParser.standard.nodes.StandardBooleanQueryNode; import org.apache.lucene.queryParser.standard.nodes.WildcardQueryNode; @@ -63,7 +63,7 @@ setBuilder(MatchNoDocsQueryNode.class, new MatchNoDocsQueryNodeBuilder()); setBuilder(PrefixWildcardQueryNode.class, new PrefixWildcardQueryNodeBuilder()); - setBuilder(RangeQueryNode.class, new RangeQueryNodeBuilder()); + setBuilder(TermRangeQueryNode.class, new TermRangeQueryNodeBuilder()); setBuilder(RegexpQueryNode.class, new RegexpQueryNodeBuilder()); setBuilder(SlopQueryNode.class, new SlopQueryNodeBuilder()); setBuilder(StandardBooleanQueryNode.class, Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/builders/TermRangeQueryNodeBuilder.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/builders/TermRangeQueryNodeBuilder.java (revision 1128796) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/builders/TermRangeQueryNodeBuilder.java (working copy) @@ -18,43 +18,34 @@ */ import org.apache.lucene.queryParser.core.QueryNodeException; -import org.apache.lucene.queryParser.core.nodes.ParametricQueryNode; +import org.apache.lucene.queryParser.core.nodes.FieldQueryNode; import org.apache.lucene.queryParser.core.nodes.QueryNode; -import org.apache.lucene.queryParser.core.nodes.ParametricQueryNode.CompareOperator; +import org.apache.lucene.queryParser.core.util.StringUtils; import org.apache.lucene.queryParser.standard.config.MultiTermRewriteMethodAttribute; -import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode; +import org.apache.lucene.queryParser.standard.nodes.TermRangeQueryNode; import org.apache.lucene.search.MultiTermQuery; import org.apache.lucene.search.TermRangeQuery; /** - * Builds a {@link TermRangeQuery} object from a {@link RangeQueryNode} object. + * Builds a {@link TermRangeQuery} object from a {@link TermRangeQueryNode} object. */ -public class RangeQueryNodeBuilder implements StandardQueryBuilder { +public class TermRangeQueryNodeBuilder implements StandardQueryBuilder { - public RangeQueryNodeBuilder() { + public TermRangeQueryNodeBuilder() { // empty constructor } public TermRangeQuery build(QueryNode queryNode) throws QueryNodeException { - RangeQueryNode rangeNode = (RangeQueryNode) queryNode; - ParametricQueryNode upper = rangeNode.getUpperBound(); - ParametricQueryNode lower = rangeNode.getLowerBound(); + TermRangeQueryNode rangeNode = (TermRangeQueryNode) queryNode; + FieldQueryNode upper = rangeNode.getUpperBound(); + FieldQueryNode lower = rangeNode.getLowerBound(); - boolean lowerInclusive = false; - boolean upperInclusive = false; - - if (upper.getOperator() == CompareOperator.LE) { - upperInclusive = true; - } - - if (lower.getOperator() == CompareOperator.GE) { - lowerInclusive = true; - } - - String field = rangeNode.getField().toString(); - - TermRangeQuery rangeQuery = TermRangeQuery.newStringRange(field, lower.getTextAsString(), upper.getTextAsString(), lowerInclusive, upperInclusive); + String field = StringUtils.toString(rangeNode.getField()); + TermRangeQuery rangeQuery = TermRangeQuery.newStringRange(field, lower + .getTextAsString(), upper.getTextAsString(), rangeNode + .isLowerInclusive(), rangeNode.isUpperInclusive()); + MultiTermQuery.RewriteMethod method = (MultiTermQuery.RewriteMethod)queryNode.getTag(MultiTermRewriteMethodAttribute.TAG_ID); if (method != null) { rangeQuery.setRewriteMethod(method); Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/config/DateResolutionAttribute.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/config/DateResolutionAttribute.java (revision 1128796) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/config/DateResolutionAttribute.java (working copy) @@ -20,7 +20,7 @@ import org.apache.lucene.document.DateTools; import org.apache.lucene.document.DateTools.Resolution; import org.apache.lucene.queryParser.core.config.QueryConfigHandler; -import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode; +import org.apache.lucene.queryParser.standard.nodes.TermRangeQueryNode; import org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor; import org.apache.lucene.util.Attribute; @@ -32,7 +32,7 @@ */ public interface DateResolutionAttribute extends Attribute { /** - * Sets the default date resolution used by {@link RangeQueryNode}s for + * Sets the default date resolution used by {@link TermRangeQueryNode}s for * fields for which no specific date resolutions has been set. Field * specific resolutions can be set with * Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/AbstractRangeQueryNode.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/AbstractRangeQueryNode.java (revision 0) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/AbstractRangeQueryNode.java (revision 0) @@ -0,0 +1,118 @@ +package org.apache.lucene.queryParser.standard.nodes; + + +import org.apache.lucene.queryParser.core.nodes.FieldValuePairQueryNode; +import org.apache.lucene.queryParser.core.nodes.FieldableNode; +import org.apache.lucene.queryParser.core.nodes.QueryNodeImpl; +import org.apache.lucene.queryParser.core.parser.EscapeQuerySyntax; +import org.apache.lucene.queryParser.core.util.StringUtils; + +public abstract class AbstractRangeQueryNode> + extends QueryNodeImpl implements FieldableNode { + + private T lower, upper; + + private boolean lowerInclusive, upperInclusive; + + @Override + public CharSequence getField() { + CharSequence field = null; + + if (lower != null) { + field = lower.getField(); + + } else if (upper != null) { + field = upper.getField(); + } + + return field; + + } + + @Override + public void setField(CharSequence fieldName) { + + if (lower != null) { + lower.setField(fieldName); + } + + if (upper != null) { + upper.setField(fieldName); + } + + } + + public T getLowerBound() { + return lower; + } + + public T getUpperBound() { + return upper; + } + + public boolean isLowerInclusive() { + return lowerInclusive; + } + + public boolean isUpperInclusive() { + return upperInclusive; + } + + public void setBounds(T lower, T upper, boolean lowerInclusive, + boolean upperInclusive) { + + if (lower != null && upper != null) { + String lowerField = StringUtils.toString(lower.getField()); + String upperField = StringUtils.toString(upper.getField()); + + if (lowerField != null && upperField != null + && !upperField.equals(lowerField) + || lowerField != upperField) { + throw new IllegalArgumentException( + "lower and upper bounds should have the same field name!"); + } + + } + + } + + @Override + public CharSequence toQueryString(EscapeQuerySyntax escapeSyntaxParser) { + StringBuilder sb = new StringBuilder(); + + if (lowerInclusive) { + sb.append('['); + + } else { + sb.append('{'); + } + + if (lower != null) { + sb.append(lower.toQueryString(escapeSyntaxParser)); + + } else { + sb.append("..."); + } + + sb.append(' '); + + + if (upper != null) { + sb.append(upper.toQueryString(escapeSyntaxParser)); + + } else { + sb.append("..."); + } + + if (upperInclusive) { + sb.append(']'); + + } else { + sb.append('}'); + } + + return sb.toString(); + + } + +} Property changes on: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/AbstractRangeQueryNode.java ___________________________________________________________________ Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/NumericQueryNode.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/NumericQueryNode.java (revision 0) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/NumericQueryNode.java (revision 0) @@ -0,0 +1,52 @@ +package org.apache.lucene.queryParser.standard.nodes; + +import java.text.NumberFormat; +import java.util.Locale; + +import org.apache.lucene.queryParser.core.nodes.FieldValuePairQueryNode; +import org.apache.lucene.queryParser.core.nodes.QueryNodeImpl; +import org.apache.lucene.queryParser.core.parser.EscapeQuerySyntax; +import org.apache.lucene.queryParser.core.parser.EscapeQuerySyntax.Type; + +public class NumericQueryNode extends QueryNodeImpl implements + FieldValuePairQueryNode { + + private CharSequence field; + + private Number value; + + @Override + public CharSequence getField() { + return this.field; + } + + @Override + public void setField(CharSequence fieldName) { + this.field = fieldName; + } + + protected CharSequence getTermEscaped(EscapeQuerySyntax escaper) { + return escaper.escape(NumberFormat.getNumberInstance().format( + this.value), Locale.getDefault(), Type.NORMAL); + } + + @Override + public CharSequence toQueryString(EscapeQuerySyntax escapeSyntaxParser) { + if (isDefaultField(this.field)) { + return getTermEscaped(escapeSyntaxParser); + } else { + return this.field + ":" + getTermEscaped(escapeSyntaxParser); + } + } + + @Override + public Number getValue() { + return value; + } + + @Override + public void setValue(Number value) { + this.value = value; + } + +} Property changes on: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/NumericQueryNode.java ___________________________________________________________________ Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/NumericRangeQueryNode.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/NumericRangeQueryNode.java (revision 0) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/NumericRangeQueryNode.java (revision 0) @@ -0,0 +1,9 @@ +package org.apache.lucene.queryParser.standard.nodes; + +public class NumericRangeQueryNode extends AbstractRangeQueryNode { + + public NumericRangeQueryNode(NumericQueryNode lower, NumericQueryNode upper, boolean lowerInclusive, boolean upperInclusive) { + setBounds(lower, upper, lowerInclusive, upperInclusive); + } + +} Property changes on: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/NumericRangeQueryNode.java ___________________________________________________________________ Added: svn:keywords + Rev Date Added: svn:eol-style + native Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/RangeQueryNode.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/RangeQueryNode.java (revision 1128796) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/RangeQueryNode.java (working copy) @@ -1,50 +0,0 @@ -package org.apache.lucene.queryParser.standard.nodes; - -/** - * 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.nodes.ParametricQueryNode; -import org.apache.lucene.queryParser.core.nodes.ParametricRangeQueryNode; -import org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor; - -/** - * This query node represents a range query. - * - * @see ParametricRangeQueryNodeProcessor - * @see org.apache.lucene.search.TermRangeQuery - */ -public class RangeQueryNode extends ParametricRangeQueryNode { - - /** - * @param lower - * @param upper - */ - public RangeQueryNode(ParametricQueryNode lower, ParametricQueryNode upper) { - super(lower, upper); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder("\n\t"); - sb.append(this.getUpperBound()).append("\n\t"); - sb.append(this.getLowerBound()).append("\n"); - sb.append("\n"); - - return sb.toString(); - - } -} Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/TermRangeQueryNode.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/TermRangeQueryNode.java (revision 1128796) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/nodes/TermRangeQueryNode.java (working copy) @@ -17,8 +17,7 @@ * limitations under the License. */ -import org.apache.lucene.queryParser.core.nodes.ParametricQueryNode; -import org.apache.lucene.queryParser.core.nodes.ParametricRangeQueryNode; +import org.apache.lucene.queryParser.core.nodes.FieldQueryNode; import org.apache.lucene.queryParser.standard.processors.ParametricRangeQueryNodeProcessor; /** @@ -27,24 +26,10 @@ * @see ParametricRangeQueryNodeProcessor * @see org.apache.lucene.search.TermRangeQuery */ -public class RangeQueryNode extends ParametricRangeQueryNode { +public class TermRangeQueryNode extends AbstractRangeQueryNode { - /** - * @param lower - * @param upper - */ - public RangeQueryNode(ParametricQueryNode lower, ParametricQueryNode upper) { - super(lower, upper); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder("\n\t"); - sb.append(this.getUpperBound()).append("\n\t"); - sb.append(this.getLowerBound()).append("\n"); - sb.append("\n"); - - return sb.toString(); - - } + public TermRangeQueryNode(FieldQueryNode lower, FieldQueryNode upper, boolean lowerInclusive, boolean upperInclusive) { + setBounds(lower, upper, lowerInclusive, upperInclusive); + } + } Index: contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/processors/ParametricRangeQueryNodeProcessor.java =================================================================== --- contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/processors/ParametricRangeQueryNodeProcessor.java (revision 1128796) +++ contrib/queryparser/src/java/org/apache/lucene/queryParser/standard/processors/ParametricRangeQueryNodeProcessor.java (working copy) @@ -35,14 +35,14 @@ import org.apache.lucene.queryParser.core.processors.QueryNodeProcessorImpl; import org.apache.lucene.queryParser.standard.config.DateResolutionAttribute; import org.apache.lucene.queryParser.standard.config.LocaleAttribute; -import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode; +import org.apache.lucene.queryParser.standard.nodes.TermRangeQueryNode; /** * This processor converts {@link ParametricRangeQueryNode} objects to - * {@link RangeQueryNode} objects. It reads the lower and upper bounds value + * {@link TermRangeQueryNode} objects. It reads the lower and upper bounds value * from the {@link ParametricRangeQueryNode} object and try to parse their * values using a {@link DateFormat}. If the values cannot be parsed to a date - * value, it will only create the {@link RangeQueryNode} using the non-parsed + * value, it will only create the {@link TermRangeQueryNode} using the non-parsed * values.
*
* If a {@link LocaleAttribute} is defined in the {@link QueryConfigHandler} it @@ -55,7 +55,7 @@ * * @see DateResolutionAttribute * @see LocaleAttribute - * @see RangeQueryNode + * @see TermRangeQueryNode * @see ParametricRangeQueryNode */ public class ParametricRangeQueryNodeProcessor extends QueryNodeProcessorImpl { @@ -140,7 +140,9 @@ lower.setText(part1); upper.setText(part2); - return new RangeQueryNode(lower, upper); + return new TermRangeQueryNode(lower, upper, + upper.getOperator() == CompareOperator.LE, upper + .getOperator() == CompareOperator.GE); }