JAL-1807
[jalview.git] / site / j2s / jalview / workers / AlignCalcManager.js
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;
5 this.blackList = null;
6 this.inProgress = null;
7 this.updating = null;
8 this.canUpdate = 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 ();
17 });
18 Clazz.overrideMethod (c$, "notifyStart", 
19 function (worker) {
20 {
21 var upd = this.updating.get (worker.getClass ());
22 if (upd == null) {
23 this.updating.put (worker.getClass (), upd = java.util.Collections.synchronizedList ( new java.util.ArrayList ()));
24 }{
25 upd.add (worker);
26 }}}, "jalview.api.AlignCalcWorkerI");
27 Clazz.overrideMethod (c$, "alreadyDoing", 
28 function (worker) {
29 {
30 return this.inProgress.containsKey (worker.getClass ());
31 }}, "jalview.api.AlignCalcWorkerI");
32 Clazz.overrideMethod (c$, "isPending", 
33 function (workingClass) {
34 var upd;
35 {
36 upd = this.updating.get (workingClass.getClass ());
37 if (upd == null) {
38 return false;
39 }{
40 if (upd.size () > 1) {
41 return true;
42 }}return false;
43 }}, "jalview.api.AlignCalcWorkerI");
44 Clazz.defineMethod (c$, "numberLive", 
45 function (worker) {
46 {
47 var upd = this.updating.get (worker.getClass ());
48 if (upd == null) {
49 return 0;
50 };return upd.size ();
51 }}, "jalview.api.AlignCalcWorkerI");
52 Clazz.overrideMethod (c$, "notifyWorking", 
53 function (worker) {
54 {
55 if (this.inProgress.get (worker.getClass ()) != null) {
56 if (false) {
57 System.err.println ("Warning: Multiple workers are running of type " + worker.getClass ());
58 }return false;
59 }this.inProgress.put (worker.getClass (), worker);
60 }return true;
61 }, "jalview.api.AlignCalcWorkerI");
62 Clazz.overrideMethod (c$, "workerComplete", 
63 function (worker) {
64 {
65 this.inProgress.remove (worker.getClass ());
66 var upd = this.updating.get (worker.getClass ());
67 if (upd != null) {
68 {
69 upd.remove (worker);
70 }this.canUpdate.add (worker);
71 }}}, "jalview.api.AlignCalcWorkerI");
72 Clazz.overrideMethod (c$, "workerCannotRun", 
73 function (worker) {
74 {
75 this.blackList.add (worker.getClass ());
76 }}, "jalview.api.AlignCalcWorkerI");
77 Clazz.defineMethod (c$, "isBlackListed", 
78 function (workerType) {
79 {
80 return this.blackList.contains (workerType);
81 }}, "Class");
82 Clazz.overrideMethod (c$, "startWorker", 
83 function (worker) {
84 var tw =  new Thread (worker);
85 tw.setName (worker.getClass ().toString ());
86 tw.start ();
87 }, "jalview.api.AlignCalcWorkerI");
88 Clazz.defineMethod (c$, "isWorking", 
89 function (worker) {
90 {
91 return worker != null && this.inProgress.get (worker.getClass ()) === worker;
92 }}, "jalview.api.AlignCalcWorkerI");
93 Clazz.defineMethod (c$, "isWorking", 
94 function () {
95 {
96 return this.inProgress.size () > 0;
97 }});
98 Clazz.overrideMethod (c$, "registerWorker", 
99 function (worker) {
100 {
101 if (!this.restartable.contains (worker)) {
102 this.restartable.add (worker);
103 }this.startWorker (worker);
104 }}, "jalview.api.AlignCalcWorkerI");
105 Clazz.overrideMethod (c$, "restartWorkers", 
106 function () {
107 {
108 for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
109 this.startWorker (worker);
110 }
111 }});
112 Clazz.overrideMethod (c$, "workingInvolvedWith", 
113 function (alignmentAnnotation) {
114 {
115 for (var worker, $worker = this.inProgress.values ().iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
116 if (worker.involves (alignmentAnnotation)) {
117 return true;
118 }}
119 }{
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)) {
123 return true;
124 }}
125 }
126 }return false;
127 }, "jalview.datamodel.AlignmentAnnotation");
128 Clazz.overrideMethod (c$, "updateAnnotationFor", 
129 function (workerClass) {
130 var workers;
131 {
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 ();
136 }}
137 }, "Class");
138 Clazz.overrideMethod (c$, "getRegisteredWorkersOfClass", 
139 function (workerClass) {
140 var workingClass =  new java.util.ArrayList ();
141 var workers;
142 {
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);
147 }}
148 return (workingClass.size () == 0) ? null : workingClass;
149 }, "Class");
150 Clazz.overrideMethod (c$, "startRegisteredWorkersOfClass", 
151 function (workerClass) {
152 var workers = this.getRegisteredWorkersOfClass (workerClass);
153 if (workers == null) {
154 return false;
155 }for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
156 if (!this.isPending (worker)) {
157 this.startWorker (worker);
158 } else {
159 System.err.println ("Pending exists for " + workerClass);
160 }}
161 return true;
162 }, "Class");
163 Clazz.overrideMethod (c$, "workerMayRun", 
164 function (worker) {
165 {
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 ();
174 {
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);
179 }}
180 this.restartable.removeAll (removable);
181 }{
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);
186 }}
187 this.canUpdate.removeAll (removable);
188 }}, "Class");
189 });