JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / workers / AlignCalcManager.js
1 Clazz.declarePackage ("jalview.workers");\r
2 Clazz.load (["jalview.api.AlignCalcManagerI", "java.util.ArrayList", "$.Collections", "$.HashSet", "$.Hashtable"], "jalview.workers.AlignCalcManager", null, function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.restartable = null;\r
5 this.blackList = null;\r
6 this.inProgress = null;\r
7 this.updating = null;\r
8 this.canUpdate = null;\r
9 Clazz.instantialize (this, arguments);\r
10 }, jalview.workers, "AlignCalcManager", null, jalview.api.AlignCalcManagerI);\r
11 Clazz.prepareFields (c$, function () {\r
12 this.restartable = java.util.Collections.synchronizedList ( new java.util.ArrayList ());\r
13 this.blackList = java.util.Collections.synchronizedList ( new java.util.ArrayList ());\r
14 this.inProgress = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());\r
15 this.updating = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());\r
16 this.canUpdate =  new java.util.HashSet ();\r
17 });\r
18 Clazz.overrideMethod (c$, "notifyStart", \r
19 function (worker) {\r
20 {\r
21 var upd = this.updating.get (worker.getClass ());\r
22 if (upd == null) {\r
23 this.updating.put (worker.getClass (), upd = java.util.Collections.synchronizedList ( new java.util.ArrayList ()));\r
24 }{\r
25 upd.add (worker);\r
26 }}}, "jalview.api.AlignCalcWorkerI");\r
27 Clazz.overrideMethod (c$, "alreadyDoing", \r
28 function (worker) {\r
29 {\r
30 return this.inProgress.containsKey (worker.getClass ());\r
31 }}, "jalview.api.AlignCalcWorkerI");\r
32 Clazz.overrideMethod (c$, "isPending", \r
33 function (workingClass) {\r
34 var upd;\r
35 {\r
36 upd = this.updating.get (workingClass.getClass ());\r
37 if (upd == null) {\r
38 return false;\r
39 }{\r
40 if (upd.size () > 1) {\r
41 return true;\r
42 }}return false;\r
43 }}, "jalview.api.AlignCalcWorkerI");\r
44 Clazz.defineMethod (c$, "numberLive", \r
45 function (worker) {\r
46 {\r
47 var upd = this.updating.get (worker.getClass ());\r
48 if (upd == null) {\r
49 return 0;\r
50 };return upd.size ();\r
51 }}, "jalview.api.AlignCalcWorkerI");\r
52 Clazz.overrideMethod (c$, "notifyWorking", \r
53 function (worker) {\r
54 {\r
55 if (this.inProgress.get (worker.getClass ()) != null) {\r
56 if (false) {\r
57 System.err.println ("Warning: Multiple workers are running of type " + worker.getClass ());\r
58 }return false;\r
59 }this.inProgress.put (worker.getClass (), worker);\r
60 }return true;\r
61 }, "jalview.api.AlignCalcWorkerI");\r
62 Clazz.overrideMethod (c$, "workerComplete", \r
63 function (worker) {\r
64 {\r
65 this.inProgress.remove (worker.getClass ());\r
66 var upd = this.updating.get (worker.getClass ());\r
67 if (upd != null) {\r
68 {\r
69 upd.remove (worker);\r
70 }this.canUpdate.add (worker);\r
71 }}}, "jalview.api.AlignCalcWorkerI");\r
72 Clazz.overrideMethod (c$, "workerCannotRun", \r
73 function (worker) {\r
74 {\r
75 this.blackList.add (worker.getClass ());\r
76 }}, "jalview.api.AlignCalcWorkerI");\r
77 Clazz.defineMethod (c$, "isBlackListed", \r
78 function (workerType) {\r
79 {\r
80 return this.blackList.contains (workerType);\r
81 }}, "Class");\r
82 Clazz.overrideMethod (c$, "startWorker", \r
83 function (worker) {\r
84 var workerAsThread = worker;\r
85 if (workerAsThread.isAlive ()) {\r
86 workerAsThread.interrupt ();\r
87 worker = worker.getNewWorker ();\r
88 }worker.setName (worker.getClass ().getName ());\r
89 worker.start ();\r
90 }, "jalview.api.AlignCalcWorkerI");\r
91 Clazz.defineMethod (c$, "isWorking", \r
92 function (worker) {\r
93 {\r
94 return worker != null && this.inProgress.get (worker.getClass ()) === worker;\r
95 }}, "jalview.api.AlignCalcWorkerI");\r
96 Clazz.defineMethod (c$, "isWorking", \r
97 function () {\r
98 {\r
99 return this.inProgress.size () > 0;\r
100 }});\r
101 Clazz.overrideMethod (c$, "registerWorker", \r
102 function (worker) {\r
103 {\r
104 if (!this.restartable.contains (worker)) {\r
105 this.restartable.add (worker);\r
106 }this.startWorker (worker);\r
107 }}, "jalview.api.AlignCalcWorkerI");\r
108 Clazz.overrideMethod (c$, "restartWorkers", \r
109 function () {\r
110 {\r
111 for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {\r
112 this.startWorker (worker);\r
113 }\r
114 }});\r
115 Clazz.overrideMethod (c$, "workingInvolvedWith", \r
116 function (alignmentAnnotation) {\r
117 {\r
118 for (var worker, $worker = this.inProgress.values ().iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {\r
119 if (worker.involves (alignmentAnnotation)) {\r
120 return true;\r
121 }}\r
122 }{\r
123 for (var workers, $workers = this.updating.values ().iterator (); $workers.hasNext () && ((workers = $workers.next ()) || true);) {\r
124 for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {\r
125 if (worker.involves (alignmentAnnotation)) {\r
126 return true;\r
127 }}\r
128 }\r
129 }return false;\r
130 }, "jalview.datamodel.AlignmentAnnotation");\r
131 Clazz.overrideMethod (c$, "updateAnnotationFor", \r
132 function (workerClass) {\r
133 var workers;\r
134 {\r
135 workers = this.canUpdate.toArray ( new Array (0));\r
136 }for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {\r
137 if (workerClass.equals (worker.getClass ())) {\r
138 worker.updateAnnotation ();\r
139 }}\r
140 }, "Class");\r
141 Clazz.overrideMethod (c$, "getRegisteredWorkersOfClass", \r
142 function (workerClass) {\r
143 var workingClass =  new java.util.ArrayList ();\r
144 var workers;\r
145 {\r
146 workers = this.canUpdate.toArray ( new Array (this.canUpdate.size ()));\r
147 }for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {\r
148 if (workerClass.equals (worker.getClass ())) {\r
149 workingClass.add (worker);\r
150 }}\r
151 return (workingClass.size () == 0) ? null : workingClass;\r
152 }, "Class");\r
153 Clazz.overrideMethod (c$, "startRegisteredWorkersOfClass", \r
154 function (workerClass) {\r
155 var workers = this.getRegisteredWorkersOfClass (workerClass);\r
156 if (workers == null) {\r
157 return false;\r
158 }for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {\r
159 if (!this.isPending (worker)) {\r
160 this.startWorker (worker);\r
161 } else {\r
162 System.err.println ("Pending exists for " + workerClass);\r
163 }}\r
164 return true;\r
165 }, "Class");\r
166 Clazz.overrideMethod (c$, "workerMayRun", \r
167 function (worker) {\r
168 {\r
169 if (this.blackList.contains (worker.getClass ())) {\r
170 this.blackList.remove (worker.getClass ());\r
171 }}}, "jalview.api.AlignCalcWorkerI");\r
172 Clazz.overrideMethod (c$, "removeRegisteredWorkersOfClass", \r
173 function (typeToRemove) {\r
174 var workers = this.getRegisteredWorkersOfClass (typeToRemove);\r
175 var removable =  new java.util.ArrayList ();\r
176 var toremovannot =  new java.util.HashSet ();\r
177 {\r
178 for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {\r
179 if (typeToRemove.equals (worker.getClass ())) {\r
180 removable.add (worker);\r
181 toremovannot.add (worker);\r
182 }}\r
183 this.restartable.removeAll (removable);\r
184 }{\r
185 for (var worker, $worker = this.canUpdate.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {\r
186 if (typeToRemove.equals (worker.getClass ())) {\r
187 removable.add (worker);\r
188 toremovannot.add (worker);\r
189 }}\r
190 this.canUpdate.removeAll (removable);\r
191 }}, "Class");\r
192 });\r