1 package jalview.ws2.client.ebi;
3 import java.io.IOException;
4 import java.net.MalformedURLException;
5 import java.net.URISyntaxException;
9 import jalview.bin.Console;
10 import jalview.ws.params.ParamManager;
11 import jalview.ws2.actions.NullAction;
12 import jalview.ws2.actions.api.ActionI;
13 import jalview.ws2.actions.hmmer.PhmmerAction;
14 import jalview.ws2.api.WebService;
15 import jalview.ws2.client.api.AbstractWebServiceDiscoverer;
16 import uk.ac.dundee.compbio.hmmerclient.PhmmerClient;
18 public final class JobDispatcherWSDiscoverer extends AbstractWebServiceDiscoverer
21 private static final URL DEFAULT_URL;
26 DEFAULT_URL = new URL("https://www.ebi.ac.uk/Tools/services/rest/hmmer3_phmmer/");
27 } catch (MalformedURLException e)
29 throw new ExceptionInInitializerError(e);
33 private static JobDispatcherWSDiscoverer instance = null;
34 private static ParamManager paramManager = null;
36 private JobDispatcherWSDiscoverer() {}
38 public static JobDispatcherWSDiscoverer getInstance() {
40 instance = new JobDispatcherWSDiscoverer();
44 public static void setParamManager(ParamManager manager)
46 paramManager = manager;
50 public int getStatusForUrl(URL url)
54 return new PhmmerClient(url).testEndpoint() ? STATUS_OK : STATUS_INVALID;
55 } catch (URISyntaxException e)
57 Console.error(e.getMessage());
58 return STATUS_INVALID;
63 protected String getUrlsPropertyKey()
69 protected URL getDefaultUrl()
75 protected List<WebService<?>> fetchServices(URL url) throws IOException
77 PhmmerClient phmmerClient;
79 phmmerClient = new PhmmerClient(url);
81 catch (URISyntaxException e) {
82 throw new MalformedURLException(e.getMessage());
84 if (!phmmerClient.testEndpoint())
85 throw new IOException(
86 "unable to reach dispatcher server at " + url);
87 // TODO change once a concrete action is implemented
88 var wsBuilder = WebService.<PhmmerAction> newBuilder();
90 wsBuilder.clientName("job dispatcher");
91 wsBuilder.category("Database search");
92 wsBuilder.name("pHMMER");
93 wsBuilder.description("Hmmer3 phmmer is used to search one or more query sequences against a sequence database.");
94 wsBuilder.interactive(false);
95 wsBuilder.paramDatastore(ParamStores.newPhmmerDatastore(url, paramManager));
96 wsBuilder.actionClass(PhmmerAction.class);
97 var webService = wsBuilder.build();
99 var client = new PhmmerWSClient(phmmerClient);
100 var actionBuilder = PhmmerAction.newBuilder(client);
101 actionBuilder.webService(webService);
102 actionBuilder.name("");
103 webService.addAction(actionBuilder.build());
105 return List.of(webService);