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

  1. package com.netscape.javascript;
  2.  
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.Method;
  5. import java.util.Hashtable;
  6.  
  7. public class NativeJavaObject implements Scriptable, Wrapper, Rescopeable {
  8.    public static final int CONVERSION_NONE = 0;
  9.    public static final int CONVERSION_TRIVIAL = 1;
  10.    public static final int CONVERSION_NONTRIVIAL = 2;
  11.    protected Object javaObject;
  12.    protected JavaMembers members;
  13.    private Hashtable fieldAndMethods;
  14.    static Class jsObjectClass;
  15.    static Constructor jsObjectCtor;
  16.    static Method jsObjectGetScriptable;
  17.    // $FF: synthetic field
  18.    private static Class class$com$netscape$javascript$Scriptable;
  19.  
  20.    public static Object coerceType(Class var0, Object var1) {
  21.       if (var1 == null) {
  22.          return null;
  23.       } else {
  24.          Class var2 = var1.getClass();
  25.          if (var2 == var0) {
  26.             return var1;
  27.          } else if (var0 == ScriptRuntime.StringClass) {
  28.             return ScriptRuntime.toString(var1);
  29.          } else if (var0 != Character.TYPE && var0 != ScriptRuntime.CharacterClass) {
  30.             if (var0 != ScriptRuntime.IntegerClass && var0 != Integer.TYPE) {
  31.                if (var0 != ScriptRuntime.LongClass && var0 != Long.TYPE) {
  32.                   if (var0 != ScriptRuntime.ByteClass && var0 != Byte.TYPE) {
  33.                      if (var0 != ScriptRuntime.ShortClass && var0 != Short.TYPE) {
  34.                         if (var0 != ScriptRuntime.DoubleClass && var0 != Double.TYPE) {
  35.                            if (var0 != ScriptRuntime.FloatClass && var0 != Float.TYPE) {
  36.                               if (var2 == ScriptRuntime.DoubleClass) {
  37.                                  return var1;
  38.                               } else {
  39.                                  return ScriptRuntime.NumberClass.isInstance(var1) ? new Double(((Number)var1).doubleValue()) : var1;
  40.                               }
  41.                            } else {
  42.                               return var2 == ScriptRuntime.FloatClass ? var1 : new Float(ScriptRuntime.toNumber(var1));
  43.                            }
  44.                         } else {
  45.                            return var2 == ScriptRuntime.DoubleClass ? var1 : new Double(ScriptRuntime.toNumber(var1));
  46.                         }
  47.                      } else {
  48.                         return new Short((short)((int)ScriptRuntime.toInteger(var1)));
  49.                      }
  50.                   } else {
  51.                      return new Byte((byte)((int)ScriptRuntime.toInteger(var1)));
  52.                   }
  53.                } else {
  54.                   return new Long((long)ScriptRuntime.toInteger(var1));
  55.                }
  56.             } else {
  57.                return new Integer((int)ScriptRuntime.toInteger(var1));
  58.             }
  59.          } else {
  60.             return var2 == ScriptRuntime.StringClass && ((String)var1).length() == 1 ? new Character(((String)var1).charAt(0)) : new Character((char)((int)ScriptRuntime.toInteger(var1)));
  61.          }
  62.       }
  63.    }
  64.  
  65.    public boolean hasInstance(Scriptable var1) {
  66.       return false;
  67.    }
  68.  
  69.    public static int getConversionWeight(Object var0, Class var1) {
  70.       Class var2 = var0.getClass();
  71.       if (var1.isPrimitive()) {
  72.          if (ScriptRuntime.NumberClass.isAssignableFrom(var2)) {
  73.             return 1;
  74.          } else if (var1 == Boolean.TYPE) {
  75.             return var2 == ScriptRuntime.BooleanClass ? 1 : 0;
  76.          } else if (var1 != Character.TYPE) {
  77.             return 2;
  78.          } else {
  79.             return !var2.isAssignableFrom(ScriptRuntime.CharacterClass) && (var2 != ScriptRuntime.StringClass || ((String)var0).length() != 1) ? 0 : 1;
  80.          }
  81.       } else if (var1 != ScriptRuntime.CharacterClass) {
  82.          return var1.isAssignableFrom(var2) ? 1 : 0;
  83.       } else {
  84.          return !var2.isAssignableFrom(ScriptRuntime.CharacterClass) && (var2 != ScriptRuntime.StringClass || ((String)var0).length() != 1) ? 0 : 1;
  85.       }
  86.    }
  87.  
  88.    public static Object wrap(Scriptable var0, Object var1, Class var2) {
  89.       if (var1 == null) {
  90.          return var1;
  91.       } else {
  92.          Class var3 = var1.getClass();
  93.          if (var2 != null && var2.isPrimitive()) {
  94.             if (var2 == Void.TYPE) {
  95.                return Undefined.instance;
  96.             } else {
  97.                return var2 == Character.TYPE ? new Integer((Character)var1) : var1;
  98.             }
  99.          } else if (var3.isArray()) {
  100.             return NativeJavaArray.wrap(var0, var1);
  101.          } else {
  102.             return var1 instanceof Scriptable ? var1 : new NativeJavaObject(var0, var1, var2);
  103.          }
  104.       }
  105.    }
  106.  
  107.    public Object get(String var1, Scriptable var2) {
  108.       if (this.fieldAndMethods != null) {
  109.          Object var3 = this.fieldAndMethods.get(var1);
  110.          if (var3 != null) {
  111.             return var3;
  112.          }
  113.       }
  114.  
  115.       return this.members.get(this, var1, this.javaObject, false);
  116.    }
  117.  
  118.    public Object get(int var1, Scriptable var2) {
  119.       throw this.members.reportMemberNotFound(Integer.toString(var1));
  120.    }
  121.  
  122.    public void put(String var1, Scriptable var2, Object var3) {
  123.       this.members.put(var1, this.javaObject, var3, false);
  124.    }
  125.  
  126.    public void put(int var1, Scriptable var2, Object var3) {
  127.       throw this.members.reportMemberNotFound(Integer.toString(var1));
  128.    }
  129.  
  130.    public Object getDefaultValue(Class var1) {
  131.       if (var1 != null && var1 != ScriptRuntime.StringClass) {
  132.          try {
  133.             if (var1 == ScriptRuntime.BooleanClass) {
  134.                return this.callConverter("booleanValue");
  135.             }
  136.  
  137.             if (var1 == ScriptRuntime.NumberClass) {
  138.                return this.callConverter("doubleValue");
  139.             }
  140.          } catch (JavaScriptException var2) {
  141.          }
  142.  
  143.          throw Context.reportRuntimeError(Context.getMessage("msg.default.value", (Object[])null));
  144.       } else {
  145.          return this.javaObject.toString();
  146.       }
  147.    }
  148.  
  149.    public NativeJavaObject(Object var1, JavaMembers var2) {
  150.       this.javaObject = var1;
  151.       this.members = var2;
  152.    }
  153.  
  154.    public NativeJavaObject(Scriptable var1, Object var2, Class var3) {
  155.       this.javaObject = var2;
  156.       Class var4 = var2 != null ? var2.getClass() : var3;
  157.       this.members = JavaMembers.lookupClass(var1, var4, var3);
  158.       this.fieldAndMethods = this.members.getFieldAndMethodsObjects(var2, false);
  159.    }
  160.  
  161.    public Scriptable getPrototype() {
  162.       return null;
  163.    }
  164.  
  165.    public void setPrototype(Scriptable var1) {
  166.    }
  167.  
  168.    public Scriptable getParentScope() {
  169.       return null;
  170.    }
  171.  
  172.    public void setParentScope(Scriptable var1) {
  173.    }
  174.  
  175.    Object callConverter(Function var1) throws JavaScriptException {
  176.       return var1.call(Context.getContext(), var1.getParentScope(), this, new Object[0]);
  177.    }
  178.  
  179.    Object callConverter(String var1) throws JavaScriptException {
  180.       Function var2 = this.getConverter(var1);
  181.       if (var2 == null) {
  182.          Object[] var3 = new Object[]{var1, this.javaObject.getClass().getName()};
  183.          throw Context.reportRuntimeError(Context.getMessage("msg.java.conversion.implicit_method", var3));
  184.       } else {
  185.          return this.callConverter(var2);
  186.       }
  187.    }
  188.  
  189.    // $FF: synthetic method
  190.    private static Class class$(String var0) {
  191.       try {
  192.          return Class.forName(var0);
  193.       } catch (ClassNotFoundException var2) {
  194.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  195.       }
  196.    }
  197.  
  198.    public synchronized Scriptable rescope(Hashtable var1) {
  199.       Scriptable var2 = (Scriptable)var1.get(this);
  200.       if (var2 != null) {
  201.          return var2;
  202.       } else {
  203.          try {
  204.             return (Scriptable)this.clone();
  205.          } catch (CloneNotSupportedException var4) {
  206.             throw new RuntimeException(((Throwable)var4).getMessage());
  207.          }
  208.       }
  209.    }
  210.  
  211.    public static void initJSObject() {
  212.    }
  213.  
  214.    Function getConverter(String var1) {
  215.       Object var2 = this.get(var1, this);
  216.       return var2 instanceof Function ? (Function)var2 : null;
  217.    }
  218.  
  219.    public boolean has(String var1, Scriptable var2) {
  220.       return this.members.has(var1, false);
  221.    }
  222.  
  223.    public boolean has(int var1, Scriptable var2) {
  224.       return false;
  225.    }
  226.  
  227.    public void delete(String var1) {
  228.    }
  229.  
  230.    public void delete(int var1) {
  231.    }
  232.  
  233.    public Object[] getIds() {
  234.       return this.members.getIds(false);
  235.    }
  236.  
  237.    public Object unwrap() {
  238.       return this.javaObject;
  239.    }
  240.  
  241.    public static boolean canConvert(Object var0, Class var1) {
  242.       if (var0 == null) {
  243.          return true;
  244.       } else {
  245.          return getConversionWeight(var0, var1) == 1;
  246.       }
  247.    }
  248.  
  249.    public String getClassName() {
  250.       return "JavaObject";
  251.    }
  252. }
  253.