View Javadoc

1   package org.cateproject.view.velocity;
2   
3   import java.io.IOException;
4   
5   import org.apache.velocity.context.InternalContextAdapter;
6   import org.apache.velocity.exception.TemplateInitException;
7   import org.apache.velocity.runtime.RuntimeServices;
8   import org.apache.velocity.runtime.directive.Directive;
9   import org.apache.velocity.runtime.parser.node.Node;
10  
11  public abstract class CateBlockDirective extends Directive {
12  	
13  	private int numArguments;
14  	private String[] parameters;
15  	
16  	public CateBlockDirective(String ... parameters) {
17  		this.parameters = parameters;
18  		this.numArguments = parameters.length;
19  	}
20  
21  	@Override
22  	public int getType() {
23  		return BLOCK;
24  	}
25  
26  	@Override
27  	public void init(RuntimeServices runtimeServices, InternalContextAdapter internalContextAdapter, Node node)	throws TemplateInitException
28  	{
29  		super.init(runtimeServices, internalContextAdapter, node);
30  
31  		if(node.jjtGetNumChildren()-1 != numArguments) {
32  			throw new TemplateInitException( getName() + " accepts " + numArguments + " arguments" + getParameterNames() + ".",internalContextAdapter.getCurrentTemplateName(),
33  	                getLine(),getColumn());
34  		}
35  	}
36  
37  	private String getParameterNames()
38  	{
39  		StringBuffer buffer = new StringBuffer();
40  
41  		if(parameters.length > 0)
42  		{
43  			int index = 0;
44  			buffer.append('(');
45  			for(String parameter:parameters)
46  			{
47  				if(index > 0)
48  				{
49  					buffer.append(",");
50  				}
51  				buffer.append('\'');
52  				buffer.append(parameter);
53  				buffer.append('\'');
54  				index++;
55  			}
56  			buffer.append(')');
57  		}
58  
59  		return buffer.toString();
60  	}
61  
62  	protected static String getArgument(InternalContextAdapter context,Node node,int parameter)
63  		throws IOException
64  	{
65  		if(!(node.jjtGetNumChildren() > parameter))
66  		{
67  			return null;
68  		}
69  
70  		Object value = node.jjtGetChild(parameter).value(context).toString(); 
71  
72  		return value != null ? value.toString() : "";
73  	}
74  
75  }