JAL-4389 Adjust preferences menu to work with any WSDiscoverer
[jalview.git] / src / jalview / ws2 / client / jpred4 / JPred4WSDiscoverer.java
1 package jalview.ws2.client.jpred4;
2
3 import java.io.IOException;
4 import java.net.MalformedURLException;
5 import java.net.URL;
6 import java.util.Collections;
7 import java.util.List;
8
9 import jalview.ws.params.ArgumentI;
10 import jalview.ws.params.ParamManager;
11 import jalview.ws2.actions.secstructpred.SecStructPredAction;
12 import jalview.ws2.api.WebService;
13 import jalview.ws2.client.api.AbstractWebServiceDiscoverer;
14 import jalview.ws2.client.ebi.JobDispatcherWSDiscoverer;
15 import jalview.ws2.params.SimpleParamDatastore;
16 import uk.ac.dundee.compbio.jpred.JPredClient;
17
18 public class JPred4WSDiscoverer extends AbstractWebServiceDiscoverer
19 {
20   private static final URL DEFAULT_URL;
21   static
22   {
23     try
24     {
25       DEFAULT_URL = new URL("https://www.compbio.dundee.ac.uk/jpred4/");
26     } catch (MalformedURLException e)
27     {
28       throw new ExceptionInInitializerError(e);
29     }
30   }
31
32   private static JPred4WSDiscoverer instance = null;
33
34   private static ParamManager paramManager = null;
35
36   private JPred4WSDiscoverer()
37   {
38   }
39
40   public static JPred4WSDiscoverer getInstance()
41   {
42     if (instance == null)
43       instance = new JPred4WSDiscoverer();
44     return instance;
45   }
46
47   public String getName()
48   {
49     return "JPred4";
50   }
51
52   public static void setParamManager(ParamManager manager)
53   {
54     paramManager = manager;
55   }
56
57   @Override
58   public int getStatusForUrl(URL url)
59   {
60     // TODO: implement actual status check
61     return STATUS_OK;
62   }
63
64   @Override
65   public String getUrlsPropertyKey()
66   {
67     return null;
68   }
69
70   @Override
71   protected URL getDefaultUrl()
72   {
73     return DEFAULT_URL;
74   }
75
76   @Override
77   protected List<WebService<?>> fetchServices(URL url) throws IOException
78   {
79     JPredClient client = new JPredClient(url);
80     var wsBuilder = WebService.<SecStructPredAction> newBuilder();
81     wsBuilder.url(url);
82     wsBuilder.clientName("jpred4");
83     wsBuilder.category("Secondary structure prediction");
84     wsBuilder.name("jpred4");
85     wsBuilder.description("JPred4 Secondary Structure Prediction.");
86     wsBuilder.interactive(false);
87
88     wsBuilder
89         .paramDatastore(new SimpleParamDatastore(url, Collections.emptyList(),
90             Collections.emptyList(), paramManager));
91     wsBuilder.actionClass(SecStructPredAction.class);
92     var webService = wsBuilder.build();
93
94     var actionBuilder = SecStructPredAction.newBuilder(
95         new JPred4WSClient(client, false));
96     actionBuilder.webService(webService);
97     actionBuilder.msaMode(false);
98     actionBuilder.name("JPred4 (Single sequence)");
99     webService.addAction(actionBuilder.build());
100     
101     var actionBuilderMsa = SecStructPredAction.newBuilder(
102         new JPred4WSClient(client, true));
103     actionBuilderMsa.webService(webService);
104     actionBuilderMsa.msaMode(true);
105     actionBuilderMsa.name("JPred4 (MSA)");
106     webService.addAction(actionBuilderMsa.build());
107
108     return List.of(webService);
109   }
110 }