Merge commit 'alpha/update_2_12_for_2_11_2_series_merge^2' into HEAD
[jalview.git] / src / jalview / ws / jws2 / SequenceAnnotationWSClient.java
index 6939db4..39217bb 100644 (file)
@@ -33,6 +33,8 @@ import jalview.ws.uimodel.AlignAnalysisUIText;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.List;
+import java.util.Locale;
+
 
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
@@ -61,8 +63,8 @@ public class SequenceAnnotationWSClient extends Jws2Client
   // dan think. Do I need to change this method to run RNAalifold through the
   // GUI
 
-  public void initSequenceAnnotationWSClient(final ServiceWithParameters sh,
-          AlignFrame alignFrame, WsParamSetI preset, boolean editParams)
+  private void initSequenceAnnotationWSClient(final ServiceWithParameters sh,
+      AlignFrame alignFrame, final WsParamSetI preset, boolean editParams)
   {
     // dan changed! dan test. comment out if conditional
     // if (alignFrame.getViewport().getAlignment().isNucleotide())
@@ -82,74 +84,89 @@ public class SequenceAnnotationWSClient extends Jws2Client
       // columns
 
       List<AlignCalcWorkerI> clnts = alignFrame.getViewport()
-              .getCalcManager()
-              .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
+          .getCalcManager()
+          .getWorkersOfClass(SeqAnnotationServiceCalcWorker.class);
 
-      SeqAnnotationServiceCalcWorker worker = null;
+      SeqAnnotationServiceCalcWorker tmpworker = null;
       if (clnts != null)
       {
         for (AlignCalcWorkerI _worker : clnts)
         {
-          worker = (SeqAnnotationServiceCalcWorker) _worker;
-          if (worker.hasService()
-                  && worker.getService().getClass().equals(clientClass))
+          tmpworker = (SeqAnnotationServiceCalcWorker) _worker;
+          if (tmpworker.hasService()
+              && tmpworker.getService().getClass().equals(clientClass))
           {
             break;
           }
-          worker = null;
+          tmpworker = null;
         }
       }
+      final var worker = tmpworker;
       if (worker == null)
       {
-        if (!processParams(sh, editParams))
-        {
-          return;
-        }
-        try
-        {
-          worker = new SeqAnnotationServiceCalcWorker(sh, alignFrame, this.preset,
+        processParams(sh, editParams).thenAccept((startJob) -> {
+          if (startJob)
+          {
+            final SeqAnnotationServiceCalcWorker worker_;
+            try
+            {
+              worker_ = new SeqAnnotationServiceCalcWorker(sh, alignFrame, this.preset,
                   paramset);
-        } catch (Exception x)
-        {
-          x.printStackTrace();
-          throw new Error(
+            } catch (Exception x)
+            {
+              x.printStackTrace();
+              throw new Error(
                   MessageManager.getString("error.implementation_error"),
                   x);
-        }
-        alignFrame.getViewport().getCalcManager().registerWorker(worker); // also
-                                                                          // starts
-                                                                          // the
-                                                                          // worker
+            }
+            alignFrame.getViewport().getCalcManager().registerWorker(worker_);
+                // also starts the worker
+            startSeqAnnotationWorker(sh, alignFrame, preset, editParams);
+          }
+        });
+
       }
       else
       {
+        WsParamSetI preset_;
         if (editParams)
         {
           paramset = worker.getArguments();
-          preset = worker.getPreset();
+          preset_ = worker.getPreset();
+        }
+        else
+        {
+          preset_ = preset;
         }
+        processParams(sh, editParams, true).thenAccept((startJob) -> {
+          if (startJob)
+          {
+            // reinstate worker if it was blacklisted (might have happened due
+            // to
+            // invalid parameters)
+            alignFrame.getViewport().getCalcManager().enableWorker(worker);
+            worker.updateParameters(this.preset, paramset);
+            startSeqAnnotationWorker(sh, alignFrame, preset_, editParams);
+          }
+        });
 
-        if (!processParams(sh, editParams, true))
+        if (!processParams(sh, editParams, true).toCompletableFuture().join())
         {
           return;
         }
-        // reinstate worker if it was blacklisted (might have happened due to
-        // invalid parameters)
-        alignFrame.getViewport().getCalcManager().enableWorker(worker);
-        worker.updateParameters(this.preset, paramset);
       }
     }
-    if (!sh.isInteractiveUpdate())
+    if (sh.action.toLowerCase(Locale.ROOT).contains("disorder"))
     {
       // build IUPred style client. take sequences, returns annotation per
       // sequence.
-      if (!processParams(sh, editParams))
-      {
-        return;
-      }
-
-      alignFrame.getViewport().getCalcManager().startWorker(
+      processParams(sh, editParams).thenAccept((startJob) -> {
+        if (startJob)
+        {
+          alignFrame.getViewport().getCalcManager().startWorker(
               new SeqAnnotationServiceCalcWorker(sh, alignFrame, preset, paramset));
+        }
+      });
     }
   }