JAL-4199 Change actions to be task factories
[jalview.git] / src / jalview / ws2 / actions / alignment / AlignmentAction.java
index 7f935bf..986029c 100644 (file)
@@ -3,9 +3,12 @@ package jalview.ws2.actions.alignment;
 import java.util.List;
 import java.util.Objects;
 
+import jalview.api.AlignViewportI;
 import jalview.viewmodel.AlignmentViewport;
 import jalview.ws.params.ArgumentI;
 import jalview.ws2.actions.BaseAction;
+import jalview.ws2.actions.BaseTask;
+import jalview.ws2.actions.PollingTaskExecutor;
 import jalview.ws2.actions.api.TaskEventListener;
 import jalview.ws2.actions.api.TaskI;
 import jalview.ws2.api.Credentials;
@@ -67,18 +70,29 @@ public class AlignmentAction extends BaseAction<AlignmentResult>
     client = builder.client;
   }
 
-  @Override
+  @Deprecated
   public TaskI<AlignmentResult> perform(AlignmentViewport viewport,
       List<ArgumentI> args, Credentials credentials,
       TaskEventListener<AlignmentResult> handler)
   {
-    var msa = viewport.getAlignmentView(true);
-    var task = new AlignmentTask(
-        client, this, args, credentials, msa, viewport, submitGaps, handler);
-    task.start(viewport.getServiceExecutor());
+    var task = createTask(viewport, args, credentials);
+    var executor = PollingTaskExecutor.fromPool(viewport.getServiceExecutor());
+    task.addTaskEventListener(handler);
+    var future = executor.submit(task);
+    task.setCancelAction(() -> {
+      future.cancel(true);
+    });
     return task;
   }
 
+  @Override
+  public AlignmentTask createTask(AlignViewportI viewport,
+      List<ArgumentI> args, Credentials credentials)
+  {
+    return new AlignmentTask(
+        client, this, args, credentials, viewport, submitGaps);
+  }
+
   /**
    * Returns if the action is active for the given viewport. Alignment services
    * are non-interactive, so the action is never active.