home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.bsf.engines.activescript;
-
- import com.ibm.bsf.BSFDeclaredBean;
- import com.ibm.bsf.BSFException;
- import com.ibm.bsf.BSFManager;
- import com.ibm.bsf.util.BSFEngineImpl;
- import com.ibm.bsf.util.EngineUtils;
- import java.util.Hashtable;
- import java.util.Vector;
-
- public class ActiveScriptEngine extends BSFEngineImpl implements JavaBeanAddEventListener {
- static BSFException dllLoadException = null;
- static final String libName = "bsfactivescriptengine";
- static final String LANG_VBSCRIPT = "vbscript";
- static final String LANG_PERLSCRIPT = "perlscript";
- static final String LANG_JSCRIPT = "jscript";
- byte[] css;
- BSFManager bsfmgr;
- private Hashtable evalRet;
- protected String lang;
-
- protected final boolean isVBScript() {
- return this.lang.equalsIgnoreCase("vbscript");
- }
-
- protected final boolean isPerlScript() {
- return this.lang.equalsIgnoreCase("perlscript");
- }
-
- protected final boolean isJScript() {
- return this.lang.equalsIgnoreCase("jscript");
- }
-
- protected final boolean isCaseSensitive() {
- return this.isVBScript();
- }
-
- public final void setEvalRet(Object var1) {
- this.evalRet.put(new Integer(Thread.currentThread().hashCode()), var1 != null ? var1 : this.evalRet);
- }
-
- private final boolean terminated() {
- return this.css == null;
- }
-
- private native void nativeInit(String var1, String var2, Object[] var3) throws BSFException;
-
- private native Object nativeEval(byte[] var1, int var2, int var3, String var4, boolean var5) throws BSFException;
-
- private native void nativeTerminate(byte[] var1) throws BSFException;
-
- public void initialize(BSFManager var1, String var2, Vector var3) throws BSFException {
- if (dllLoadException != null) {
- throw dllLoadException;
- } else {
- synchronized(this){}
-
- try {
- if (this.lang != null) {
- this.lang = var2;
- throw new BSFException(BSFException.REASON_OTHER_ERROR, "Engine " + this + " initialized again");
- }
-
- this.lang = var2;
- } catch (Throwable var14) {
- throw var14;
- }
-
- super.initialize(var1, var2, var3);
- if (this.isPerlScript()) {
- this.evalRet = new Hashtable();
- }
-
- this.bsfmgr = var1;
- this.nativeInit(this.lang, (String)null, (Object[])null);
- if (this.css == null) {
- throw new BSFException(BSFException.REASON_OTHER_ERROR, "Engine " + this + " failed to initialize native interface properly.");
- } else {
- if (var3.size() != 0) {
- String var4 = "";
- String var5 = "";
- String var6 = "";
- String var7 = "";
- String var8 = "";
- if (this.isVBScript()) {
- var4 = "SET ";
- var5 = "=bsf.lookupBean(\"";
- var6 = "\")";
- var7 = ":";
- var8 = "";
- } else if (this.isJScript()) {
- var4 = "var ";
- var5 = "=bsf.lookupBean(\"";
- var6 = "\")";
- var7 = ";";
- var8 = var7;
- } else {
- if (!this.isPerlScript()) {
- throw new BSFException(BSFException.REASON_OTHER_ERROR, this.lang + " does not support undeclareBean.");
- }
-
- var4 = "$";
- var5 = "=$bsf->lookupBean('";
- var6 = "')";
- var7 = ";";
- var8 = var7;
- }
-
- StringBuffer var9 = new StringBuffer("");
- int var10 = var3.size();
-
- for(int var11 = 0; var11 < var10; ++var11) {
- BSFDeclaredBean var12 = (BSFDeclaredBean)var3.elementAt(var11);
- var9.append(var4 + var12.name + var5 + var12.name + var6 + (var11 < var10 - 1 ? var7 : var8));
- }
-
- this.exec("<declareBean>", 0, 0, var9.toString());
- }
-
- }
- }
- }
-
- public void exec(String var1, int var2, int var3, Object var4) throws BSFException {
- synchronized(this){}
-
- try {
- if (this.terminated()) {
- throw new BSFException(BSFException.REASON_OTHER_ERROR, "Exec or eval called after engine termination!");
- }
- } catch (Throwable var7) {
- throw var7;
- }
-
- this.nativeEval(this.css, var2, var3, var4.toString(), false);
- }
-
- public Object eval(String var1, int var2, int var3, Object var4) throws BSFException {
- if (!this.isPerlScript()) {
- return this.nativeEval(this.css, var2, var3, var4.toString(), true);
- } else {
- Integer var5 = new Integer(Thread.currentThread().hashCode());
- this.nativeEval(this.css, var2, var3, "$bsf->setEvalRet(" + var4.toString() + "); #via eval", false);
- Object var6 = this.evalRet.get(var5);
- if (var6 == this.evalRet) {
- var6 = null;
- }
-
- this.evalRet.put(var5, this.evalRet);
- return var6;
- }
- }
-
- public Object call(Object var1, String var2, Object[] var3) throws BSFException {
- StringBuffer var4 = new StringBuffer(300);
- var4.append(var1.toString());
- var4.append(".");
- var4.append(var2);
- var4.append("(");
- if (var3 != null) {
- for(int var5 = 0; var5 < var3.length; ++var5) {
- var4.append(var3[var5].toString());
- if (var5 < var3.length - 1) {
- var4.append(",");
- }
- }
- }
-
- var4.append(")");
- return this.eval("<internal>", -1, -1, var4.toString());
- }
-
- private final Object callBeanMethod(Object var1, String var2, Object[] var3) throws BSFException {
- if (var1.equals(this) && var2.equals("callMethodViaBSF")) {
- return this.callMethodViaBSF(var3[0]);
- } else {
- return var1.equals(this) && var2.equals("createBean") ? this.createBean(var3[0]) : EngineUtils.callBeanMethod(var1, var2, var3);
- }
- }
-
- final Object callMethodViaBSF(Object[] var1) throws BSFException {
- Object[] var2 = new Object[var1.length - 2];
- if (var1.length > 2) {
- System.arraycopy(var1, 2, var2, 0, var1.length - 2);
- }
-
- return EngineUtils.callBeanMethod(var1[0], (String)var1[1], var2);
- }
-
- final Object createBean(Object[] var1) throws BSFException {
- Object[] var2 = new Object[var1.length - 1];
- if (var1.length > 1) {
- System.arraycopy(var1, 1, var2, 0, var1.length - 1);
- }
-
- return EngineUtils.createBean((String)var1[0], var2);
- }
-
- public void addEventListener(Object var1, String var2, String var3, String var4) throws BSFException {
- EngineUtils.addEventListener(var1, var2, var3, this, this.bsfmgr, "ActiveScriptEngine", 0, 0, var4);
- }
-
- public final int bindMember(Object var1, String var2, short var3) throws Exception {
- return JavaBean.bindMember(var1.getClass(), var2, var3);
- }
-
- public final Object callMethod(Object var1, int var2, Object[] var3) throws Exception {
- return JavaBean.callMethod(this, var1, var2, var3);
- }
-
- public final Object lookupBean(String var1) {
- return this.bsfmgr.lookupBean(var1);
- }
-
- public final void declareBean(BSFDeclaredBean var1) throws BSFException {
- if (this.isVBScript()) {
- this.exec("<declareBean>", 0, 0, "SET " + var1.name + "=bsf.lookupBean(\"" + var1.name + "\") 'via declareBean");
- } else if (this.isJScript()) {
- this.exec("<declareBean>", 0, 0, "var " + var1.name + "=bsf.lookupBean(\"" + var1.name + "\"); //via declareBean");
- } else if (this.isPerlScript()) {
- this.exec("<declareBean>", 0, 0, "$" + var1.name + "=$bsf->lookupBean('" + var1.name + "'); #via declareBean");
- } else {
- throw new BSFException(BSFException.REASON_OTHER_ERROR, this.lang + " does not support declareBean.");
- }
- }
-
- public void undeclareBean(BSFDeclaredBean var1) throws BSFException {
- if (this.isVBScript()) {
- this.exec("<undeclareBean>", 0, 0, "SET " + var1.name + "=Nothing 'via undeclareBean");
- } else if (this.isJScript()) {
- this.exec("<undeclareBean>", 0, 0, var1.name + "=null; // via undeclareBean");
- } else if (this.isPerlScript()) {
- this.exec("<undeclareBean>", 0, 0, "undef " + var1.name + " ; #via undeclareBean");
- } else {
- throw new BSFException(BSFException.REASON_OTHER_ERROR, this.lang + " does not support undeclareBean.");
- }
- }
-
- private static final byte[] objectToVariant(Object var0) {
- byte[] var1 = new byte[16];
- if (var0 instanceof Boolean) {
- var1[0] = 11;
- var1[1] = 0;
- byte var2 = (byte)((Boolean)var0 ? 255 : 0);
- var1[8] = var2;
- var1[9] = var2;
- var1[10] = var2;
- var1[11] = var2;
- } else if (var0 instanceof Integer) {
- var1[0] = 3;
- var1[1] = 0;
- int var4 = (Integer)var0;
- var1[8] = (byte)var4;
- var1[9] = (byte)(var4 >>> 8 & 255);
- var1[10] = (byte)(var4 >>> 16 & 255);
- var1[11] = (byte)(var4 >>> 24 & 255);
- } else if (var0 instanceof String) {
- var1[0] = 8;
- var1[1] = 0;
- } else if (var0 instanceof Long) {
- var1[0] = 5;
- var1[1] = 0;
- long var5 = Double.doubleToLongBits((double)(Long)var0);
- var1[8] = (byte)((int)var5);
- var1[9] = (byte)((int)(var5 >>> 8 & 255L));
- var1[10] = (byte)((int)(var5 >>> 16 & 255L));
- var1[11] = (byte)((int)(var5 >>> 24 & 255L));
- var1[12] = (byte)((int)(var5 >>> 32 & 255L));
- var1[13] = (byte)((int)(var5 >>> 40 & 255L));
- var1[14] = (byte)((int)(var5 >>> 48 & 255L));
- var1[15] = (byte)((int)(var5 >>> 56 & 255L));
- } else if (var0 instanceof Short) {
- var1[0] = 2;
- var1[1] = 0;
- int var6 = Float.floatToIntBits((Float)var0);
- var1[8] = (byte)var6;
- var1[9] = (byte)(var6 >>> 8 & 255);
- var1[10] = (byte)(var6 >>> 16 & 255);
- var1[11] = (byte)(var6 >>> 24 & 255);
- } else if (var0 instanceof Float) {
- var1[0] = 4;
- var1[1] = 0;
- int var7 = Float.floatToIntBits((Float)var0);
- var1[8] = (byte)var7;
- var1[9] = (byte)(var7 >>> 8 & 255);
- var1[10] = (byte)(var7 >>> 16 & 255);
- var1[11] = (byte)(var7 >>> 24 & 255);
- } else if (var0 instanceof Double) {
- var1[0] = 5;
- var1[1] = 0;
- long var8 = Double.doubleToLongBits((Double)var0);
- var1[8] = (byte)((int)var8);
- var1[9] = (byte)((int)(var8 >>> 8 & 255L));
- var1[10] = (byte)((int)(var8 >>> 16 & 255L));
- var1[11] = (byte)((int)(var8 >>> 24 & 255L));
- var1[12] = (byte)((int)(var8 >>> 32 & 255L));
- var1[13] = (byte)((int)(var8 >>> 40 & 255L));
- var1[14] = (byte)((int)(var8 >>> 48 & 255L));
- var1[15] = (byte)((int)(var8 >>> 56 & 255L));
- } else if (var0 instanceof Byte) {
- var1[0] = 17;
- var1[1] = 0;
- byte var9 = (Byte)var0;
- var1[8] = var9;
- } else if (var0 instanceof Character) {
- var1[0] = 17;
- var1[1] = 0;
- byte var10 = (byte)(Character)var0;
- var1[8] = var10;
- } else if (var0 instanceof Void) {
- var1[0] = 1;
- var1[1] = 0;
- } else {
- var1[0] = 9;
- var1[1] = 0;
- }
-
- return var1;
- }
-
- public synchronized void terminate() throws BSFException {
- if (!this.terminated()) {
- byte[] var1 = this.css;
- this.css = null;
- this.bsfmgr = null;
- this.evalRet = null;
- this.lang = null;
- this.nativeTerminate(var1);
- }
-
- }
-
- protected void finalize() throws Throwable {
- this.terminate();
- super.finalize();
- }
-
- static {
- try {
- System.loadLibrary("bsfactivescriptengine");
- } catch (SecurityException var1) {
- dllLoadException = new BSFException(BSFException.REASON_OTHER_ERROR, "SecurityException loading library:bsfactivescriptengine " + ((Throwable)var1).getMessage(), var1);
- } catch (UnsatisfiedLinkError var2) {
- dllLoadException = new BSFException(BSFException.REASON_OTHER_ERROR, "UnsatisfiedLinkError loading library:bsfactivescriptengine " + ((Throwable)var2).getMessage(), var2);
- }
- }
- }
-