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 12 public class Scripting implements Writeable { 13 14 protected static final String DEFAULT_LANGUAGE = "Ruby"; 15 protected static final String DEFAULT_CLASS = 16 "org.jruby.javasupport.bsf.JRubyEngine"; 17 18 protected Report report; 19 protected String 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 32 public Map getLanguages() { return Collections.unmodifiableMap(languages); } 33 34 35 public void addLanguage(String language, String className) { 36 languages.put(language, className); 37 } 38 39 45 public void replaceLanguages(Map langs) { 46 languages.clear(); 47 languages.putAll(langs); 48 } 49 50 51 public String getDefaultLanguage() { return defaultLanguage; } 52 53 54 public void setDefaultLanguage(String language) { 55 if (language == null) 56 throw new IllegalArgumentException ("default language may not be null"); 57 defaultLanguage = language; 58 } 59 60 63 public boolean canFind(String klass) { 64 BSFManager manager = new BSFManager(); 65 boolean found = false; 66 try { 67 manager.getClassLoader().loadClass(klass); 68 found = true; 69 } 70 catch (ClassNotFoundException e) {} 71 return found; 72 } 73 74 84 public Object eval(String language, String evalString, String name) 85 throws BSFException 86 { 87 return getBsfManager(language).eval(language, name, 1, 1, evalString); 88 } 89 90 91 public BSFManager getBsfManager() throws BSFException { 92 return getBsfManager(defaultLanguage); 93 } 94 95 96 public BSFManager getBsfManager(String 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 )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 language = (String )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 |