home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / netscape / javascript / NativeJavaClass.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-09  |  5.0 KB  |  128 lines

  1. package com.netscape.javascript;
  2.  
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.InvocationTargetException;
  5. import java.lang.reflect.Member;
  6. import java.util.Hashtable;
  7.  
  8. public class NativeJavaClass extends NativeJavaObject implements Function {
  9.    private Hashtable fieldAndMethods;
  10.  
  11.    public Scriptable construct(Context var1, Scriptable var2, Object[] var3) throws JavaScriptException {
  12.       for(int var4 = 0; var4 < var3.length; ++var4) {
  13.          if (var3[var4] instanceof Wrapper) {
  14.             var3[var4] = ((Wrapper)var3[var4]).unwrap();
  15.          }
  16.       }
  17.  
  18.       Constructor[] var17 = super.members.getConstructors();
  19.       Member var5 = NativeJavaMethod.findFunction(var17, var3);
  20.       Constructor var6 = (Constructor)var5;
  21.       if (var6 == null) {
  22.          String var18 = NativeJavaMethod.signature(var3);
  23.          Object[] var20 = new Object[]{this.getClassObject().getName(), var18};
  24.          throw Context.reportRuntimeError(Context.getMessage("msg.no.java.ctor", var20));
  25.       } else {
  26.          Class[] var7 = var6.getParameterTypes();
  27.  
  28.          for(int var8 = 0; var8 < var3.length; ++var8) {
  29.             var3[var8] = NativeJavaObject.coerceType(var7[var8], var3[var8]);
  30.          }
  31.  
  32.          Object var19;
  33.          try {
  34.             var19 = var6.newInstance(var3);
  35.          } catch (InstantiationException var13) {
  36.             Object[] var22 = new Object[]{((Throwable)var13).getMessage(), this.getClassObject().getName()};
  37.             throw Context.reportRuntimeError(Context.getMessage("msg.cant.instantiate", var22));
  38.          } catch (IllegalArgumentException var14) {
  39.             String var21 = NativeJavaMethod.signature(var3);
  40.             String var11 = var6.toString();
  41.             Object[] var12 = new Object[]{((Throwable)var14).getMessage(), var11, var21};
  42.             throw Context.reportRuntimeError(Context.getMessage("msg.bad.ctor.sig", var12));
  43.          } catch (InvocationTargetException var15) {
  44.             throw JavaScriptException.wrapException(var2, var15);
  45.          } catch (IllegalAccessException var16) {
  46.             Object[] var10 = new Object[]{((Throwable)var16).getMessage()};
  47.             throw Context.reportRuntimeError(Context.getMessage("msg.java.internal.private", var10));
  48.          }
  49.  
  50.          Scriptable var9 = ScriptableObject.getTopLevelScope(this);
  51.          return (Scriptable)NativeJavaObject.wrap(var9, var19, this.getClassObject());
  52.       }
  53.    }
  54.  
  55.    public boolean hasInstance(Scriptable var1) {
  56.       if (var1 instanceof NativeJavaObject) {
  57.          Object var2 = ((NativeJavaObject)var1).unwrap();
  58.          return this.getClassObject().isInstance(var2);
  59.       } else {
  60.          return false;
  61.       }
  62.    }
  63.  
  64.    public Class getClassObject() {
  65.       return (Class)super.unwrap();
  66.    }
  67.  
  68.    public static NativeJavaClass wrap(Scriptable var0, Class var1) {
  69.       return new NativeJavaClass(var0, var1);
  70.    }
  71.  
  72.    public Object get(String var1, Scriptable var2) {
  73.       if (var1.equals("prototype")) {
  74.          return null;
  75.       } else {
  76.          if (this.fieldAndMethods != null) {
  77.             Object var3 = this.fieldAndMethods.get(var1);
  78.             if (var3 != null) {
  79.                return var3;
  80.             }
  81.          }
  82.  
  83.          return super.members.get(this, var1, super.javaObject, true);
  84.       }
  85.    }
  86.  
  87.    public void put(String var1, Scriptable var2, Object var3) {
  88.       super.members.put(var1, super.javaObject, var3, true);
  89.    }
  90.  
  91.    public Object getDefaultValue(Class var1) {
  92.       if (var1 != null && var1 != ScriptRuntime.StringClass) {
  93.          if (var1 == ScriptRuntime.BooleanClass) {
  94.             return Boolean.TRUE;
  95.          } else {
  96.             return var1 == ScriptRuntime.NumberClass ? ScriptRuntime.NaNobj : this;
  97.          }
  98.       } else {
  99.          return this.toString();
  100.       }
  101.    }
  102.  
  103.    public String toString() {
  104.       return "[JavaClass " + this.getClassObject().getName() + "]";
  105.    }
  106.  
  107.    public NativeJavaClass(Scriptable var1, Class var2) {
  108.       super(var2, JavaMembers.lookupClass(var1, var2, var2));
  109.       this.fieldAndMethods = super.members.getFieldAndMethodsObjects(super.javaObject, false);
  110.    }
  111.  
  112.    public Object call(Context var1, Scriptable var2, Scriptable var3, Object[] var4) throws JavaScriptException {
  113.       return this.construct(var1, var2, var4);
  114.    }
  115.  
  116.    public boolean has(String var1, Scriptable var2) {
  117.       return super.members.has(var1, true);
  118.    }
  119.  
  120.    public Object[] getIds() {
  121.       return super.members.getIds(true);
  122.    }
  123.  
  124.    public String getClassName() {
  125.       return "JavaClass";
  126.    }
  127. }
  128.