1 Clazz.declarePackage ("jalview.workers");
2 Clazz.load (["jalview.api.AlignCalcManagerI", "java.util.ArrayList", "$.Collections", "$.HashSet", "$.Hashtable"], "jalview.workers.AlignCalcManager", ["java.lang.Thread"], function () {
3 c$ = Clazz.decorateAsClass (function () {
4 this.restartable = null;
6 this.inProgress = null;
9 Clazz.instantialize (this, arguments);
10 }, jalview.workers, "AlignCalcManager", null, jalview.api.AlignCalcManagerI);
11 Clazz.prepareFields (c$, function () {
12 this.restartable = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
13 this.blackList = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
14 this.inProgress = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());
15 this.updating = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());
16 this.canUpdate = new java.util.HashSet ();
18 Clazz.overrideMethod (c$, "notifyStart",
21 var upd = this.updating.get (worker.getClass ());
23 this.updating.put (worker.getClass (), upd = java.util.Collections.synchronizedList ( new java.util.ArrayList ()));
26 }}}, "jalview.api.AlignCalcWorkerI");
27 Clazz.overrideMethod (c$, "alreadyDoing",
30 return this.inProgress.containsKey (worker.getClass ());
31 }}, "jalview.api.AlignCalcWorkerI");
32 Clazz.overrideMethod (c$, "isPending",
33 function (workingClass) {
36 upd = this.updating.get (workingClass.getClass ());
40 if (upd.size () > 1) {
43 }}, "jalview.api.AlignCalcWorkerI");
44 Clazz.defineMethod (c$, "numberLive",
47 var upd = this.updating.get (worker.getClass ());
51 }}, "jalview.api.AlignCalcWorkerI");
52 Clazz.overrideMethod (c$, "notifyWorking",
55 if (this.inProgress.get (worker.getClass ()) != null) {
57 System.err.println ("Warning: Multiple workers are running of type " + worker.getClass ());
59 }this.inProgress.put (worker.getClass (), worker);
61 }, "jalview.api.AlignCalcWorkerI");
62 Clazz.overrideMethod (c$, "workerComplete",
65 this.inProgress.remove (worker.getClass ());
66 var upd = this.updating.get (worker.getClass ());
70 }this.canUpdate.add (worker);
71 }}}, "jalview.api.AlignCalcWorkerI");
72 Clazz.overrideMethod (c$, "workerCannotRun",
75 this.blackList.add (worker.getClass ());
76 }}, "jalview.api.AlignCalcWorkerI");
77 Clazz.defineMethod (c$, "isBlackListed",
78 function (workerType) {
80 return this.blackList.contains (workerType);
82 Clazz.overrideMethod (c$, "startWorker",
84 var tw = new Thread (worker);
85 tw.setName (worker.getClass ().toString ());
87 }, "jalview.api.AlignCalcWorkerI");
88 Clazz.defineMethod (c$, "isWorking",
91 return worker != null && this.inProgress.get (worker.getClass ()) === worker;
92 }}, "jalview.api.AlignCalcWorkerI");
93 Clazz.defineMethod (c$, "isWorking",
96 return this.inProgress.size () > 0;
98 Clazz.overrideMethod (c$, "registerWorker",
101 if (!this.restartable.contains (worker)) {
102 this.restartable.add (worker);
103 }this.startWorker (worker);
104 }}, "jalview.api.AlignCalcWorkerI");
105 Clazz.overrideMethod (c$, "restartWorkers",
108 for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
109 this.startWorker (worker);
112 Clazz.overrideMethod (c$, "workingInvolvedWith",
113 function (alignmentAnnotation) {
115 for (var worker, $worker = this.inProgress.values ().iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
116 if (worker.involves (alignmentAnnotation)) {
120 for (var workers, $workers = this.updating.values ().iterator (); $workers.hasNext () && ((workers = $workers.next ()) || true);) {
121 for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
122 if (worker.involves (alignmentAnnotation)) {
127 }, "jalview.datamodel.AlignmentAnnotation");
128 Clazz.overrideMethod (c$, "updateAnnotationFor",
129 function (workerClass) {
132 workers = this.canUpdate.toArray ( new Array (0));
133 }for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
134 if (workerClass.equals (worker.getClass ())) {
135 worker.updateAnnotation ();
138 Clazz.overrideMethod (c$, "getRegisteredWorkersOfClass",
139 function (workerClass) {
140 var workingClass = new java.util.ArrayList ();
143 workers = this.canUpdate.toArray ( new Array (this.canUpdate.size ()));
144 }for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
145 if (workerClass.equals (worker.getClass ())) {
146 workingClass.add (worker);
148 return (workingClass.size () == 0) ? null : workingClass;
150 Clazz.overrideMethod (c$, "startRegisteredWorkersOfClass",
151 function (workerClass) {
152 var workers = this.getRegisteredWorkersOfClass (workerClass);
153 if (workers == null) {
155 }for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
156 if (!this.isPending (worker)) {
157 this.startWorker (worker);
159 System.err.println ("Pending exists for " + workerClass);
163 Clazz.overrideMethod (c$, "workerMayRun",
166 if (this.blackList.contains (worker.getClass ())) {
167 this.blackList.remove (worker.getClass ());
168 }}}, "jalview.api.AlignCalcWorkerI");
169 Clazz.overrideMethod (c$, "removeRegisteredWorkersOfClass",
170 function (typeToRemove) {
171 var workers = this.getRegisteredWorkersOfClass (typeToRemove);
172 var removable = new java.util.ArrayList ();
173 var toremovannot = new java.util.HashSet ();
175 for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
176 if (typeToRemove.equals (worker.getClass ())) {
177 removable.add (worker);
178 toremovannot.add (worker);
180 this.restartable.removeAll (removable);
182 for (var worker, $worker = this.canUpdate.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
183 if (typeToRemove.equals (worker.getClass ())) {
184 removable.add (worker);
185 toremovannot.add (worker);
187 this.canUpdate.removeAll (removable);