package org.apache.lucene.queryparser.flexible.aqp.processors;
import org.apache.lucene.queryparser.flexible.core.QueryNodeException;
import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode;
import org.apache.lucene.queryparser.flexible.aqp.nodes.AqpANTLRNode;
import org.apache.lucene.queryparser.flexible.aqp.nodes.AqpAdsabsSynonymQueryNode;
import org.apache.lucene.queryparser.flexible.aqp.processors.AqpMODIFIERProcessor;
/**
* When QNode is prefixed with '='/'#' we wrap it into
* {@link AqpAdsabsSynonymQueryNode} and then further down
* the line, the processing will be different. Look at
* {@link AqpAdsabsSynonymNodeProcessor} for an idea
*
* @author rchyla
*
*/
public class AqpAdsabsMODIFIERProcessor extends AqpMODIFIERProcessor {
@Override
public QueryNode createQNode(AqpANTLRNode node) throws QueryNodeException {
if (node.getChildren().size() == 1) {
return node.getChildren().get(0);
}
AqpANTLRNode subNode = getModifierNode(node);
String sign = subNode.getTokenLabel();
if (sign.equals("=")) {
return new AqpAdsabsSynonymQueryNode(getValueNode(node), false);
}
else if (sign.equals("#")) {
return new AqpAdsabsSynonymQueryNode(getValueNode(node), true);
}
else {
return super.createQNode(node);
}
}
}