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; import jalview.ws2.client.api.AlignmentWebServiceClientI; import jalview.ws2.client.api.WebServiceClientI; /** * Implementation of the {@link BaseAction} for the phmmer client. This is NOT * how you should implement it. The action should be more generic and cover * range of similar services. * * @author mmwarowny * */ // FIXME: Not an alignment action (temporary hack) public class PhmmerAction extends BaseAction { public static class Builder extends BaseAction.Builder { protected AlignmentWebServiceClientI client; private Builder(AlignmentWebServiceClientI client) { super(); Objects.requireNonNull(client); this.client = client; } public PhmmerAction build() { return new PhmmerAction(this); } } public static Builder newBuilder(AlignmentWebServiceClientI client) { return new Builder(client); } protected final AlignmentWebServiceClientI client; public PhmmerAction(Builder builder) { super(builder); client = builder.client; } public TaskI perform(AlignmentViewport viewport, List args, Credentials credentials, TaskEventListener handler) { 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 args, Credentials credentials) { return new PhmmerTask(client, args, credentials, viewport.getAlignmentView(true)); } @Override public boolean isActive(AlignmentViewport viewport) { return false; } }