1 19 20 package org.apache.cayenne.exp.parser; 21 22 import java.math.BigDecimal ; 23 import java.util.Collection ; 24 import java.util.Iterator ; 25 26 import org.apache.cayenne.exp.Expression; 27 import org.apache.cayenne.util.ConversionUtil; 28 29 34 public class ASTAdd extends SimpleNode { 35 ASTAdd(int id) { 36 super(id); 37 } 38 39 public ASTAdd() { 40 super(ExpressionParserTreeConstants.JJTADD); 41 } 42 43 public ASTAdd(Object [] nodes) { 44 super(ExpressionParserTreeConstants.JJTADD); 45 int len = nodes.length; 46 for (int i = 0; i < len; i++) { 47 jjtAddChild(wrapChild(nodes[i]), i); 48 } 49 } 50 51 public ASTAdd(Collection nodes) { 52 super(ExpressionParserTreeConstants.JJTADD); 53 int len = nodes.size(); 54 Iterator it = nodes.iterator(); 55 for (int i = 0; i < len; i++) { 56 jjtAddChild(wrapChild(it.next()), i); 57 } 58 } 59 60 protected Object evaluateNode(Object o) throws Exception { 61 int len = jjtGetNumChildren(); 62 if (len == 0) { 63 return null; 64 } 65 66 BigDecimal result = null; 67 for (int i = 0; i < len; i++) { 68 BigDecimal value = ConversionUtil.toBigDecimal(evaluateChild(i, o)); 69 70 if (value == null) { 71 return null; 72 } 73 74 result = (i == 0) ? value : result.add(value); 75 } 76 77 return result; 78 } 79 80 83 public Expression shallowCopy() { 84 return new ASTAdd(id); 85 } 86 87 protected String getExpressionOperator(int index) { 88 return "+"; 89 } 90 91 public int getType() { 92 return Expression.ADD; 93 } 94 95 public void jjtClose() { 96 super.jjtClose(); 97 flattenTree(); 98 } 99 } 100 | Popular Tags |