Merge branch 'feature/JAL-3954-ebi-phmmer' into mmw/JAL-4199-task-execution-update
[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 static void setParamManager(ParamManager manager)
45   {
46     paramManager = manager;
47   }
48   
49   @Override
50   public int getStatusForUrl(URL url)
51   {
52     try
53     {
54       return new PhmmerClient(url).testEndpoint() ? STATUS_OK : STATUS_INVALID;
55     } catch (URISyntaxException e)
56     {
57       Console.error(e.getMessage());
58       return STATUS_INVALID;
59     } 
60   }
61
62   @Override
63   protected String getUrlsPropertyKey()
64   {
65     return null;
66   }
67
68   @Override
69   protected URL getDefaultUrl()
70   {
71     return DEFAULT_URL;
72   }
73
74   @Override
75   protected List<WebService<?>> fetchServices(URL url) throws IOException
76   {
77     PhmmerClient phmmerClient;
78     try {
79       phmmerClient = new PhmmerClient(url);
80     }
81     catch (URISyntaxException e) {
82       throw new MalformedURLException(e.getMessage());
83     }
84     if (!phmmerClient.testEndpoint())
85       throw new IOException(
86               "unable to reach dispatcher server at " + url);
87     var wsBuilder = WebService.<PhmmerAction> newBuilder();
88     wsBuilder.url(url);
89     wsBuilder.clientName("job dispatcher");
90     wsBuilder.category("Database search");
91     wsBuilder.name("pHMMER");
92     wsBuilder.description("Hmmer3 phmmer is used to search one or more query sequences against a sequence database.");
93     wsBuilder.interactive(false);
94     wsBuilder.paramDatastore(ParamStores.newPhmmerDatastore(url, paramManager));
95     wsBuilder.actionClass(PhmmerAction.class);
96     var webService = wsBuilder.build(); 
97     
98     var client = new PhmmerWSClient(phmmerClient);
99     var actionBuilder = PhmmerAction.newBuilder(client);
100     actionBuilder.webService(webService);
101     actionBuilder.name("");
102     webService.addAction(actionBuilder.build());
103     
104     return List.of(webService);
105   }
106
107 }