JAL-1807
[jalview.git] / site / j2s / jalview / workers / AlignCalcManager.js
diff --git a/site/j2s/jalview/workers/AlignCalcManager.js b/site/j2s/jalview/workers/AlignCalcManager.js
new file mode 100644 (file)
index 0000000..076edd4
--- /dev/null
@@ -0,0 +1,189 @@
+Clazz.declarePackage ("jalview.workers");
+Clazz.load (["jalview.api.AlignCalcManagerI", "java.util.ArrayList", "$.Collections", "$.HashSet", "$.Hashtable"], "jalview.workers.AlignCalcManager", ["java.lang.Thread"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.restartable = null;
+this.blackList = null;
+this.inProgress = null;
+this.updating = null;
+this.canUpdate = null;
+Clazz.instantialize (this, arguments);
+}, jalview.workers, "AlignCalcManager", null, jalview.api.AlignCalcManagerI);
+Clazz.prepareFields (c$, function () {
+this.restartable = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
+this.blackList = java.util.Collections.synchronizedList ( new java.util.ArrayList ());
+this.inProgress = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());
+this.updating = java.util.Collections.synchronizedMap ( new java.util.Hashtable ());
+this.canUpdate =  new java.util.HashSet ();
+});
+Clazz.overrideMethod (c$, "notifyStart", 
+function (worker) {
+{
+var upd = this.updating.get (worker.getClass ());
+if (upd == null) {
+this.updating.put (worker.getClass (), upd = java.util.Collections.synchronizedList ( new java.util.ArrayList ()));
+}{
+upd.add (worker);
+}}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "alreadyDoing", 
+function (worker) {
+{
+return this.inProgress.containsKey (worker.getClass ());
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "isPending", 
+function (workingClass) {
+var upd;
+{
+upd = this.updating.get (workingClass.getClass ());
+if (upd == null) {
+return false;
+}{
+if (upd.size () > 1) {
+return true;
+}}return false;
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.defineMethod (c$, "numberLive", 
+function (worker) {
+{
+var upd = this.updating.get (worker.getClass ());
+if (upd == null) {
+return 0;
+};return upd.size ();
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "notifyWorking", 
+function (worker) {
+{
+if (this.inProgress.get (worker.getClass ()) != null) {
+if (false) {
+System.err.println ("Warning: Multiple workers are running of type " + worker.getClass ());
+}return false;
+}this.inProgress.put (worker.getClass (), worker);
+}return true;
+}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "workerComplete", 
+function (worker) {
+{
+this.inProgress.remove (worker.getClass ());
+var upd = this.updating.get (worker.getClass ());
+if (upd != null) {
+{
+upd.remove (worker);
+}this.canUpdate.add (worker);
+}}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "workerCannotRun", 
+function (worker) {
+{
+this.blackList.add (worker.getClass ());
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.defineMethod (c$, "isBlackListed", 
+function (workerType) {
+{
+return this.blackList.contains (workerType);
+}}, "Class");
+Clazz.overrideMethod (c$, "startWorker", 
+function (worker) {
+var tw =  new Thread (worker);
+tw.setName (worker.getClass ().toString ());
+tw.start ();
+}, "jalview.api.AlignCalcWorkerI");
+Clazz.defineMethod (c$, "isWorking", 
+function (worker) {
+{
+return worker != null && this.inProgress.get (worker.getClass ()) === worker;
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.defineMethod (c$, "isWorking", 
+function () {
+{
+return this.inProgress.size () > 0;
+}});
+Clazz.overrideMethod (c$, "registerWorker", 
+function (worker) {
+{
+if (!this.restartable.contains (worker)) {
+this.restartable.add (worker);
+}this.startWorker (worker);
+}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "restartWorkers", 
+function () {
+{
+for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+this.startWorker (worker);
+}
+}});
+Clazz.overrideMethod (c$, "workingInvolvedWith", 
+function (alignmentAnnotation) {
+{
+for (var worker, $worker = this.inProgress.values ().iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (worker.involves (alignmentAnnotation)) {
+return true;
+}}
+}{
+for (var workers, $workers = this.updating.values ().iterator (); $workers.hasNext () && ((workers = $workers.next ()) || true);) {
+for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (worker.involves (alignmentAnnotation)) {
+return true;
+}}
+}
+}return false;
+}, "jalview.datamodel.AlignmentAnnotation");
+Clazz.overrideMethod (c$, "updateAnnotationFor", 
+function (workerClass) {
+var workers;
+{
+workers = this.canUpdate.toArray ( new Array (0));
+}for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
+if (workerClass.equals (worker.getClass ())) {
+worker.updateAnnotation ();
+}}
+}, "Class");
+Clazz.overrideMethod (c$, "getRegisteredWorkersOfClass", 
+function (workerClass) {
+var workingClass =  new java.util.ArrayList ();
+var workers;
+{
+workers = this.canUpdate.toArray ( new Array (this.canUpdate.size ()));
+}for (var worker, $worker = 0, $$worker = workers; $worker < $$worker.length && ((worker = $$worker[$worker]) || true); $worker++) {
+if (workerClass.equals (worker.getClass ())) {
+workingClass.add (worker);
+}}
+return (workingClass.size () == 0) ? null : workingClass;
+}, "Class");
+Clazz.overrideMethod (c$, "startRegisteredWorkersOfClass", 
+function (workerClass) {
+var workers = this.getRegisteredWorkersOfClass (workerClass);
+if (workers == null) {
+return false;
+}for (var worker, $worker = workers.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (!this.isPending (worker)) {
+this.startWorker (worker);
+} else {
+System.err.println ("Pending exists for " + workerClass);
+}}
+return true;
+}, "Class");
+Clazz.overrideMethod (c$, "workerMayRun", 
+function (worker) {
+{
+if (this.blackList.contains (worker.getClass ())) {
+this.blackList.remove (worker.getClass ());
+}}}, "jalview.api.AlignCalcWorkerI");
+Clazz.overrideMethod (c$, "removeRegisteredWorkersOfClass", 
+function (typeToRemove) {
+var workers = this.getRegisteredWorkersOfClass (typeToRemove);
+var removable =  new java.util.ArrayList ();
+var toremovannot =  new java.util.HashSet ();
+{
+for (var worker, $worker = this.restartable.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (typeToRemove.equals (worker.getClass ())) {
+removable.add (worker);
+toremovannot.add (worker);
+}}
+this.restartable.removeAll (removable);
+}{
+for (var worker, $worker = this.canUpdate.iterator (); $worker.hasNext () && ((worker = $worker.next ()) || true);) {
+if (typeToRemove.equals (worker.getClass ())) {
+removable.add (worker);
+toremovannot.add (worker);
+}}
+this.canUpdate.removeAll (removable);
+}}, "Class");
+});