01: /*
02: * argun 1.0
03: * Web 2.0 delivery framework
04: * Copyright (C) 2007 Hammurapi Group
05: *
06: * This program is free software; you can redistribute it and/or
07: * modify it under the terms of the GNU Lesser General Public
08: * License as published by the Free Software Foundation; either
09: * version 2 of the License, or (at your option) any later version.
10: *
11: * This program is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * Lesser General Public License for more details.
15: *
16: * You should have received a copy of the GNU Lesser General Public
17: * License along with this library; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19: *
20: * URL: http://www.hammurapi.biz
21: * e-Mail: support@hammurapi.biz
22: */
23: package biz.hammurapi.web.eval;
24:
25: import java.io.IOException;
26: import java.io.StringWriter;
27: import java.util.Iterator;
28: import java.util.Map;
29:
30: import org.apache.velocity.VelocityContext;
31: import org.apache.velocity.app.VelocityEngine;
32: import org.apache.velocity.runtime.RuntimeConstants;
33:
34: import biz.hammurapi.web.HammurapiWebException;
35: import biz.hammurapi.web.menu.Menu;
36:
37: /**
38: * Interprets JSP-like code with Jxp.
39: * @author Pavel
40: */
41: public class VelocityEvaluator implements Evaluator {
42:
43: public EvaluationResult evaluate(String source, String sourceName,
44: Map context, ClassLoader classLoader)
45: throws HammurapiWebException {
46: try {
47: VelocityEngine ve = new VelocityEngine();
48: ve
49: .setProperty(
50: RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
51: "org.apache.velocity.runtime.log.SimpleLog4JLogSystem");
52: ve.setProperty("runtime.log.logsystem.log4j.category",
53: Menu.class.getName());
54: ve.init();
55:
56: VelocityContext vc = new VelocityContext();
57: if (context != null) {
58: Iterator it = context.entrySet().iterator();
59: while (it.hasNext()) {
60: Map.Entry entry = (Map.Entry) it.next();
61: vc.put(entry.getKey().toString(), entry.getValue());
62: }
63: }
64: StringWriter out = new StringWriter();
65: if (!ve.evaluate(vc, out, sourceName, source)) {
66: out.write("Velocity error");
67: }
68: out.close();
69: final String output = out.toString();
70: return new EvaluationResult() {
71:
72: public String getOutput() {
73: return output;
74: }
75:
76: public Object getResult() {
77: return null;
78: }
79:
80: };
81: } catch (IOException e) {
82: throw new HammurapiWebException(
83: "Should never happen: " + e, e);
84: } catch (Exception e) {
85: throw new HammurapiWebException(
86: "Template instantiation failed: " + e, e);
87: }
88: }
89:
90: }
|