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
18 Clazz.overrideMethod (c$, "notifyStart",
\r
21 var upd = this.updating.get (worker.getClass ());
\r
23 this.updating.put (worker.getClass (), upd = java.util.Collections.synchronizedList ( new java.util.ArrayList ()));
\r
26 }}}, "jalview.api.AlignCalcWorkerI");
\r
27 Clazz.overrideMethod (c$, "alreadyDoing",
\r
30 return this.inProgress.containsKey (worker.getClass ());
\r
31 }}, "jalview.api.AlignCalcWorkerI");
\r
32 Clazz.overrideMethod (c$, "isPending",
\r
33 function (workingClass) {
\r
36 upd = this.updating.get (workingClass.getClass ());
\r
40 if (upd.size () > 1) {
\r
43 }}, "jalview.api.AlignCalcWorkerI");
\r
44 Clazz.defineMethod (c$, "numberLive",
\r
47 var upd = this.updating.get (worker.getClass ());
\r
50 };return upd.size ();
\r
51 }}, "jalview.api.AlignCalcWorkerI");
\r
52 Clazz.overrideMethod (c$, "notifyWorking",
\r
55 if (this.inProgress.get (worker.getClass ()) != null) {
\r
57 System.err.println ("Warning: Multiple workers are running of type " + worker.getClass ());
\r
59 }this.inProgress.put (worker.getClass (), worker);
\r
61 }, "jalview.api.AlignCalcWorkerI");
\r
62 Clazz.overrideMethod (c$, "workerComplete",
\r
65 this.inProgress.remove (worker.getClass ());
\r
66 var upd = this.updating.get (worker.getClass ());
\r
69 upd.remove (worker);
\r
70 }this.canUpdate.add (worker);
\r
71 }}}, "jalview.api.AlignCalcWorkerI");
\r
72 Clazz.overrideMethod (c$, "workerCannotRun",
\r
75 this.blackList.add (worker.getClass ());
\r
76 }}, "jalview.api.AlignCalcWorkerI");
\r
77 Clazz.defineMethod (c$, "isBlackListed",
\r
78 function (workerType) {
\r
80 return this.blackList.contains (workerType);
\r
82 Clazz.overrideMethod (c$, "startWorker",
\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
90 }, "jalview.api.AlignCalcWorkerI");
\r
91 Clazz.defineMethod (c$, "isWorking",
\r
94 return worker != null && this.inProgress.get (worker.getClass ()) === worker;
\r
95 }}, "jalview.api.AlignCalcWorkerI");
\r
96 Clazz.defineMethod (c$, "isWorking",
\r
99 return this.inProgress.size () > 0;
\r
101 Clazz.overrideMethod (c$, "registerWorker",
\r
102 function (worker) {
\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
111 for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
\r
112 this.startWorker (worker);
\r
115 Clazz.overrideMethod (c$, "workingInvolvedWith",
\r
116 function (alignmentAnnotation) {
\r
118 for (var worker, $worker = this.inProgress.values ().iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
\r
119 if (worker.involves (alignmentAnnotation)) {
\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
130 }, "jalview.datamodel.AlignmentAnnotation");
\r
131 Clazz.overrideMethod (c$, "updateAnnotationFor",
\r
132 function (workerClass) {
\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
141 Clazz.overrideMethod (c$, "getRegisteredWorkersOfClass",
\r
142 function (workerClass) {
\r
143 var workingClass = new java.util.ArrayList ();
\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
151 return (workingClass.size () == 0) ? null : workingClass;
\r
153 Clazz.overrideMethod (c$, "startRegisteredWorkersOfClass",
\r
154 function (workerClass) {
\r
155 var workers = this.getRegisteredWorkersOfClass (workerClass);
\r
156 if (workers == null) {
\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
162 System.err.println ("Pending exists for " + workerClass);
\r
166 Clazz.overrideMethod (c$, "workerMayRun",
\r
167 function (worker) {
\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
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
183 this.restartable.removeAll (removable);
\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
190 this.canUpdate.removeAll (removable);
\r