1 Clazz.declarePackage ("jalview.workers");
2 Clazz.load (["jalview.api.AlignCalcManagerI", "java.util.ArrayList", "$.Collections", "$.HashSet", "$.Hashtable"], "jalview.workers.AlignCalcManager", null, 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 workerAsThread = worker;
85 if (workerAsThread.isAlive ()) {
86 workerAsThread.interrupt ();
87 worker = worker.getNewWorker ();
88 }worker.setName (worker.getClass ().getName ());
90 }, "jalview.api.AlignCalcWorkerI");
91 Clazz.defineMethod (c$, "isWorking",
94 return worker != null && this.inProgress.get (worker.getClass ()) === worker;
95 }}, "jalview.api.AlignCalcWorkerI");
96 Clazz.defineMethod (c$, "isWorking",
99 return this.inProgress.size () > 0;
101 Clazz.overrideMethod (c$, "registerWorker",
104 if (!this.restartable.contains (worker)) {
105 this.restartable.add (worker);
106 }this.startWorker (worker);
107 }}, "jalview.api.AlignCalcWorkerI");
108 Clazz.overrideMethod (c$, "restartWorkers",
111 for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
112 this.startWorker (worker);
115 Clazz.overrideMethod (c$, "workingInvolvedWith",
116 function (alignmentAnnotation) {
118 for (var worker, $worker = this.inProgress.values ().iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
119 if (worker.involves (alignmentAnnotation)) {
123 for (var workers, $workers = this.updating.values ().iterator (); $workers.hasNext () && ((workers = $workers.next ()) || true);) {
124 for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
125 if (worker.involves (alignmentAnnotation)) {
130 }, "jalview.datamodel.AlignmentAnnotation");
131 Clazz.overrideMethod (c$, "updateAnnotationFor",
132 function (workerClass) {
135 workers = this.canUpdate.toArray ( new Array (0));
136 }for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
137 if (workerClass.equals (worker.getClass ())) {
138 worker.updateAnnotation ();
141 Clazz.overrideMethod (c$, "getRegisteredWorkersOfClass",
142 function (workerClass) {
143 var workingClass = new java.util.ArrayList ();
146 workers = this.canUpdate.toArray ( new Array (this.canUpdate.size ()));
147 }for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
148 if (workerClass.equals (worker.getClass ())) {
149 workingClass.add (worker);
151 return (workingClass.size () == 0) ? null : workingClass;
153 Clazz.overrideMethod (c$, "startRegisteredWorkersOfClass",
154 function (workerClass) {
155 var workers = this.getRegisteredWorkersOfClass (workerClass);
156 if (workers == null) {
158 }for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
159 if (!this.isPending (worker)) {
160 this.startWorker (worker);
162 System.err.println ("Pending exists for " + workerClass);
166 Clazz.overrideMethod (c$, "workerMayRun",
169 if (this.blackList.contains (worker.getClass ())) {
170 this.blackList.remove (worker.getClass ());
171 }}}, "jalview.api.AlignCalcWorkerI");
172 Clazz.overrideMethod (c$, "removeRegisteredWorkersOfClass",
173 function (typeToRemove) {
174 var workers = this.getRegisteredWorkersOfClass (typeToRemove);
175 var removable = new java.util.ArrayList ();
176 var toremovannot = new java.util.HashSet ();
178 for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
179 if (typeToRemove.equals (worker.getClass ())) {
180 removable.add (worker);
181 toremovannot.add (worker);
183 this.restartable.removeAll (removable);
185 for (var worker, $worker = this.canUpdate.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
186 if (typeToRemove.equals (worker.getClass ())) {
187 removable.add (worker);
188 toremovannot.add (worker);
190 this.canUpdate.removeAll (removable);