home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / bsf.jar / com / ibm / bsf / BSFManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-11-05  |  7.3 KB  |  247 lines

  1. package com.ibm.bsf;
  2.  
  3. import com.ibm.cs.util.CodeBuffer;
  4. import com.ibm.cs.util.ObjectRegistry;
  5. import java.beans.PropertyChangeSupport;
  6. import java.io.PrintStream;
  7. import java.util.Enumeration;
  8. import java.util.Hashtable;
  9. import java.util.MissingResourceException;
  10. import java.util.NoSuchElementException;
  11. import java.util.ResourceBundle;
  12. import java.util.StringTokenizer;
  13. import java.util.Vector;
  14.  
  15. public class BSFManager {
  16.    protected static Hashtable registeredEngines = new Hashtable();
  17.    protected static Hashtable extn2Lang = new Hashtable();
  18.    protected Hashtable loadedEngines = new Hashtable();
  19.    protected ObjectRegistry objectRegistry = new ObjectRegistry();
  20.    protected PropertyChangeSupport pcs;
  21.    protected ClassLoader classLoader = this.getClass().getClassLoader();
  22.    protected String tempDir = ".";
  23.    protected String classPath;
  24.    protected PrintStream debugStream;
  25.    protected Vector declaredBeans;
  26.    boolean debug;
  27.  
  28.    public static void registerScriptingEngine(String var0, String var1, String[] var2) {
  29.       registeredEngines.put(var0, var1);
  30.       if (var2 != null) {
  31.          for(int var3 = 0; var3 < var2.length; ++var3) {
  32.             extn2Lang.put(var2[var3], var0);
  33.          }
  34.       }
  35.  
  36.    }
  37.  
  38.    public static boolean isLanguageRegistered(String var0) {
  39.       return registeredEngines.get(var0) != null;
  40.    }
  41.  
  42.    public static String getLangFromFilename(String var0) throws BSFException {
  43.       int var1 = var0.lastIndexOf(".");
  44.       if (var1 != -1) {
  45.          String var2 = var0.substring(var1 + 1);
  46.          String var3 = (String)extn2Lang.get(var2);
  47.          if (var3 != null) {
  48.             return var3;
  49.          }
  50.       }
  51.  
  52.       throw new BSFException(BSFException.REASON_OTHER_ERROR, "file extension missing or unknown: unable to determine language for '" + var0 + "'");
  53.    }
  54.  
  55.    public BSFManager() {
  56.       this.debugStream = System.err;
  57.       this.declaredBeans = new Vector();
  58.       this.debug = false;
  59.       this.pcs = new PropertyChangeSupport(this);
  60.    }
  61.  
  62.    public void setObjectRegistry(ObjectRegistry var1) {
  63.       this.objectRegistry = var1;
  64.    }
  65.  
  66.    public ObjectRegistry getObjectRegistry() {
  67.       return this.objectRegistry;
  68.    }
  69.  
  70.    public void setDebugStream(PrintStream var1) {
  71.       this.pcs.firePropertyChange("debugStream", this.debugStream, var1);
  72.       this.debugStream = var1;
  73.    }
  74.  
  75.    public PrintStream getDebugStream() {
  76.       return this.debugStream;
  77.    }
  78.  
  79.    public void setDebug(boolean var1) {
  80.       this.pcs.firePropertyChange("debug", new Boolean(this.debug), new Boolean(var1));
  81.       this.debug = var1;
  82.    }
  83.  
  84.    public boolean getDebug() {
  85.       return this.debug;
  86.    }
  87.  
  88.    public void setClassPath(String var1) {
  89.       this.pcs.firePropertyChange("classPath", this.classPath, var1);
  90.       this.classPath = var1;
  91.    }
  92.  
  93.    public String getClassPath() {
  94.       if (this.classPath == null) {
  95.          try {
  96.             this.classPath = System.getProperty("java.class.path");
  97.          } catch (Throwable var1) {
  98.          }
  99.       }
  100.  
  101.       return this.classPath;
  102.    }
  103.  
  104.    public void setClassLoader(ClassLoader var1) {
  105.       this.pcs.firePropertyChange("classLoader", this.classLoader, var1);
  106.       this.classLoader = var1;
  107.    }
  108.  
  109.    public ClassLoader getClassLoader() {
  110.       return this.classLoader;
  111.    }
  112.  
  113.    public void setTempDir(String var1) {
  114.       this.pcs.firePropertyChange("tempDir", this.tempDir, var1);
  115.       this.tempDir = var1;
  116.    }
  117.  
  118.    public String getTempDir() {
  119.       return this.tempDir;
  120.    }
  121.  
  122.    public BSFEngine loadScriptingEngine(String var1) throws BSFException {
  123.       BSFEngine var2 = (BSFEngine)this.loadedEngines.get(var1);
  124.       if (var2 != null) {
  125.          return var2;
  126.       } else {
  127.          String var3 = (String)registeredEngines.get(var1);
  128.          if (var3 == null) {
  129.             throw new BSFException(BSFException.REASON_UNKNOWN_LANGUAGE, "unsupported language: " + var1);
  130.          } else {
  131.             try {
  132.                Class var4 = this.classLoader == null ? Class.forName(var3) : this.classLoader.loadClass(var3);
  133.                var2 = (BSFEngine)var4.newInstance();
  134.                var2.initialize(this, var1, this.declaredBeans);
  135.                this.loadedEngines.put(var1, var2);
  136.                this.pcs.addPropertyChangeListener(var2);
  137.                return var2;
  138.             } catch (Throwable var5) {
  139.                throw new BSFException(BSFException.REASON_OTHER_ERROR, "unable to load language: " + var1, var5);
  140.             }
  141.          }
  142.       }
  143.    }
  144.  
  145.    public void registerBean(String var1, Object var2) {
  146.       this.objectRegistry.register(var1, var2);
  147.    }
  148.  
  149.    public void unregisterBean(String var1) {
  150.       this.objectRegistry.unregister(var1);
  151.    }
  152.  
  153.    public Object lookupBean(String var1) {
  154.       try {
  155.          return this.objectRegistry.lookup(var1);
  156.       } catch (IllegalArgumentException var2) {
  157.          return null;
  158.       }
  159.    }
  160.  
  161.    public void declareBean(String var1, Object var2, Class var3) throws BSFException {
  162.       this.registerBean(var1, var2);
  163.       BSFDeclaredBean var4 = new BSFDeclaredBean(var1, var2, var3);
  164.       this.declaredBeans.addElement(var4);
  165.       Enumeration var5 = this.loadedEngines.elements();
  166.  
  167.       while(var5.hasMoreElements()) {
  168.          BSFEngine var6 = (BSFEngine)var5.nextElement();
  169.          var6.declareBean(var4);
  170.       }
  171.  
  172.    }
  173.  
  174.    public void undeclareBean(String var1) throws BSFException {
  175.       this.unregisterBean(var1);
  176.       BSFDeclaredBean var2 = null;
  177.  
  178.       for(int var3 = 0; var3 < this.declaredBeans.size(); ++var3) {
  179.          var2 = (BSFDeclaredBean)this.declaredBeans.elementAt(var3);
  180.          if (var2.name.equals(var1)) {
  181.             break;
  182.          }
  183.       }
  184.  
  185.       if (var2 != null) {
  186.          this.declaredBeans.removeElement(var2);
  187.          Enumeration var4 = this.loadedEngines.elements();
  188.  
  189.          while(var4.hasMoreElements()) {
  190.             BSFEngine var5 = (BSFEngine)var4.nextElement();
  191.             var5.undeclareBean(var2);
  192.          }
  193.       }
  194.  
  195.    }
  196.  
  197.    public void exec(String var1, String var2, int var3, int var4, Object var5) throws BSFException {
  198.       BSFEngine var6 = this.loadScriptingEngine(var1);
  199.       var6.exec(var2, var3, var4, var5);
  200.    }
  201.  
  202.    public Object eval(String var1, String var2, int var3, int var4, Object var5) throws BSFException {
  203.       BSFEngine var6 = this.loadScriptingEngine(var1);
  204.       return var6.eval(var2, var3, var4, var5);
  205.    }
  206.  
  207.    public void compileExpr(String var1, String var2, int var3, int var4, Object var5, CodeBuffer var6) throws BSFException {
  208.       BSFEngine var7 = this.loadScriptingEngine(var1);
  209.       var7.compileExpr(var2, var3, var4, var5, var6);
  210.    }
  211.  
  212.    public void compileScript(String var1, String var2, int var3, int var4, Object var5, CodeBuffer var6) throws BSFException {
  213.       BSFEngine var7 = this.loadScriptingEngine(var1);
  214.       var7.compileScript(var2, var3, var4, var5, var6);
  215.    }
  216.  
  217.    static {
  218.       try {
  219.          ResourceBundle var0 = ResourceBundle.getBundle("com.ibm.bsf.Languages");
  220.          Enumeration var1 = var0.getKeys();
  221.  
  222.          while(var1.hasMoreElements()) {
  223.             String var2 = (String)var1.nextElement();
  224.             String var3 = var0.getString(var2);
  225.             StringTokenizer var4 = new StringTokenizer(var3, ",");
  226.             String var5 = var4.nextToken();
  227.             String var6 = var4.nextToken();
  228.             StringTokenizer var7 = new StringTokenizer(var6, "|");
  229.             String[] var8 = new String[var7.countTokens()];
  230.  
  231.             for(int var9 = 0; var7.hasMoreTokens(); ++var9) {
  232.                var8[var9] = var7.nextToken().trim();
  233.             }
  234.  
  235.             registerScriptingEngine(var2, var5, var8);
  236.          }
  237.  
  238.       } catch (NoSuchElementException var10) {
  239.          ((Throwable)var10).printStackTrace();
  240.          System.err.println("Syntax error in Languages resource bundle");
  241.       } catch (MissingResourceException var11) {
  242.          ((Throwable)var11).printStackTrace();
  243.          System.err.println("Initialization error: " + ((Throwable)var11).toString());
  244.       }
  245.    }
  246. }
  247.