001: package org.apache.velocity.runtime.parser.node;
002:
003: /*
004: * Licensed to the Apache Software Foundation (ASF) under one
005: * or more contributor license agreements. See the NOTICE file
006: * distributed with this work for additional information
007: * regarding copyright ownership. The ASF licenses this file
008: * to you under the Apache License, Version 2.0 (the
009: * "License"); you may not use this file except in compliance
010: * with the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017: * KIND, either express or implied. See the License for the
018: * specific language governing permissions and limitations
019: * under the License.
020: */
021:
022: import java.io.IOException;
023: import java.io.Writer;
024:
025: import org.apache.velocity.context.InternalContextAdapter;
026: import org.apache.velocity.exception.MethodInvocationException;
027: import org.apache.velocity.exception.ParseErrorException;
028: import org.apache.velocity.exception.ResourceNotFoundException;
029: import org.apache.velocity.exception.TemplateInitException;
030: import org.apache.velocity.runtime.parser.ParserVisitor;
031: import org.apache.velocity.runtime.parser.Token;
032:
033: /**
034: * This file describes the interface between the Velocity code
035: * and the JavaCC generated code.
036: *
037: * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
038: * @version $Id: Node.java 471381 2006-11-05 08:56:58Z wglass $
039: */
040:
041: public interface Node {
042: /** This method is called after the node has been made the current
043: * node. It indicates that child nodes can now be added to it. */
044: public void jjtOpen();
045:
046: /** This method is called after all the child nodes have been
047: added. */
048: public void jjtClose();
049:
050: /**
051: * This pair of methods are used to inform the node of its
052: * parent.
053: * @param n
054: * */
055: public void jjtSetParent(Node n);
056:
057: /**
058: * @return The node parent.
059: */
060: public Node jjtGetParent();
061:
062: /**
063: * This method tells the node to add its argument to the node's
064: * list of children.
065: * @param n
066: * @param i
067: */
068: public void jjtAddChild(Node n, int i);
069:
070: /**
071: * This method returns a child node. The children are numbered
072: * from zero, left to right.
073: * @param i
074: * @return A child node.
075: */
076: public Node jjtGetChild(int i);
077:
078: /**
079: * Return the number of children the node has.
080: * @return The number of children of this node.
081: */
082: public int jjtGetNumChildren();
083:
084: /**
085: * @param visitor
086: * @param data
087: * @return The Node execution result object.
088: */
089: public Object jjtAccept(ParserVisitor visitor, Object data);
090:
091: /*
092: * ========================================================================
093: *
094: * The following methods are not generated automatically be the Parser but
095: * added manually to be used by Velocity.
096: *
097: * ========================================================================
098: */
099:
100: /**
101: * @see #jjtAccept(ParserVisitor, Object)
102: * @param visitor
103: * @param data
104: * @return The node execution result.
105: */
106: public Object childrenAccept(ParserVisitor visitor, Object data);
107:
108: /**
109: * @return The first token.
110: */
111: public Token getFirstToken();
112:
113: /**
114: * @return The last token.
115: */
116: public Token getLastToken();
117:
118: /**
119: * @return The NodeType.
120: */
121: public int getType();
122:
123: /**
124: * @param context
125: * @param data
126: * @return The init result.
127: * @throws TemplateInitException
128: */
129: public Object init(InternalContextAdapter context, Object data)
130: throws TemplateInitException;
131:
132: /**
133: * @param context
134: * @return The evaluation result.
135: * @throws MethodInvocationException
136: */
137: public boolean evaluate(InternalContextAdapter context)
138: throws MethodInvocationException;
139:
140: /**
141: * @param context
142: * @return The node value.
143: * @throws MethodInvocationException
144: */
145: public Object value(InternalContextAdapter context)
146: throws MethodInvocationException;
147:
148: /**
149: * @param context
150: * @param writer
151: * @return True if the node rendered successfully.
152: * @throws IOException
153: * @throws MethodInvocationException
154: * @throws ParseErrorException
155: * @throws ResourceNotFoundException
156: */
157: public boolean render(InternalContextAdapter context, Writer writer)
158: throws IOException, MethodInvocationException,
159: ParseErrorException, ResourceNotFoundException;
160:
161: /**
162: * @param o
163: * @param context
164: * @return The execution result.
165: * @throws MethodInvocationException
166: */
167: public Object execute(Object o, InternalContextAdapter context)
168: throws MethodInvocationException;
169:
170: /**
171: * @param info
172: */
173: public void setInfo(int info);
174:
175: /**
176: * @return The current node info.
177: */
178: public int getInfo();
179:
180: /**
181: * @return A literal.
182: */
183: public String literal();
184:
185: /**
186: * Mark the node as invalid.
187: */
188: public void setInvalid();
189:
190: /**
191: * @return True if the node is invalid.
192: */
193: public boolean isInvalid();
194:
195: /**
196: * @return The current line position.
197: */
198: public int getLine();
199:
200: /**
201: * @return The current column position.
202: */
203: public int getColumn();
204: }
|