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 }