KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > commons > jexl > parser > ASTIfStatement


1 /*
2  * Copyright 2002-2006 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
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 JavaDoc jjtAccept(ParserVisitor visitor, Object JavaDoc data) {
52         return visitor.visit(this, data);
53     }
54
55     /** {@inheritDoc} */
56     public Object JavaDoc value(JexlContext jc) throws Exception JavaDoc {
57         Object JavaDoc result = null;
58         /* first child is the expression */
59         Object JavaDoc expression = ((SimpleNode) jjtGetChild(0)).value(jc);
60         if (Coercion.coerceBoolean(expression).booleanValue()) {
61             // true statement
62
result = ((SimpleNode) jjtGetChild(1)).value(jc);
63         } else {
64             // if there is a false, execute it
65
if (jjtGetNumChildren() == ELSE_STATEMENT_INDEX + 1) {
66                 result = ((SimpleNode) jjtGetChild(2)).value(jc);
67             }
68         }
69
70         return result;
71     }
72
73 }
74
Popular Tags