1 19 20 package org.apache.cayenne.exp.parser; 21 22 import org.apache.cayenne.exp.Expression; 23 import org.apache.cayenne.util.ConversionUtil; 24 25 31 public class ASTBetween extends ConditionNode { 32 33 ASTBetween(int id) { 34 super(id); 35 } 36 37 public ASTBetween() { 38 super(ExpressionParserTreeConstants.JJTBETWEEN); 39 } 40 41 public ASTBetween(ASTPath path, Object value1, Object value2) { 42 super(ExpressionParserTreeConstants.JJTBETWEEN); 43 jjtAddChild(path, 0); 44 jjtAddChild(new ASTScalar(value1), 1); 45 jjtAddChild(new ASTScalar(value2), 2); 46 } 47 48 protected Object evaluateNode(Object o) throws Exception { 49 int len = jjtGetNumChildren(); 50 if (len != 3) { 51 return Boolean.FALSE; 52 } 53 54 Comparable c1 = ConversionUtil.toComparable(evaluateChild(0, o)); 55 56 if (c1 == null) { 57 return Boolean.FALSE; 58 } 59 60 Comparable c2 = ConversionUtil.toComparable(evaluateChild(1, o)); 61 if (c2 == null) { 62 return Boolean.FALSE; 63 } 64 65 Comparable c3 = ConversionUtil.toComparable(evaluateChild(2, o)); 66 if (c3 == null) { 67 return Boolean.FALSE; 68 } 69 70 return c1.compareTo(c2) >= 0 71 && c1.compareTo(c3) <= 0 ? Boolean.TRUE : Boolean.FALSE; 72 } 73 74 77 public Expression shallowCopy() { 78 return new ASTBetween(id); 79 } 80 81 protected String getExpressionOperator(int index) { 82 return (index == 2) ? "and" : "between"; 83 } 84 85 public int getType() { 86 return Expression.BETWEEN; 87 } 88 } 89 | Popular Tags |