1 package org.apache.velocity.runtime.parser.node;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import org.apache.velocity.runtime.parser.Parser;
23 import org.apache.velocity.runtime.parser.ParserVisitor;
24 import org.apache.velocity.context.InternalContextAdapter;
25
26 import org.apache.velocity.exception.MethodInvocationException;
27
28 /**
29 * Please look at the Parser.jjt file which is
30 * what controls the generation of this class.
31 *
32 * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
33 * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
34 * @version $Id: ASTOrNode.java 463298 2006-10-12 16:10:32Z henning $
35 */
36 public class ASTOrNode extends SimpleNode
37 {
38 /**
39 * @param id
40 */
41 public ASTOrNode(int id)
42 {
43 super(id);
44 }
45
46 /**
47 * @param p
48 * @param id
49 */
50 public ASTOrNode(Parser p, int id)
51 {
52 super(p, id);
53 }
54
55 /**
56 * @see org.apache.velocity.runtime.parser.node.SimpleNode#jjtAccept(org.apache.velocity.runtime.parser.ParserVisitor, java.lang.Object)
57 */
58 public Object jjtAccept(ParserVisitor visitor, Object data)
59 {
60 return visitor.visit(this, data);
61 }
62
63 /**
64 * Returns the value of the expression.
65 * Since the value of the expression is simply the boolean
66 * result of evaluate(), lets return that.
67 * @param context
68 * @return The Expression value.
69 * @throws MethodInvocationException
70 */
71 public Object value(InternalContextAdapter context )
72 throws MethodInvocationException
73 {
74 // TODO: JDK 1.4+ -> valueOf()
75 return new Boolean(evaluate(context));
76 }
77
78 /**
79 * the logical or :
80 * the rule :
81 * left || null -> left
82 * null || right -> right
83 * null || null -> false
84 * left || right -> left || right
85 * @param context
86 * @return The evaluation result.
87 * @throws MethodInvocationException
88 */
89 public boolean evaluate( InternalContextAdapter context)
90 throws MethodInvocationException
91 {
92 Node left = jjtGetChild(0);
93 Node right = jjtGetChild(1);
94
95 /*
96 * if the left is not null and true, then true
97 */
98
99 if (left != null && left.evaluate( context ) )
100 return true;
101
102 /*
103 * same for right
104 */
105
106 if ( right != null && right.evaluate( context ) )
107 return true;
108
109 return false;
110 }
111 }
112
113
114
115
116