home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.bsf;
-
- import com.ibm.cs.util.CodeBuffer;
- import com.ibm.cs.util.ObjectRegistry;
- import java.beans.PropertyChangeSupport;
- import java.io.PrintStream;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.MissingResourceException;
- import java.util.NoSuchElementException;
- import java.util.ResourceBundle;
- import java.util.StringTokenizer;
- import java.util.Vector;
-
- public class BSFManager {
- protected static Hashtable registeredEngines = new Hashtable();
- protected static Hashtable extn2Lang = new Hashtable();
- protected Hashtable loadedEngines = new Hashtable();
- protected ObjectRegistry objectRegistry = new ObjectRegistry();
- protected PropertyChangeSupport pcs;
- protected ClassLoader classLoader = this.getClass().getClassLoader();
- protected String tempDir = ".";
- protected String classPath;
- protected PrintStream debugStream;
- protected Vector declaredBeans;
- boolean debug;
-
- public static void registerScriptingEngine(String var0, String var1, String[] var2) {
- registeredEngines.put(var0, var1);
- if (var2 != null) {
- for(int var3 = 0; var3 < var2.length; ++var3) {
- extn2Lang.put(var2[var3], var0);
- }
- }
-
- }
-
- public static boolean isLanguageRegistered(String var0) {
- return registeredEngines.get(var0) != null;
- }
-
- public static String getLangFromFilename(String var0) throws BSFException {
- int var1 = var0.lastIndexOf(".");
- if (var1 != -1) {
- String var2 = var0.substring(var1 + 1);
- String var3 = (String)extn2Lang.get(var2);
- if (var3 != null) {
- return var3;
- }
- }
-
- throw new BSFException(BSFException.REASON_OTHER_ERROR, "file extension missing or unknown: unable to determine language for '" + var0 + "'");
- }
-
- public BSFManager() {
- this.debugStream = System.err;
- this.declaredBeans = new Vector();
- this.debug = false;
- this.pcs = new PropertyChangeSupport(this);
- }
-
- public void setObjectRegistry(ObjectRegistry var1) {
- this.objectRegistry = var1;
- }
-
- public ObjectRegistry getObjectRegistry() {
- return this.objectRegistry;
- }
-
- public void setDebugStream(PrintStream var1) {
- this.pcs.firePropertyChange("debugStream", this.debugStream, var1);
- this.debugStream = var1;
- }
-
- public PrintStream getDebugStream() {
- return this.debugStream;
- }
-
- public void setDebug(boolean var1) {
- this.pcs.firePropertyChange("debug", new Boolean(this.debug), new Boolean(var1));
- this.debug = var1;
- }
-
- public boolean getDebug() {
- return this.debug;
- }
-
- public void setClassPath(String var1) {
- this.pcs.firePropertyChange("classPath", this.classPath, var1);
- this.classPath = var1;
- }
-
- public String getClassPath() {
- if (this.classPath == null) {
- try {
- this.classPath = System.getProperty("java.class.path");
- } catch (Throwable var1) {
- }
- }
-
- return this.classPath;
- }
-
- public void setClassLoader(ClassLoader var1) {
- this.pcs.firePropertyChange("classLoader", this.classLoader, var1);
- this.classLoader = var1;
- }
-
- public ClassLoader getClassLoader() {
- return this.classLoader;
- }
-
- public void setTempDir(String var1) {
- this.pcs.firePropertyChange("tempDir", this.tempDir, var1);
- this.tempDir = var1;
- }
-
- public String getTempDir() {
- return this.tempDir;
- }
-
- public BSFEngine loadScriptingEngine(String var1) throws BSFException {
- BSFEngine var2 = (BSFEngine)this.loadedEngines.get(var1);
- if (var2 != null) {
- return var2;
- } else {
- String var3 = (String)registeredEngines.get(var1);
- if (var3 == null) {
- throw new BSFException(BSFException.REASON_UNKNOWN_LANGUAGE, "unsupported language: " + var1);
- } else {
- try {
- Class var4 = this.classLoader == null ? Class.forName(var3) : this.classLoader.loadClass(var3);
- var2 = (BSFEngine)var4.newInstance();
- var2.initialize(this, var1, this.declaredBeans);
- this.loadedEngines.put(var1, var2);
- this.pcs.addPropertyChangeListener(var2);
- return var2;
- } catch (Throwable var5) {
- throw new BSFException(BSFException.REASON_OTHER_ERROR, "unable to load language: " + var1, var5);
- }
- }
- }
- }
-
- public void registerBean(String var1, Object var2) {
- this.objectRegistry.register(var1, var2);
- }
-
- public void unregisterBean(String var1) {
- this.objectRegistry.unregister(var1);
- }
-
- public Object lookupBean(String var1) {
- try {
- return this.objectRegistry.lookup(var1);
- } catch (IllegalArgumentException var2) {
- return null;
- }
- }
-
- public void declareBean(String var1, Object var2, Class var3) throws BSFException {
- this.registerBean(var1, var2);
- BSFDeclaredBean var4 = new BSFDeclaredBean(var1, var2, var3);
- this.declaredBeans.addElement(var4);
- Enumeration var5 = this.loadedEngines.elements();
-
- while(var5.hasMoreElements()) {
- BSFEngine var6 = (BSFEngine)var5.nextElement();
- var6.declareBean(var4);
- }
-
- }
-
- public void undeclareBean(String var1) throws BSFException {
- this.unregisterBean(var1);
- BSFDeclaredBean var2 = null;
-
- for(int var3 = 0; var3 < this.declaredBeans.size(); ++var3) {
- var2 = (BSFDeclaredBean)this.declaredBeans.elementAt(var3);
- if (var2.name.equals(var1)) {
- break;
- }
- }
-
- if (var2 != null) {
- this.declaredBeans.removeElement(var2);
- Enumeration var4 = this.loadedEngines.elements();
-
- while(var4.hasMoreElements()) {
- BSFEngine var5 = (BSFEngine)var4.nextElement();
- var5.undeclareBean(var2);
- }
- }
-
- }
-
- public void exec(String var1, String var2, int var3, int var4, Object var5) throws BSFException {
- BSFEngine var6 = this.loadScriptingEngine(var1);
- var6.exec(var2, var3, var4, var5);
- }
-
- public Object eval(String var1, String var2, int var3, int var4, Object var5) throws BSFException {
- BSFEngine var6 = this.loadScriptingEngine(var1);
- return var6.eval(var2, var3, var4, var5);
- }
-
- public void compileExpr(String var1, String var2, int var3, int var4, Object var5, CodeBuffer var6) throws BSFException {
- BSFEngine var7 = this.loadScriptingEngine(var1);
- var7.compileExpr(var2, var3, var4, var5, var6);
- }
-
- public void compileScript(String var1, String var2, int var3, int var4, Object var5, CodeBuffer var6) throws BSFException {
- BSFEngine var7 = this.loadScriptingEngine(var1);
- var7.compileScript(var2, var3, var4, var5, var6);
- }
-
- static {
- try {
- ResourceBundle var0 = ResourceBundle.getBundle("com.ibm.bsf.Languages");
- Enumeration var1 = var0.getKeys();
-
- while(var1.hasMoreElements()) {
- String var2 = (String)var1.nextElement();
- String var3 = var0.getString(var2);
- StringTokenizer var4 = new StringTokenizer(var3, ",");
- String var5 = var4.nextToken();
- String var6 = var4.nextToken();
- StringTokenizer var7 = new StringTokenizer(var6, "|");
- String[] var8 = new String[var7.countTokens()];
-
- for(int var9 = 0; var7.hasMoreTokens(); ++var9) {
- var8[var9] = var7.nextToken().trim();
- }
-
- registerScriptingEngine(var2, var5, var8);
- }
-
- } catch (NoSuchElementException var10) {
- ((Throwable)var10).printStackTrace();
- System.err.println("Syntax error in Languages resource bundle");
- } catch (MissingResourceException var11) {
- ((Throwable)var11).printStackTrace();
- System.err.println("Initialization error: " + ((Throwable)var11).toString());
- }
- }
- }
-