package org.apache.lucene.queryparser.flexible.aqp.processors;
import java.util.List;
import org.apache.lucene.queryparser.flexible.aqp.nodes.AqpAdsabsIdentifierNode;
import org.apache.lucene.queryparser.flexible.core.QueryNodeException;
import org.apache.lucene.queryparser.flexible.core.nodes.FieldQueryNode;
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.standard.nodes.WildcardQueryNode;
public class AqpBibcodeProcessor 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 FieldQueryNode && !(node instanceof WildcardQueryNode)) {
FieldQueryNode n = (FieldQueryNode) node;
String input = n.getTextAsString();
if (input == null) {
return node;
}
// test it is a bibcode (19char long)
if (input.length() == 19 && input.indexOf('.') > -1) {
try {
Integer.parseInt(input.substring(0, 4));
return new AqpAdsabsIdentifierNode(n.getFieldAsString(), input, n.getBegin(), n.getEnd());
} catch(NumberFormatException nfe) {
// pass
}
}
else if (input.contains("\u2026") && input.length() == 17) { //2003AJ….125..525J -- bibcode with ellipsis
return new AqpAdsabsIdentifierNode(n.getFieldAsString(), input.replace("\u2026", "..."), n.getBegin(), n.getEnd());
}
}
return node;
}
@Override
protected List<QueryNode> setChildrenOrder(List<QueryNode> children)
throws QueryNodeException {
return children;
}
}