1 19 20 21 package org.apache.cayenne.exp.parser; 22 23 import java.io.PrintWriter ; 24 import java.math.BigDecimal ; 25 26 import org.apache.cayenne.exp.Expression; 27 import org.apache.cayenne.util.ConversionUtil; 28 29 35 public class ASTNegate extends SimpleNode { 36 ASTNegate(int id) { 37 super(id); 38 } 39 40 public ASTNegate() { 41 super(ExpressionParserTreeConstants.JJTNEGATE); 42 } 43 44 public ASTNegate(Object node) { 45 super(ExpressionParserTreeConstants.JJTNEGATE); 46 jjtAddChild(wrapChild(node), 0); 47 } 48 49 52 public Expression shallowCopy() { 53 return new ASTNegate(id); 54 } 55 56 protected Object evaluateNode(Object o) throws Exception { 57 int len = jjtGetNumChildren(); 58 if (len == 0) { 59 return null; 60 } 61 62 BigDecimal result = ConversionUtil.toBigDecimal(evaluateChild(0, o)); 63 return result != null ? result.negate() : null; 64 } 65 66 public void encodeAsString(PrintWriter pw) { 67 if ((children != null) && (children.length > 0)) { 68 pw.print("-"); 69 70 SimpleNode child = (SimpleNode) children[0]; 71 72 boolean useParen = 74 parent != null 75 && !((child instanceof ASTScalar) || (child instanceof ASTPath)); 76 if (useParen) { 77 pw.print("("); 78 } 79 80 child.encodeAsString(pw); 81 82 if (useParen) { 83 pw.print(')'); 84 } 85 } 86 } 87 88 protected String getExpressionOperator(int index) { 89 throw new UnsupportedOperationException ( 90 "No operator for '" + ExpressionParserTreeConstants.jjtNodeName[id] + "'"); 91 } 92 93 public int getType() { 94 return Expression.NEGATIVE; 95 } 96 97 public int getOperandCount() { 98 return 1; 99 } 100 } 101 | Popular Tags |