package com.netflix.suro.routing.filter.lang; import com.netflix.suro.routing.filter.*; import org.antlr.runtime.Token; import org.antlr.runtime.tree.Tree; import static com.netflix.suro.routing.filter.lang.TreeNodeUtil.getXPath; import static com.netflix.suro.routing.filter.lang.MessageFilterParser.*; public class ComparableTreeNode extends MessageFilterBaseTreeNode implements MessageFilterTranslatable { @Override public MessageFilter translate() { String xpath = getXPath(getChild(0)); Tree valueNode = getChild(1); switch(valueNode.getType()){ case NUMBER: Number value = (Number)((ValueTreeNode)valueNode).getValue(); return new PathValueMessageFilter(xpath, new NumericValuePredicate(value, getToken().getText())); case TIME_MILLIS_FUN_NAME: TimeMillisValueTreeNode timeValueNode = (TimeMillisValueTreeNode)valueNode; return new PathValueMessageFilter( xpath, new TimeMillisValuePredicate( timeValueNode.getValueFormat(), timeValueNode.getValue(), getToken().getText())); case TIME_STRING_FUN_NAME: TimeStringValueTreeNode timeStringNode = (TimeStringValueTreeNode)valueNode; return new PathValueMessageFilter( xpath, new TimeStringValuePredicate( timeStringNode.getValueTimeFormat(), timeStringNode.getInputTimeFormat(), timeStringNode.getValue(), getToken().getText())); default: throw new UnexpectedTokenException(valueNode, "Number", "time-millis", "time-string"); } } public ComparableTreeNode(Token t) { super(t); } public ComparableTreeNode(ComparableTreeNode node) { super(node); } public Tree dupNode() { return new ComparableTreeNode(this); } }