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  import java.io.IOException;
23  import java.io.Writer;
24  
25  import org.apache.velocity.context.InternalContextAdapter;
26  import org.apache.velocity.exception.MethodInvocationException;
27  import org.apache.velocity.exception.ParseErrorException;
28  import org.apache.velocity.exception.ResourceNotFoundException;
29  import org.apache.velocity.exception.TemplateInitException;
30  import org.apache.velocity.runtime.parser.ParserVisitor;
31  import org.apache.velocity.runtime.parser.Token;
32  
33  /**
34   *  This file describes the interface between the Velocity code
35   *  and the JavaCC generated code.
36   *
37   * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
38   * @version $Id: Node.java 471381 2006-11-05 08:56:58Z wglass $
39   */
40  
41  public interface Node
42  {
43      /** This method is called after the node has been made the current
44       * node.  It indicates that child nodes can now be added to it. */
45      public void jjtOpen();
46  
47      /** This method is called after all the child nodes have been
48        added. */
49      public void jjtClose();
50  
51      /**
52       * This pair of methods are used to inform the node of its
53       * parent.
54       * @param n
55       * */
56      public void jjtSetParent(Node n);
57  
58      /**
59       * @return The node parent.
60       */
61      public Node jjtGetParent();
62  
63      /**
64       * This method tells the node to add its argument to the node's
65       * list of children.
66       * @param n
67       * @param i
68       */
69      public void jjtAddChild(Node n, int i);
70  
71      /**
72       * This method returns a child node.  The children are numbered
73       * from zero, left to right.
74       * @param i
75       * @return A child node.
76       */
77      public Node jjtGetChild(int i);
78  
79      /**
80       * Return the number of children the node has.
81       * @return The number of children of this node.
82       */
83      public int jjtGetNumChildren();
84  
85      /**
86       * @param visitor
87       * @param data
88       * @return The Node execution result object.
89       */
90      public Object jjtAccept(ParserVisitor visitor, Object data);
91  
92      /*
93       * ========================================================================
94       *
95       * The following methods are not generated automatically be the Parser but
96       * added manually to be used by Velocity.
97       *
98       * ========================================================================
99       */
100 
101     /**
102      * @see #jjtAccept(ParserVisitor, Object)
103      * @param visitor
104      * @param data
105      * @return The node execution result.
106      */
107     public Object childrenAccept(ParserVisitor visitor, Object data);
108 
109     /**
110      * @return The first token.
111      */
112     public Token getFirstToken();
113     /**
114      * @return The last token.
115      */
116     public Token getLastToken();
117     /**
118      * @return The NodeType.
119      */
120     public int getType();
121 
122     /**
123      * @param context
124      * @param data
125      * @return The init result.
126      * @throws TemplateInitException 
127      */
128     public Object init( InternalContextAdapter context, Object data) throws TemplateInitException;
129 
130     /**
131      * @param context
132      * @return The evaluation result.
133      * @throws MethodInvocationException
134      */
135     public boolean evaluate( InternalContextAdapter context)
136         throws MethodInvocationException;
137 
138     /**
139      * @param context
140      * @return The node value.
141      * @throws MethodInvocationException
142      */
143     public Object value( InternalContextAdapter context)
144         throws MethodInvocationException;
145 
146     /**
147      * @param context
148      * @param writer
149      * @return True if the node rendered successfully.
150      * @throws IOException
151      * @throws MethodInvocationException
152      * @throws ParseErrorException
153      * @throws ResourceNotFoundException
154      */
155     public boolean render( InternalContextAdapter context, Writer writer)
156         throws IOException,MethodInvocationException, ParseErrorException, ResourceNotFoundException;
157 
158     /**
159      * @param o
160      * @param context
161      * @return The execution result.
162      * @throws MethodInvocationException
163      */
164     public Object execute(Object o, InternalContextAdapter context)
165       throws MethodInvocationException;
166 
167     /**
168      * @param info
169      */
170     public void setInfo(int info);
171 
172     /**
173      * @return The current node info.
174      */
175     public int getInfo();
176 
177     /**
178      * @return A literal.
179      */
180     public String literal();
181 
182     /**
183      * Mark the node as invalid.
184      */
185     public void setInvalid();
186 
187     /**
188      * @return True if the node is invalid.
189      */
190     public boolean isInvalid();
191 
192     /**
193      * @return The current line position.
194      */
195     public int getLine();
196 
197     /**
198      * @return The current column position.
199      */
200     public int getColumn();
201 }