1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.jexl.parser;
17
18 import org.apache.commons.jexl.JexlContext;
19 import org.apache.commons.jexl.util.Coercion;
20
21 /***
22 * represents equality between integers - use .equals() for strings
23 *
24 * @author <a href="mailto:geirm@apache.org">Geir Magnusson Jr.</a>
25 * @version $Id: ASTEQNode.java,v 1.7 2004/08/22 01:53:27 dion Exp $
26 */
27 public class ASTEQNode extends SimpleNode
28 {
29 public ASTEQNode(int id)
30 {
31 super(id);
32 }
33
34 public ASTEQNode(Parser p, int id)
35 {
36 super(p, id);
37 }
38
39 /*** Accept the visitor. **/
40 public Object jjtAccept(ParserVisitor visitor, Object data)
41 {
42 return visitor.visit(this, data);
43 }
44
45 public Object value(JexlContext pc)
46 throws Exception
47 {
48 Object left = ( (SimpleNode) jjtGetChild(0)).value(pc);
49 Object right = ( (SimpleNode) jjtGetChild(1)).value(pc);
50
51 if (left == null && right == null)
52 {
53
54
55
56 return Boolean.TRUE;
57 }
58 else if (left==null || right==null)
59 {
60
61
62
63 return Boolean.FALSE;
64 }
65 else if (left.getClass().equals(right.getClass()))
66 {
67 return left.equals(right) ? Boolean.TRUE : Boolean.FALSE;
68 }
69 else if(left instanceof Float || left instanceof Double ||
70 right instanceof Float || right instanceof Double)
71 {
72 Double l = Coercion.coerceDouble(left);
73 Double r = Coercion.coerceDouble(right);
74
75 return l.equals(r) ? Boolean.TRUE : Boolean.FALSE;
76 }
77 else if ( left instanceof Number || right instanceof Number ||
78 left instanceof Character || right instanceof Character)
79 {
80 return Coercion.coerceLong(left).equals(Coercion.coerceLong(right))
81 ? Boolean.TRUE : Boolean.FALSE;
82 }
83 else if (left instanceof Boolean || right instanceof Boolean)
84 {
85 return Coercion.coerceBoolean(left).equals(Coercion.coerceBoolean(right))
86 ? Boolean.TRUE : Boolean.FALSE;
87 }
88 else if (left instanceof java.lang.String || right instanceof String)
89 {
90 return left.toString().equals(right.toString()) ? Boolean.TRUE : Boolean.FALSE;
91 }
92
93 return left.equals(right) ? Boolean.TRUE : Boolean.FALSE;
94 }
95 }