Merge branch 'feature/JAL-3954-ebi-phmmer' into mmw/JAL-4199-task-execution-update
[jalview.git] / src / jalview / ws2 / actions / hmmer / PhmmerAction.java
index 5e6ef08..bdba2f7 100644 (file)
@@ -3,10 +3,12 @@ package jalview.ws2.actions.hmmer;
 import java.util.List;
 import java.util.Objects;
 
+import jalview.api.AlignViewportI;
 import jalview.datamodel.AlignmentI;
 import jalview.viewmodel.AlignmentViewport;
 import jalview.ws.params.ArgumentI;
 import jalview.ws2.actions.BaseAction;
+import jalview.ws2.actions.PollingTaskExecutor;
 import jalview.ws2.actions.api.TaskEventListener;
 import jalview.ws2.actions.api.TaskI;
 import jalview.ws2.api.Credentials;
@@ -54,16 +56,23 @@ public class PhmmerAction extends BaseAction<AlignmentI>
     client = builder.client;
   }
 
-  @Override
   public TaskI<AlignmentI> perform(AlignmentViewport viewport,
           List<ArgumentI> args, Credentials credentials,
           TaskEventListener<AlignmentI> handler)
   {
-    var task = new PhmmerTask(client, args, credentials,
-            viewport.getAlignmentView(true), handler);
-    task.start(viewport.getServiceExecutor());
+    var task = createTask(viewport, args, credentials);
+    task.addTaskEventListener(handler);
+    var executor = PollingTaskExecutor.fromPool(viewport.getServiceExecutor());
+    var future = executor.submit(task);
+    task.setCancelAction(() -> { future.cancel(true); });
     return task;
   }
+  
+  public PhmmerTask createTask(AlignViewportI viewport,
+      List<ArgumentI> args, Credentials credentials) 
+  {
+    return new PhmmerTask(client, args, credentials, viewport.getAlignmentView(true));
+  }
 
   @Override
   public boolean isActive(AlignmentViewport viewport)