blob: e9813c4cc13c3e1af9790668487ec81ae7ce9cf2 [file] [log] [blame]
/*
* 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.
*/
package org.apache.lucene.queryparser.flexible.core.nodes;
import org.apache.lucene.queryparser.flexible.core.parser.EscapeQuerySyntax;
import java.util.Locale;
/**
* A {@link FieldQueryNode} represents a element that contains field/text tuple
*/
public class FieldQueryNode extends QueryNodeImpl implements FieldValuePairQueryNode<CharSequence>, TextableQueryNode {
/**
* The term's field
*/
protected CharSequence field;
/**
* The term's text.
*/
protected CharSequence text;
/**
* The term's begin position.
*/
protected int begin;
/**
* The term's end position.
*/
protected int end;
/**
* The term's position increment.
*/
protected int positionIncrement;
/**
* @param field
* - field name
* @param text
* - value
* @param begin
* - position in the query string
* @param end
* - position in the query string
*/
public FieldQueryNode(CharSequence field, CharSequence text, int begin,
int end) {
this.field = field;
this.text = text;
this.begin = begin;
this.end = end;
this.setLeaf(true);
}
protected CharSequence getTermEscaped(EscapeQuerySyntax escaper) {
return escaper.escape(this.text, Locale.getDefault(), EscapeQuerySyntax.Type.NORMAL);
}
protected CharSequence getTermEscapeQuoted(EscapeQuerySyntax escaper) {
return escaper.escape(this.text, Locale.getDefault(), EscapeQuerySyntax.Type.STRING);
}
@Override
public CharSequence toQueryString(EscapeQuerySyntax escaper) {
if (isDefaultField(this.field)) {
return getTermEscaped(escaper);
} else {
return this.field + ":" + getTermEscaped(escaper);
}
}
@Override
public String toString() {
return "<field start='" + this.begin + "' end='" + this.end + "' field='"
+ this.field + "' text='" + this.text + "'/>";
}
/**
* @return the term
*/
public String getTextAsString() {
if (this.text == null)
return null;
else
return this.text.toString();
}
/**
* returns null if the field was not specified in the query string
*
* @return the field
*/
public String getFieldAsString() {
if (this.field == null)
return null;
else
return this.field.toString();
}
public int getBegin() {
return this.begin;
}
public void setBegin(int begin) {
this.begin = begin;
}
public int getEnd() {
return this.end;
}
public void setEnd(int end) {
this.end = end;
}
@Override
public CharSequence getField() {
return this.field;
}
@Override
public void setField(CharSequence field) {
this.field = field;
}
public int getPositionIncrement() {
return this.positionIncrement;
}
public void setPositionIncrement(int pi) {
this.positionIncrement = pi;
}
/**
* Returns the term.
*
* @return The "original" form of the term.
*/
@Override
public CharSequence getText() {
return this.text;
}
/**
* @param text
* the text to set
*/
@Override
public void setText(CharSequence text) {
this.text = text;
}
@Override
public FieldQueryNode cloneTree() throws CloneNotSupportedException {
FieldQueryNode fqn = (FieldQueryNode) super.cloneTree();
fqn.begin = this.begin;
fqn.end = this.end;
fqn.field = this.field;
fqn.text = this.text;
fqn.positionIncrement = this.positionIncrement;
fqn.toQueryStringIgnoreFields = this.toQueryStringIgnoreFields;
return fqn;
}
@Override
public CharSequence getValue() {
return getText();
}
@Override
public void setValue(CharSequence value) {
setText(value);
}
}