JAL-961 JAL-975 extend api to support removal of workers no-longer required by the...
[jalview.git] / src / jalview / workers / AlignCalcManager.java
index bc5e8e3..544c2c8 100644 (file)
@@ -6,6 +6,7 @@ import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import jalview.api.AlignCalcManagerI;
 import jalview.api.AlignCalcWorkerI;
@@ -315,4 +316,57 @@ public class AlignCalcManager implements AlignCalcManagerI
       }
     }
   }
+
+  @Override
+  public void removeRegisteredWorkersOfClass(Class typeToRemove)
+  {
+    List<AlignCalcWorkerI> workers = getRegisteredWorkersOfClass(typeToRemove);
+    List<AlignCalcWorkerI> removable = new ArrayList<AlignCalcWorkerI>();
+    Set<AlignCalcWorkerI> toremovannot=new HashSet<AlignCalcWorkerI>();
+    synchronized (restartable)
+    {
+      for (AlignCalcWorkerI worker:restartable) {
+        if (typeToRemove.equals(worker.getClass())) {
+          removable.add(worker);
+          toremovannot.add(worker);
+        }
+      }
+      restartable.removeAll(removable);
+    }
+    synchronized (canUpdate)
+    {
+      for (AlignCalcWorkerI worker:canUpdate) {
+        if (typeToRemove.equals(worker.getClass())) {
+          removable.add(worker);
+          toremovannot.add(worker);
+        }
+      }
+      canUpdate.removeAll(removable);
+    }
+    // TODO: finish testing this extension
+
+/*    synchronized (inProgress)
+    {
+      // need to kill or mark as dead any running threads...
+      (inProgress.get(typeToRemove));
+    }
+    
+    if (workers == null)
+    {
+      return;
+    }
+    for (AlignCalcWorkerI worker : workers)
+    {
+      
+      if (isPending(worker))
+      {
+        worker.abortAndDestroy();
+        startWorker(worker);
+      }
+      else
+      {
+        System.err.println("Pending exists for " + workerClass);
+      }
+    }*/
+  }
 }