JAL-3592 logic question
[jalview.git] / src / jalview / workers / AlignCalcManager.java
index 08ef3a2..77908b6 100644 (file)
@@ -22,6 +22,7 @@ package jalview.workers;
 
 import jalview.api.AlignCalcManagerI;
 import jalview.api.AlignCalcWorkerI;
+import jalview.bin.Jalview;
 import jalview.datamodel.AlignmentAnnotation;
 
 import java.util.ArrayList;
@@ -34,6 +35,10 @@ import java.util.Set;
 
 public class AlignCalcManager implements AlignCalcManagerI
 {
+  public static final String STARTED = "started";
+
+  public static final String FINISHED = "finished";
+
   /*
    * list of registered workers
    */
@@ -74,7 +79,7 @@ public class AlignCalcManager implements AlignCalcManagerI
             .synchronizedList(new ArrayList<AlignCalcWorkerI>());
     updating = Collections.synchronizedMap(
             new Hashtable<Class<? extends AlignCalcWorkerI>, List<AlignCalcWorkerI>>());
-    canUpdate = new HashSet<AlignCalcWorkerI>();
+    canUpdate = new HashSet<>();
   }
 
   @Override
@@ -82,6 +87,7 @@ public class AlignCalcManager implements AlignCalcManagerI
   {
     synchronized (updating)
     {
+      Jalview.getInstance().notifyWorker(worker, STARTED);
       List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
       if (upd == null)
       {
@@ -144,6 +150,7 @@ public class AlignCalcManager implements AlignCalcManagerI
   {
     synchronized (inProgress)
     {
+      Jalview.getInstance().notifyWorker(worker, FINISHED);
       // System.err.println("Worker " + worker + " marked as complete.");
       inProgress.remove(worker);
       List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
@@ -183,7 +190,8 @@ public class AlignCalcManager implements AlignCalcManagerI
     {
       Thread tw = new Thread(worker);
       tw.setName(worker.getClass().toString());
-      tw.start();
+      Jalview.execThread(tw); // JAL-3563
+      // tw.start();
     }
   }
 
@@ -285,7 +293,7 @@ public class AlignCalcManager implements AlignCalcManagerI
   public List<AlignCalcWorkerI> getRegisteredWorkersOfClass(
           Class<? extends AlignCalcWorkerI> workerClass)
   {
-    List<AlignCalcWorkerI> workingClass = new ArrayList<AlignCalcWorkerI>();
+    List<AlignCalcWorkerI> workingClass = new ArrayList<>();
     synchronized (canUpdate)
     {
       for (AlignCalcWorkerI worker : canUpdate)
@@ -312,8 +320,8 @@ public class AlignCalcManager implements AlignCalcManagerI
   public void removeRegisteredWorkersOfClass(
           Class<? extends AlignCalcWorkerI> typeToRemove)
   {
-    List<AlignCalcWorkerI> removable = new ArrayList<AlignCalcWorkerI>();
-    Set<AlignCalcWorkerI> toremovannot = new HashSet<AlignCalcWorkerI>();
+    List<AlignCalcWorkerI> removable = new ArrayList<>();
+    Set<AlignCalcWorkerI> toremovannot = new HashSet<>();
     synchronized (restartable)
     {
       for (AlignCalcWorkerI worker : restartable)
@@ -363,7 +371,7 @@ public class AlignCalcManager implements AlignCalcManagerI
      * first just find those to remove (to avoid
      * ConcurrentModificationException)
      */
-    List<AlignCalcWorkerI> toRemove = new ArrayList<AlignCalcWorkerI>();
+    List<AlignCalcWorkerI> toRemove = new ArrayList<>();
     for (AlignCalcWorkerI worker : restartable)
     {
       if (worker.involves(ann))