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;
*
* @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;
}
}
}
- 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;
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.