JAL-4199 Change actions to be task factories
[jalview.git] / src / jalview / ws2 / actions / alignment / AlignmentAction.java
index 8c0cd93..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;
@@ -27,15 +30,15 @@ public class AlignmentAction extends BaseAction<AlignmentResult>
    * 
    * @author mmwarowny
    */
-  public static class Builder extends BaseAction.Builder
+  public static class Builder extends BaseAction.Builder<AlignmentAction>
   {
     protected AlignmentWebServiceClientI client;
 
     protected boolean submitGaps = false;
 
-    public Builder(AlignmentWebServiceClientI client, String name)
+    public Builder(AlignmentWebServiceClientI client)
     {
-      super(name);
+      super();
       Objects.requireNonNull(client);
       this.client = client;
     }
@@ -51,9 +54,9 @@ public class AlignmentAction extends BaseAction<AlignmentResult>
     }
   }
 
-  public static Builder newBuilder(AlignmentWebServiceClientI client, String name)
+  public static Builder newBuilder(AlignmentWebServiceClientI client)
   {
-    return new Builder(client, name);
+    return new Builder(client);
   }
 
   protected final boolean submitGaps;
@@ -67,17 +70,32 @@ 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 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.
+   * Returns if the action is active for the given viewport. Alignment services
+   * are non-interactive, so the action is never active.
    */
   @Override
   public boolean isActive(AlignmentViewport viewport)