View Javadoc

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  /**
23   * Please look at the Parser.jjt file which is
24   * what controls the generation of this class.
25   *
26   * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
27   * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
28   * @version $Id: ASTIfStatement.java 463298 2006-10-12 16:10:32Z henning $
29  */
30  
31  
32  import java.io.IOException;
33  import java.io.Writer;
34  
35  import org.apache.velocity.context.InternalContextAdapter;
36  import org.apache.velocity.exception.MethodInvocationException;
37  import org.apache.velocity.exception.ParseErrorException;
38  import org.apache.velocity.exception.ResourceNotFoundException;
39  import org.apache.velocity.runtime.parser.Parser;
40  import org.apache.velocity.runtime.parser.ParserVisitor;
41  
42  
43  /**
44   *
45   */
46  public class ASTIfStatement extends SimpleNode
47  {
48      /**
49       * @param id
50       */
51      public ASTIfStatement(int id)
52      {
53          super(id);
54      }
55  
56      /**
57       * @param p
58       * @param id
59       */
60      public ASTIfStatement(Parser p, int id)
61      {
62          super(p, id);
63      }
64  
65  
66      /**
67       * @see org.apache.velocity.runtime.parser.node.SimpleNode#jjtAccept(org.apache.velocity.runtime.parser.ParserVisitor, java.lang.Object)
68       */
69      public Object jjtAccept(ParserVisitor visitor, Object data)
70      {
71          return visitor.visit(this, data);
72      }
73  
74      /**
75       * @see org.apache.velocity.runtime.parser.node.SimpleNode#render(org.apache.velocity.context.InternalContextAdapter, java.io.Writer)
76       */
77      public boolean render( InternalContextAdapter context, Writer writer)
78          throws IOException,MethodInvocationException,
79          	ResourceNotFoundException, ParseErrorException
80      {
81          /*
82           * Check if the #if(expression) construct evaluates to true:
83           * if so render and leave immediately because there
84           * is nothing left to do!
85           */
86          if (jjtGetChild(0).evaluate(context))
87          {
88              jjtGetChild(1).render(context, writer);
89              return true;
90          }
91  
92          int totalNodes = jjtGetNumChildren();
93  
94          /*
95           * Now check the remaining nodes left in the
96           * if construct. The nodes are either elseif
97           *  nodes or else nodes. Each of these node
98           * types knows how to evaluate themselves. If
99           * a node evaluates to true then the node will
100          * render itself and this method will return
101          * as there is nothing left to do.
102          */
103         for (int i = 2; i < totalNodes; i++)
104         {
105             if (jjtGetChild(i).evaluate(context))
106             {
107                 jjtGetChild(i).render(context, writer);
108                 return true;
109             }
110         }
111 
112         /*
113          * This is reached when an ASTIfStatement
114          * consists of an if/elseif sequence where
115          * none of the nodes evaluate to true.
116          */
117         return true;
118     }
119 
120     /**
121      * @param context
122      * @param visitor
123      */
124     public void process( InternalContextAdapter context, ParserVisitor visitor)
125     {
126     }
127 }
128 
129 
130 
131 
132 
133