/** * Visits the expression tree. * * @param visitor The visitor to use. */ public void visit(Visitor visitor) { expression.accept(visitor); } }
@Override public void visit(AttributeNode attributeNode) { attributeNode.getValue().accept(this); }
public void visit(EmbracedNode node) { node.getNode().accept(this); }
@Override public void visit(NegationNode negationNode) { negationNode.getNode().accept(this); }
public void visit(AttributeNode node) { node.getValue().accept(this); }
public void visit(NegationNode node) { node.getNode().accept(this); }
@Override public void visit(EmbracedNode embracedNode) { embracedNode.getNode().accept(this); }
public void visit(LogicNode node) { if (state != null) { throw new IllegalArgumentException("Logic expressions not supported in now expressions"); } for (LogicNode.NodeItem item : node.getItems()) { item.getNode().accept(this); } }
private boolean hasNow(ExpressionNode node) { NowCheckVisitor visitor = new NowCheckVisitor(); node.accept(visitor); return visitor.requiresConversion(); }
@Override public void visit(LogicNode logicNode) { for (LogicNode.NodeItem item : logicNode.getItems()) { item.getNode().accept(this); } }
public void visit(ArithmeticNode node) { for (ArithmeticNode.NodeItem item : node.getItems()) { item.getNode().accept(this); } }
public void visit(LogicNode node) { for (LogicNode.NodeItem item : node.getItems()) { item.getNode().accept(this); } }
@Override public void visit(ArithmeticNode arithmeticNode) { for (ArithmeticNode.NodeItem item : arithmeticNode.getItems()) { item.getNode().accept(this); } }
public void visit(ComparisonNode node) { if (state != null) { throw new IllegalArgumentException("Comparison cannot be done within now expression"); } if (!hasNow(node)) { return; } state = new BuildState(); node.getLHS().accept(this); node.getRHS().accept(this); if (!">".equals(node.getOperator())) { throw new IllegalArgumentException("Comparison operator '" + node.getOperator() + "' is not supported"); } if (!(node.getLHS() instanceof AttributeNode)) { throw new IllegalArgumentException("Left hand side of comparison must be a document field"); } state.comparison = node; if (state.attribute != null && state.comparison != null && (state.arithmetic != null || state.now != null)) { NowQueryExpression expression = new NowQueryExpression(state.attribute, state.comparison, state.arithmetic); expressionMap.put(expression.getDocumentType(), expression); state = null; } }