1 package jalview.ws2.actions.hmmer;
4 import java.util.Objects;
6 import jalview.api.AlignViewportI;
7 import jalview.datamodel.AlignmentI;
8 import jalview.viewmodel.AlignmentViewport;
9 import jalview.ws.params.ArgumentI;
10 import jalview.ws2.actions.BaseAction;
11 import jalview.ws2.actions.PollingTaskExecutor;
12 import jalview.ws2.actions.api.TaskEventListener;
13 import jalview.ws2.actions.api.TaskI;
14 import jalview.ws2.api.Credentials;
15 import jalview.ws2.client.api.AlignmentWebServiceClientI;
16 import jalview.ws2.client.api.WebServiceClientI;
19 * Implementation of the {@link BaseAction} for the phmmer client. This is NOT
20 * how you should implement it. The action should be more generic and cover
21 * range of similar services.
26 // FIXME: Not an alignment action (temporary hack)
27 public class PhmmerAction extends BaseAction<AlignmentI>
29 public static class Builder extends BaseAction.Builder<PhmmerAction>
31 protected AlignmentWebServiceClientI client;
33 private Builder(AlignmentWebServiceClientI client)
36 Objects.requireNonNull(client);
40 public PhmmerAction build()
42 return new PhmmerAction(this);
46 public static Builder newBuilder(AlignmentWebServiceClientI client)
48 return new Builder(client);
51 protected final AlignmentWebServiceClientI client;
53 public PhmmerAction(Builder builder)
56 client = builder.client;
59 public TaskI<AlignmentI> perform(AlignmentViewport viewport,
60 List<ArgumentI> args, Credentials credentials,
61 TaskEventListener<AlignmentI> handler)
63 var task = createTask(viewport, args, credentials);
64 task.addTaskEventListener(handler);
65 var executor = PollingTaskExecutor.fromPool(viewport.getServiceExecutor());
66 var future = executor.submit(task);
67 task.setCancelAction(() -> { future.cancel(true); });
71 public PhmmerTask createTask(AlignViewportI viewport,
72 List<ArgumentI> args, Credentials credentials)
74 return new PhmmerTask(client, args, credentials, viewport.getAlignmentView(true));
78 public boolean isActive(AlignmentViewport viewport)