1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.jexl.parser;
18
19 import org.apache.commons.jexl.JexlContext;
20 import org.apache.commons.jexl.util.Coercion;
21
22 /***
23 * if ( expression ) statement [else statement].
24 *
25 * @author Dion Gillard
26 * @since 1.1
27 */
28 public class ASTIfStatement extends SimpleNode {
29 /*** child index of the else statement to execute. */
30 private static final int ELSE_STATEMENT_INDEX = 2;
31 /***
32 * Create the node given an id.
33 *
34 * @param id node id.
35 */
36 public ASTIfStatement(int id) {
37 super(id);
38 }
39
40 /***
41 * Create a node with the given parser and id.
42 *
43 * @param p a parser.
44 * @param id node id.
45 */
46 public ASTIfStatement(Parser p, int id) {
47 super(p, id);
48 }
49
50 /*** {@inheritDoc} */
51 public Object jjtAccept(ParserVisitor visitor, Object data) {
52 return visitor.visit(this, data);
53 }
54
55 /*** {@inheritDoc} */
56 public Object value(JexlContext jc) throws Exception {
57 Object result = null;
58
59 Object expression = ((SimpleNode) jjtGetChild(0)).value(jc);
60 if (Coercion.coerceBoolean(expression).booleanValue()) {
61
62 result = ((SimpleNode) jjtGetChild(1)).value(jc);
63 } else {
64
65 if (jjtGetNumChildren() == ELSE_STATEMENT_INDEX + 1) {
66 result = ((SimpleNode) jjtGetChild(2)).value(jc);
67 }
68 }
69
70 return result;
71 }
72
73 }