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

  1. package com.netscape.javascript;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.Hashtable;
  5.  
  6. public class FlattenedObject {
  7.    private Scriptable obj;
  8.  
  9.    public Scriptable construct(Context var1, Object[] var2) throws NotAFunctionException, JavaScriptException {
  10.       if (!(this.obj instanceof Function)) {
  11.          throw new NotAFunctionException();
  12.       } else {
  13.          return ScriptRuntime.newObject(var1, this.obj, var2);
  14.       }
  15.    }
  16.  
  17.    public Object getProperty(Object var1) {
  18.       String var2 = ScriptRuntime.getStringId(var1);
  19.       int var3 = var2 == null ? ScriptRuntime.getIntId(var1) : 0;
  20.       Scriptable var4 = this.obj;
  21.  
  22.       do {
  23.          Object var5 = var2 == null ? var4.get(var3, this.obj) : var4.get(var2, this.obj);
  24.          if (var5 != Scriptable.NOT_FOUND) {
  25.             if (var5 instanceof Scriptable) {
  26.                return new FlattenedObject((Scriptable)var5);
  27.             }
  28.  
  29.             return var5;
  30.          }
  31.  
  32.          var4 = var4.getPrototype();
  33.       } while(var4 != null);
  34.  
  35.       return Undefined.instance;
  36.    }
  37.  
  38.    public void putProperty(Object var1, Object var2) {
  39.       String var3 = ScriptRuntime.getStringId(var1);
  40.       if (var2 instanceof FlattenedObject) {
  41.          var2 = ((FlattenedObject)var2).getObject();
  42.       }
  43.  
  44.       if (var3 == null) {
  45.          int var5 = ScriptRuntime.getIntId(var1);
  46.          Scriptable var6 = getBase(this.obj, var5);
  47.          if (var6 == null) {
  48.             var6 = this.obj;
  49.          }
  50.  
  51.          var6.put(var5, this.obj, var2);
  52.       } else {
  53.          Scriptable var4 = getBase(this.obj, var3);
  54.          if (var4 == null) {
  55.             var4 = this.obj;
  56.          }
  57.  
  58.          var4.put(var3, this.obj, var2);
  59.       }
  60.    }
  61.  
  62.    public Object callMethod(Object var1, Object[] var2) throws PropertyException, NotAFunctionException, JavaScriptException {
  63.       if (!this.hasProperty(var1)) {
  64.          throw new PropertyException(Context.getMessage("msg.prop.not.found", (Object[])null));
  65.       } else {
  66.          Object var3 = this.getProperty(var1);
  67.          if (var3 instanceof FlattenedObject) {
  68.             return ((FlattenedObject)var3).call(Context.getContext(), this.obj, var2);
  69.          } else {
  70.             throw new NotAFunctionException();
  71.          }
  72.       }
  73.    }
  74.  
  75.    public FlattenedObject(Scriptable var1) {
  76.       this.obj = var1;
  77.    }
  78.  
  79.    private static Scriptable getBase(Scriptable var0, String var1) {
  80.       for(Scriptable var2 = var0; var2 != null; var2 = var2.getPrototype()) {
  81.          if (var2.has(var1, var0)) {
  82.             return var2;
  83.          }
  84.       }
  85.  
  86.       return null;
  87.    }
  88.  
  89.    public boolean hasProperty(Object var1) {
  90.       String var2 = ScriptRuntime.toString(var1);
  91.       String var3 = ScriptRuntime.getStringId(var2);
  92.       if (var3 == null) {
  93.          return getBase(this.obj, ScriptRuntime.getIntId(var2)) != null;
  94.       } else {
  95.          return getBase(this.obj, var3) != null;
  96.       }
  97.    }
  98.  
  99.    private static Scriptable getBase(Scriptable var0, int var1) {
  100.       for(Scriptable var2 = var0; var2 != null; var2 = var2.getPrototype()) {
  101.          if (var2.has(var1, var0)) {
  102.             return var2;
  103.          }
  104.       }
  105.  
  106.       return null;
  107.    }
  108.  
  109.    public Object call(Context var1, Scriptable var2, Object[] var3) throws NotAFunctionException, JavaScriptException {
  110.       if (!(this.obj instanceof Function)) {
  111.          throw new NotAFunctionException();
  112.       } else {
  113.          return ScriptRuntime.call(var1, this.obj, var2, var3);
  114.       }
  115.    }
  116.  
  117.    public Object[] getIds() {
  118.       Hashtable var1 = new Hashtable(11);
  119.  
  120.       for(Scriptable var2 = this.obj; var2 != null; var2 = var2.getPrototype()) {
  121.          Object[] var3 = var2.getIds();
  122.  
  123.          for(int var4 = 0; var4 < var3.length; ++var4) {
  124.             var1.put(var3[var4], Boolean.TRUE);
  125.          }
  126.       }
  127.  
  128.       Enumeration var7 = var1.keys();
  129.       Object[] var5 = new Object[var1.size()];
  130.  
  131.       Object var8;
  132.       for(int var6 = 0; var7.hasMoreElements(); var5[var6++] = var8) {
  133.          var8 = var7.nextElement();
  134.       }
  135.  
  136.       return var5;
  137.    }
  138.  
  139.    public boolean deleteProperty(Object var1) {
  140.       String var2 = ScriptRuntime.getStringId(var1);
  141.       if (var2 == null) {
  142.          int var5 = ScriptRuntime.getIntId(var1);
  143.          Scriptable var4 = getBase(this.obj, var5);
  144.          if (var4 == null) {
  145.             return true;
  146.          } else {
  147.             var4.delete(var5);
  148.             return !var4.has(var5, var4);
  149.          }
  150.       } else {
  151.          Scriptable var3 = getBase(this.obj, var2);
  152.          if (var3 == null) {
  153.             return true;
  154.          } else {
  155.             var3.delete(var2);
  156.             return !var3.has(var2, var3);
  157.          }
  158.       }
  159.    }
  160.  
  161.    public Scriptable getObject() {
  162.       return this.obj;
  163.    }
  164. }
  165.