package org.apache.lucene.queryparser.flexible.aqp.nodes;
import java.util.List;
import org.apache.lucene.queryparser.flexible.messages.MessageImpl;
import org.apache.lucene.queryparser.flexible.aqp.processors.AqpOPERATORProcessor;
import org.apache.lucene.queryparser.flexible.core.QueryNodeError;
import org.apache.lucene.queryparser.flexible.core.messages.QueryParserMessages;
import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode;
import org.apache.lucene.queryparser.flexible.core.nodes.QueryNodeImpl;
import org.apache.lucene.queryparser.flexible.core.parser.EscapeQuerySyntax;
/**
* For nodes connected through proximity operators, eg.
*
* <pre>
* foo NEAR bar
* </pre>
*
* @see AqpOPERATORProcessor
*
*/
public class AqpNearQueryNode extends QueryNodeImpl implements QueryNode {
private static final long serialVersionUID = 8806759327487974314L;
private Integer slop = null;
private boolean inOrder = true;
public AqpNearQueryNode(List<QueryNode> children, int proximity) {
if (children == null) {
throw new QueryNodeError(
new MessageImpl(QueryParserMessages.PARAMETER_VALUE_NOT_SUPPORTED,
"children", "null"));
}
allocate();
setLeaf(false);
add(children);
this.slop = proximity;
}
public CharSequence toQueryString(EscapeQuerySyntax escapeSyntaxParser) {
if (getChild() == null)
return "";
String leftParenthensis = "";
String rightParenthensis = "";
if (getChild() != null && getChild() instanceof AqpNearQueryNode) {
leftParenthensis = "(";
rightParenthensis = ")";
}
return leftParenthensis + "#"
+ getChild().toQueryString(escapeSyntaxParser) + rightParenthensis;
}
public String toString() {
StringBuffer bo = new StringBuffer();
bo.append("<near slop=\"");
bo.append(slop);
bo.append("\">\n");
for (QueryNode child : this.getChildren()) {
bo.append(child.toString());
bo.append("\n");
}
bo.append("\n</near>");
return bo.toString();
}
public QueryNode getChild() {
return getChildren().get(0);
}
public Integer getSlop() {
return slop;
}
public void setSlop(Integer prox) {
slop = prox;
}
public boolean getInOrder() {
return inOrder;
}
public void setInOrder(boolean order) {
inOrder = order;
}
}