KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jimm > datavision > Scripting


1 package jimm.datavision;
2 import jimm.util.XMLWriter;
3 import java.util.*;
4 import org.apache.bsf.BSFManager;
5 import org.apache.bsf.BSFException;
6
7 /**
8  * Bean Scripting Framework management.
9  *
10  * @author Jim Menard, <a HREF="mailto:jimm@io.com">jimm@io.com</a>
11  */

12 public class Scripting implements Writeable {
13
14 protected static final String JavaDoc DEFAULT_LANGUAGE = "Ruby";
15 protected static final String JavaDoc DEFAULT_CLASS =
16     "org.jruby.javasupport.bsf.JRubyEngine";
17
18 protected Report report;
19 protected String JavaDoc defaultLanguage;
20 protected Map languages;
21 protected Map managers;
22
23 public Scripting(Report report) {
24     this.report = report;
25     defaultLanguage = DEFAULT_LANGUAGE;
26     languages = new HashMap();
27     languages.put(DEFAULT_LANGUAGE, DEFAULT_CLASS);
28     managers = new HashMap();
29 }
30
31 /** Returns an immutable copy of the map of languages. */
32 public Map getLanguages() { return Collections.unmodifiableMap(languages); }
33
34 /** Adds a language to our list. */
35 public void addLanguage(String JavaDoc language, String JavaDoc className) {
36     languages.put(language, className);
37 }
38
39 /**
40  * Replace the contents of our language map with the contents of
41  * <var>langs</var>.
42  *
43  * @param langs maps language names to class names
44  */

45 public void replaceLanguages(Map langs) {
46     languages.clear();
47     languages.putAll(langs);
48 }
49
50 /** Returns the default language name. */
51 public String JavaDoc getDefaultLanguage() { return defaultLanguage; }
52
53 /** Sets the default language name. */
54 public void setDefaultLanguage(String JavaDoc language) {
55     if (language == null)
56     throw new IllegalArgumentException JavaDoc("default language may not be null");
57     defaultLanguage = language;
58 }
59
60 /**
61  * Returns true if we can load class <var>klass</var>.
62  */

63 public boolean canFind(String JavaDoc klass) {
64     BSFManager manager = new BSFManager();
65     boolean found = false;
66     try {
67     manager.getClassLoader().loadClass(klass);
68     found = true;
69     }
70     catch (ClassNotFoundException JavaDoc e) {}
71     return found;
72 }
73
74 /**
75  * Evaluates an <var>evalString</var> using <var>language</var> and returns
76  * the results.
77  *
78  * @param language the language to use
79  * @param evalString the string to evaluate
80  * @param name a name (for example, a formula name) to display with error
81  * messages
82  * @return the result
83  */

84 public Object JavaDoc eval(String JavaDoc language, String JavaDoc evalString, String JavaDoc name)
85     throws BSFException
86 {
87     return getBsfManager(language).eval(language, name, 1, 1, evalString);
88 }
89
90 /** Returns BSFManager for the default language. */
91 public BSFManager getBsfManager() throws BSFException {
92     return getBsfManager(defaultLanguage);
93 }
94
95 /** Returns BSFManager for <var>language</var>. */
96 public BSFManager getBsfManager(String JavaDoc language) throws BSFException {
97     BSFManager manager = (BSFManager)managers.get(language);
98     if (manager == null) {
99     manager = new BSFManager();
100     manager.declareBean("report", report, Report.class);
101     BSFManager.registerScriptingEngine(language,
102                        (String JavaDoc)languages.get(language), null);
103     managers.put(language, manager);
104     }
105     return manager;
106 }
107
108 public void writeXML(XMLWriter out) {
109     out.startElement("bean-scripting-framework");
110     out.attr("default-language", defaultLanguage);
111
112     for (Iterator iter = languages.keySet().iterator(); iter.hasNext(); ) {
113     String JavaDoc language = (String JavaDoc)iter.next();
114     out.startElement("language");
115     out.attr("name", language);
116     out.attr("class", languages.get(language));
117     out.endElement();
118     }
119
120     out.endElement();
121 }
122
123 }
124
Popular Tags