JAL-4389 Adjust preferences menu to work with any WSDiscoverer
[jalview.git] / src / jalview / ws2 / client / ebi / JobDispatcherWSDiscoverer.java
1 package jalview.ws2.client.ebi;
2
3 import java.io.IOException;
4 import java.net.MalformedURLException;
5 import java.net.URISyntaxException;
6 import java.net.URL;
7 import java.util.List;
8
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;
17
18 public final class JobDispatcherWSDiscoverer extends AbstractWebServiceDiscoverer
19 {
20
21   private static final URL DEFAULT_URL;
22   static
23   {
24     try
25     {
26       DEFAULT_URL = new URL("https://www.ebi.ac.uk/Tools/services/rest/hmmer3_phmmer/");
27     } catch (MalformedURLException e)
28     {
29       throw new ExceptionInInitializerError(e);
30     }
31   }
32   
33   private static JobDispatcherWSDiscoverer instance = null;
34   private static ParamManager paramManager = null;
35   
36   private JobDispatcherWSDiscoverer() {}
37   
38   public static JobDispatcherWSDiscoverer getInstance() {
39     if (instance == null)
40       instance = new JobDispatcherWSDiscoverer();
41     return instance;
42   }
43   
44   public String getName()
45   {
46     return "Job Dispatcher";
47   }
48
49   public static void setParamManager(ParamManager manager)
50   {
51     paramManager = manager;
52   }
53   
54   @Override
55   public int getStatusForUrl(URL url)
56   {
57     try
58     {
59       return new PhmmerClient(url).testEndpoint() ? STATUS_OK : STATUS_INVALID;
60     } catch (URISyntaxException e)
61     {
62       Console.error(e.getMessage());
63       return STATUS_INVALID;
64     } 
65   }
66
67   @Override
68   protected String getUrlsPropertyKey()
69   {
70     return null;
71   }
72
73   @Override
74   protected URL getDefaultUrl()
75   {
76     return DEFAULT_URL;
77   }
78
79   @Override
80   protected List<WebService<?>> fetchServices(URL url) throws IOException
81   {
82     PhmmerClient phmmerClient;
83     try {
84       phmmerClient = new PhmmerClient(url);
85     }
86     catch (URISyntaxException e) {
87       throw new MalformedURLException(e.getMessage());
88     }
89     if (!phmmerClient.testEndpoint())
90       throw new IOException(
91               "unable to reach dispatcher server at " + url);
92     var wsBuilder = WebService.<PhmmerAction> newBuilder();
93     wsBuilder.url(url);
94     wsBuilder.clientName("job dispatcher");
95     wsBuilder.category("Database search");
96     wsBuilder.name("pHMMER");
97     wsBuilder.description("Hmmer3 phmmer is used to search one or more query sequences against a sequence database.");
98     wsBuilder.interactive(false);
99     wsBuilder.paramDatastore(ParamStores.newPhmmerDatastore(url, paramManager));
100     wsBuilder.actionClass(PhmmerAction.class);
101     var webService = wsBuilder.build(); 
102     
103     var client = new PhmmerWSClient(phmmerClient);
104     var actionBuilder = PhmmerAction.newBuilder(client);
105     actionBuilder.webService(webService);
106     actionBuilder.name("");
107     webService.addAction(actionBuilder.build());
108     
109     return List.of(webService);
110   }
111
112 }