home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2003 January / maximum-cd-2003-01.iso / Software / Apps / OperawithJava / ow32enen700b1j.exe / OPERA.JAR / netscape / javascript / JSObject.class (.txt) < prev   
Encoding:
Java Class File  |  2002-11-05  |  4.0 KB  |  239 lines

  1. package netscape.javascript;
  2.  
  3. import java.applet.Applet;
  4. import opera.EcmaScriptObject;
  5. import opera.PluginContext;
  6.  
  7. public final class JSObject {
  8.    private EcmaScriptObject ecma_object;
  9.    private Object result;
  10.    private Object result_mutex = new Object();
  11.  
  12.    private JSObject(int var1, int var2) {
  13.       this.ecma_object = EcmaScriptObject.getObject(var1, var2);
  14.       if (this.ecma_object != null) {
  15.          this.ecma_object.ref();
  16.       }
  17.  
  18.    }
  19.  
  20.    public Object call(String var1, Object[] var2) throws JSException {
  21.       try {
  22.          JSObject var3 = (JSObject)this.getMember(var1);
  23.          Object var4 = this.result_mutex;
  24.          synchronized(var4) {
  25.             Object var6;
  26.             synchronized(this) {
  27.                if (var3 == null) {
  28.                   throw new JSException("Method " + var1 + " not found.");
  29.                }
  30.  
  31.                if (this.startCall(var3, var2)) {
  32.                   this.wait();
  33.                   if (this.result instanceof JSException) {
  34.                      throw (JSException)this.result;
  35.                   }
  36.                } else {
  37.                   this.result = null;
  38.                }
  39.  
  40.                var6 = this.result;
  41.             }
  42.  
  43.             return var6;
  44.          }
  45.       } catch (InterruptedException var11) {
  46.          return null;
  47.       }
  48.    }
  49.  
  50.    private native boolean startCall(JSObject var1, Object[] var2);
  51.  
  52.    public boolean equals(Object var1) {
  53.       return var1 instanceof JSObject && ((JSObject)var1).ecma_object.equals(this.ecma_object);
  54.    }
  55.  
  56.    public Object eval(String var1) throws JSException {
  57.       try {
  58.          Object var2 = this.result_mutex;
  59.          synchronized(var2) {
  60.             Object var4;
  61.             synchronized(this) {
  62.                if (this.startEval(var1)) {
  63.                   this.wait();
  64.                   if (this.result instanceof JSException) {
  65.                      throw (JSException)this.result;
  66.                   }
  67.                } else {
  68.                   this.result = null;
  69.                }
  70.  
  71.                var4 = this.result;
  72.             }
  73.  
  74.             return var4;
  75.          }
  76.       } catch (InterruptedException var9) {
  77.          return null;
  78.       }
  79.    }
  80.  
  81.    private native boolean startEval(String var1);
  82.  
  83.    public static JSObject getWindow(Applet var0) throws JSException {
  84.       if (var0.getParameter("mayscript") == null) {
  85.          throw new JSException("Applet not allowed to access javascript.");
  86.       } else {
  87.          PluginContext var1 = (PluginContext)var0.getAppletContext();
  88.          if (var1 != null) {
  89.             int var2 = var1.getJSWindow();
  90.             int var3 = var1.getESRuntime();
  91.             if (var2 != 0 && var3 != 0) {
  92.                return new JSObject(var2, var3);
  93.             }
  94.          }
  95.  
  96.          return null;
  97.       }
  98.    }
  99.  
  100.    public Object getMember(String var1) {
  101.       try {
  102.          Object var2 = this.result_mutex;
  103.          synchronized(var2) {
  104.             Object var4;
  105.             synchronized(this) {
  106.                if (this.getMemberN(var1)) {
  107.                   this.wait();
  108.                } else {
  109.                   this.result = null;
  110.                }
  111.  
  112.                var4 = this.result;
  113.             }
  114.  
  115.             return var4;
  116.          }
  117.       } catch (InterruptedException var9) {
  118.          return null;
  119.       }
  120.    }
  121.  
  122.    private native boolean getMemberN(String var1);
  123.  
  124.    public void setMember(String var1, Object var2) {
  125.       try {
  126.          Object var3 = this.result_mutex;
  127.          synchronized(var3) {
  128.             synchronized(this) {
  129.                if (this.setMemberN(var1, var2)) {
  130.                   this.wait();
  131.                }
  132.             }
  133.          }
  134.       } catch (InterruptedException var9) {
  135.       }
  136.  
  137.    }
  138.  
  139.    private native boolean setMemberN(String var1, Object var2);
  140.  
  141.    public void removeMember(String var1) {
  142.       try {
  143.          Object var2 = this.result_mutex;
  144.          synchronized(var2) {
  145.             synchronized(this) {
  146.                if (this.removeMemberN(var1)) {
  147.                   this.wait();
  148.                }
  149.             }
  150.          }
  151.       } catch (InterruptedException var8) {
  152.       }
  153.  
  154.    }
  155.  
  156.    private native boolean removeMemberN(String var1);
  157.  
  158.    public Object getSlot(int var1) {
  159.       try {
  160.          Object var2 = this.result_mutex;
  161.          synchronized(var2) {
  162.             Object var4;
  163.             synchronized(this) {
  164.                if (this.getSlotN(var1)) {
  165.                   this.wait();
  166.                } else {
  167.                   this.result = null;
  168.                }
  169.  
  170.                var4 = this.result;
  171.             }
  172.  
  173.             return var4;
  174.          }
  175.       } catch (InterruptedException var9) {
  176.          return null;
  177.       }
  178.    }
  179.  
  180.    private native boolean getSlotN(int var1);
  181.  
  182.    public void setSlot(int var1, Object var2) {
  183.       try {
  184.          Object var3 = this.result_mutex;
  185.          synchronized(var3) {
  186.             synchronized(this) {
  187.                if (this.setSlotN(var1, var2)) {
  188.                   this.wait();
  189.                }
  190.             }
  191.          }
  192.       } catch (InterruptedException var9) {
  193.       }
  194.  
  195.    }
  196.  
  197.    private native boolean setSlotN(int var1, Object var2);
  198.  
  199.    public String toString() {
  200.       try {
  201.          Object var1 = this.eval("this.toString()");
  202.          return var1 != null && var1 instanceof String ? (String)var1 : null;
  203.       } catch (JSException var2) {
  204.          return null;
  205.       }
  206.    }
  207.  
  208.    protected void finalize() {
  209.       try {
  210.          if (this.ecma_object != null) {
  211.             this.ecma_object.unref();
  212.          }
  213.  
  214.          super.finalize();
  215.       } catch (Throwable var2) {
  216.       }
  217.  
  218.    }
  219.  
  220.    private void setResult(Object var1) {
  221.       synchronized(this) {
  222.          this.result = var1;
  223.          this.notify();
  224.       }
  225.    }
  226.  
  227.    private void setExceptionResult() {
  228.       this.result = new JSException("JavaScript exception");
  229.    }
  230.  
  231.    private int getESObjectPtr() {
  232.       return this.ecma_object != null ? this.ecma_object.getESObjectPtr() : 0;
  233.    }
  234.  
  235.    private int getESRuntimePtr() {
  236.       return this.ecma_object != null ? this.ecma_object.getESRuntimePtr() : 0;
  237.    }
  238. }
  239.