JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / javascript / JSFunctionExec.js
1 Clazz.declarePackage ("jalview.javascript");\r
2 Clazz.load (null, "jalview.javascript.JSFunctionExec", ["jalview.bin.JalviewLite", "java.lang.StringBuffer", "$.Thread", "java.net.MalformedURLException", "$.URL", "netscape.javascript.JSException", "$.JSObject"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.jvlite = null;\r
5 this.jsExecQueue = null;\r
6 this.executor = null;\r
7 Clazz.instantialize (this, arguments);\r
8 }, jalview.javascript, "JSFunctionExec", null, Runnable);\r
9 Clazz.makeConstructor (c$, \r
10 function (applet) {\r
11 this.jvlite = applet;\r
12 this.jsExecQueue = this.jvlite.getJsExecQueue ();\r
13 this.jvlite.setExecutor (this);\r
14 }, "jalview.bin.JalviewLite");\r
15 Clazz.overrideMethod (c$, "finalize", \r
16 function () {\r
17 this.jvlite = null;\r
18 this.executor = null;\r
19 if (this.jsExecQueue != null) {\r
20 this.jsExecQueue.clear ();\r
21 }this.jsExecQueue = null;\r
22 });\r
23 Clazz.defineMethod (c$, "stopQueue", \r
24 function () {\r
25 if (this.jsExecQueue != null) {\r
26 var q = null;\r
27 {\r
28 q = this.jsExecQueue;\r
29 this.jsExecQueue = null;\r
30 }if (q != null) {\r
31 for (var jx, $jx = q.iterator (); $jx.hasNext () && ((jx = $jx.next ()) || true);) {\r
32 jx.jvlite = null;\r
33 }\r
34 q.removeAllElements ();\r
35 {\r
36 q.notifyAll ();\r
37 }}}this.jvlite = null;\r
38 this.executor = null;\r
39 });\r
40 Clazz.defineMethod (c$, "run", \r
41 function () {\r
42 while (this.jsExecQueue != null) {\r
43 if (this.jsExecQueue.size () > 0) {\r
44 var r = this.jsExecQueue.elementAt (0);\r
45 this.jsExecQueue.removeElementAt (0);\r
46 try {\r
47 r.run ();\r
48 } catch (e$$) {\r
49 if (Clazz.exceptionOf (e$$, Exception)) {\r
50 var ex = e$$;\r
51 {\r
52 ex.printStackTrace ();\r
53 }\r
54 } else if (Clazz.exceptionOf (e$$, Error)) {\r
55 var ex = e$$;\r
56 {\r
57 ex.printStackTrace ();\r
58 }\r
59 } else {\r
60 throw e$$;\r
61 }\r
62 }\r
63 } else {\r
64 try {\r
65 {\r
66 this.jsExecQueue.wait (1000);\r
67 }} catch (ex) {\r
68 if (Clazz.exceptionOf (ex, Exception)) {\r
69 } else {\r
70 throw ex;\r
71 }\r
72 }\r
73 ;}}\r
74 });\r
75 Clazz.defineMethod (c$, "executeJavascriptFunction", \r
76 function (_listener, objects) {\r
77 this.executeJavascriptFunction (false, _listener, objects);\r
78 }, "~S,~A");\r
79 Clazz.defineMethod (c$, "executeJavascriptFunction", \r
80 function (async, _listener, $arguments) {\r
81 this.executeJavascriptFunction (async, _listener, $arguments, null);\r
82 }, "~B,~S,~A");\r
83 Clazz.defineMethod (c$, "executeJavascriptFunction", \r
84 function (async, _listener, $arguments, dbgMsg) {\r
85 var objects =  new Array ($arguments != null ? $arguments.length : 0);\r
86 if ($arguments != null) {\r
87 System.arraycopy ($arguments, 0, objects, 0, $arguments.length);\r
88 }var jsex =  new Array (1);\r
89 var exec = ((Clazz.isClassDefined ("jalview.javascript.JSFunctionExec$1") ? 0 : jalview.javascript.JSFunctionExec.$JSFunctionExec$1$ ()), Clazz.innerTypeInstance (jalview.javascript.JSFunctionExec$1, this, Clazz.cloneFinals ("dbgMsg", dbgMsg, "_listener", _listener, "objects", objects, "jsex", jsex, "async", async)));\r
90 if (async) {\r
91 if (this.executor == null) {\r
92 this.executor =  new Thread ( new jalview.javascript.JSFunctionExec (this.jvlite));\r
93 this.executor.start ();\r
94 }{\r
95 this.jsExecQueue.addElement (exec);\r
96 this.jsExecQueue.notify ();\r
97 }} else {\r
98 exec.run ();\r
99 if (jsex[0] != null) {\r
100 throw (jsex[0]);\r
101 }}}, "~B,~S,~A,~S");\r
102 c$.$JSFunctionExec$1$ = function () {\r
103 Clazz.pu$h ();\r
104 c$ = Clazz.declareAnonymous (jalview.javascript, "JSFunctionExec$1", null, Runnable);\r
105 Clazz.defineMethod (c$, "run", \r
106 function () {\r
107 try {\r
108 var scriptObject = null;\r
109 try {\r
110 scriptObject = netscape.javascript.JSObject.getWindow (this.b$["jalview.javascript.JSFunctionExec"].jvlite);\r
111 } catch (ex) {\r
112 if (Clazz.exceptionOf (ex, Exception)) {\r
113 } else {\r
114 throw ex;\r
115 }\r
116 }\r
117 ;if (scriptObject != null) {\r
118 if (jalview.bin.JalviewLite.debug && this.f$.dbgMsg != null) {\r
119 System.err.println (this.f$.dbgMsg);\r
120 }scriptObject.call (this.f$._listener, this.f$.objects);\r
121 }} catch (jex) {\r
122 if (Clazz.exceptionOf (jex, Exception)) {\r
123 if (!(Clazz.instanceOf (jex, java.net.MalformedURLException))) {\r
124 if (jalview.bin.JalviewLite.debug) {\r
125 System.err.println (jex);\r
126 }if (Clazz.instanceOf (jex, netscape.javascript.JSException) && this.b$["jalview.javascript.JSFunctionExec"].jvlite.jsfallbackEnabled) {\r
127 this.f$.jsex[0] = jex;\r
128 if (jalview.bin.JalviewLite.debug) {\r
129 System.err.println ("Falling back to javascript: url call");\r
130 }var sb =  new StringBuffer ("javascript:" + this.f$._listener + "(");\r
131 for (var i = 0; this.f$.objects != null && i < this.f$.objects.length; i++) {\r
132 if (i > 0) {\r
133 sb.append (",");\r
134 }sb.append ("\"");\r
135 if (this.f$.objects[i] != null && !(this.f$.objects[i].getClass ().getName ().indexOf ("jalview") == 0)) {\r
136 sb.append (this.f$.objects[i].toString ());\r
137 }sb.append ("\"");\r
138 }\r
139 sb.append (")");\r
140 if (jalview.bin.JalviewLite.debug) {\r
141 System.err.println (sb.toString ());\r
142 }var url = null;\r
143 try {\r
144 url =  new java.net.URL (sb.toString ());\r
145 this.b$["jalview.javascript.JSFunctionExec"].jvlite.getAppletContext ().showDocument (url);\r
146 jex = null;\r
147 } catch (uex) {\r
148 if (Clazz.exceptionOf (uex, Exception)) {\r
149 jex = uex;\r
150 } else {\r
151 throw uex;\r
152 }\r
153 }\r
154 }if (jex != null) {\r
155 if (this.f$.async) {\r
156 jex.printStackTrace ();\r
157 } else {\r
158 this.f$.jsex[0] = jex;\r
159 }};}} else {\r
160 throw jex;\r
161 }\r
162 }\r
163 });\r
164 c$ = Clazz.p0p ();\r
165 };\r
166 });\r