package org.apache.lucene.queryparser.flexible.aqp.processors;
import java.util.List;
import org.apache.lucene.queryparser.flexible.core.QueryNodeException;
import org.apache.lucene.queryparser.flexible.core.nodes.ModifierQueryNode;
import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode;
import org.apache.lucene.queryparser.flexible.core.processors.QueryNodeProcessor;
import org.apache.lucene.queryparser.flexible.core.processors.QueryNodeProcessorImpl;
import org.apache.lucene.queryparser.flexible.aqp.nodes.AqpANTLRNode;
public class AqpATOMProcessor extends QueryNodeProcessorImpl implements
QueryNodeProcessor {
@Override
protected QueryNode preProcessNode(QueryNode node) throws QueryNodeException {
return node;
}
@Override
protected QueryNode postProcessNode(QueryNode node) throws QueryNodeException {
if (node instanceof AqpANTLRNode
&& ((AqpANTLRNode) node).getTokenLabel().equals("ATOM")) {
AqpANTLRNode atomNode = (AqpANTLRNode) node;
List<QueryNode> children = node.getChildren();
QueryNode modifierNode = children.get(0); // MODIFIER
node = children.get(1); // NUCLEUS
if (modifierNode.getChildren() != null) {
String modifier = ((AqpANTLRNode) modifierNode.getChildren().get(0))
.getTokenName();
node = new ModifierQueryNode(node,
modifier.equals("PLUS") ? ModifierQueryNode.Modifier.MOD_REQ
: ModifierQueryNode.Modifier.MOD_NOT);
}
return node;
}
return node;
}
@Override
protected List<QueryNode> setChildrenOrder(List<QueryNode> children)
throws QueryNodeException {
return children;
}
}