1 19 20 package org.apache.cayenne.exp.parser; 21 22 import org.apache.cayenne.exp.Expression; 23 import org.apache.commons.collections.Transformer; 24 25 30 public class ASTIn extends ConditionNode { 31 32 35 ASTIn(int id) { 36 super(id); 37 } 38 39 public ASTIn() { 40 super(ExpressionParserTreeConstants.JJTIN); 41 } 42 43 public ASTIn(ASTPath path, ASTList list) { 44 super(ExpressionParserTreeConstants.JJTIN); 45 jjtAddChild(path, 0); 46 jjtAddChild(list, 1); 47 } 48 49 protected Object evaluateNode(Object o) throws Exception { 50 int len = jjtGetNumChildren(); 51 if (len != 2) { 52 return Boolean.FALSE; 53 } 54 55 Object o1 = evaluateChild(0, o); 56 if (o1 == null) { 57 return Boolean.FALSE; 58 } 59 60 Object [] objects = (Object []) evaluateChild(1, o); 61 if (objects == null) { 62 return Boolean.FALSE; 63 } 64 65 int size = objects.length; 66 for (int i = 0; i < size; i++) { 67 if (o1.equals(objects[i])) { 68 return Boolean.TRUE; 69 } 70 } 71 72 return Boolean.FALSE; 73 } 74 75 78 public Expression shallowCopy() { 79 return new ASTIn(id); 80 } 81 82 protected String getExpressionOperator(int index) { 83 return "in"; 84 } 85 86 public int getType() { 87 return Expression.IN; 88 } 89 90 protected Object transformExpression(Transformer transformer) { 91 Object transformed = super.transformExpression(transformer); 92 93 if (transformed instanceof ASTIn) { 95 ASTIn exp = (ASTIn) transformed; 96 if (exp.jjtGetNumChildren() == 2) { 97 ASTList list = (ASTList) exp.jjtGetChild(1); 98 Object [] objects = (Object []) list.evaluate(null); 99 if (objects.length == 0) { 100 transformed = new ASTFalse(); 101 } 102 } 103 } 104 105 return transformed; 106 } 107 108 } 109 | Popular Tags |