01: /*
02: The contents of this file are subject to the Mozilla Public License Version 1.1
03: (the "License"); you may not use this file except in compliance with the
04: License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
05:
06: Software distributed under the License is distributed on an "AS IS" basis,
07: WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
08: for the specific language governing rights and
09: limitations under the License.
10:
11: The Original Code is "The Columba Project"
12:
13: The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
14: Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
15:
16: All Rights Reserved.
17: */
18: package org.columba.core.scripting.interpreter;
19:
20: import java.io.FileNotFoundException;
21: import java.io.IOException;
22: import java.util.Iterator;
23: import java.util.Map;
24:
25: import org.columba.core.scripting.model.ColumbaScript;
26:
27: import bsh.EvalError;
28: import bsh.Interpreter;
29:
30: /**
31: @author Celso Pinto (cpinto@yimports.com)
32: */
33: public class BshInterpreter extends ScriptInterpreter {
34: private final static String[] EXTENSIONS = new String[] { "bsh",
35: "beanshell" };
36:
37: public String getName() {
38: return "Beanshell Interpreter";
39: }
40:
41: public String[] getSupportedExtensions() {
42: return EXTENSIONS;
43: }
44:
45: public void execute(ColumbaScript script, Map vars) {
46: /*
47: * it's the script responsability to define the "metadata" by invoking
48: * .setName(), .setAuthor() and .setDescription()
49: */
50:
51: logger.append("Executing bsh: " + script.getPath());
52:
53: Interpreter bsh = new Interpreter();
54: bsh.setClassLoader(getClass().getClassLoader());
55:
56: try {
57: for (Iterator it = vars.entrySet().iterator(); it.hasNext();) {
58: Map.Entry entry = (Map.Entry) it.next();
59: bsh.set(entry.getKey().toString(), entry.getValue());
60: }
61:
62: bsh.source(script.getPath());
63: } catch (FileNotFoundException ex) {
64: logger.append(String.format("File %s not found", script
65: .getPath()), ex);
66: } catch (IOException ex) {
67: logger.append(String.format("IOException in %s", script
68: .getPath()), ex);
69: } catch (EvalError ex) {
70: logger.append(String.format("Failed to process script %s",
71: script.getPath()), ex);
72: }
73: }
74:
75: }
|