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