package jalview.ws2.client.jpred4; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Collections; import java.util.List; import jalview.ws.params.ArgumentI; import jalview.ws.params.ParamManager; import jalview.ws2.actions.secstructpred.SecStructPredAction; import jalview.ws2.api.WebService; import jalview.ws2.client.api.AbstractWebServiceDiscoverer; import jalview.ws2.client.ebi.JobDispatcherWSDiscoverer; import jalview.ws2.params.SimpleParamDatastore; import uk.ac.dundee.compbio.jpred.JPredClient; public class JPred4WSDiscoverer extends AbstractWebServiceDiscoverer { private static final URL DEFAULT_URL; static { try { DEFAULT_URL = new URL("https://www.compbio.dundee.ac.uk/jpred4/"); } catch (MalformedURLException e) { throw new ExceptionInInitializerError(e); } } private static JPred4WSDiscoverer instance = null; private static ParamManager paramManager = null; private JPred4WSDiscoverer() { } public static JPred4WSDiscoverer getInstance() { if (instance == null) instance = new JPred4WSDiscoverer(); return instance; } public static void setParamManager(ParamManager manager) { paramManager = manager; } @Override public int getStatusForUrl(URL url) { // TODO: implement actual status check return STATUS_OK; } @Override public String getUrlsPropertyKey() { return null; } @Override protected URL getDefaultUrl() { return DEFAULT_URL; } @Override protected List> fetchServices(URL url) throws IOException { JPredClient client = new JPredClient(url); var wsBuilder = WebService. newBuilder(); wsBuilder.url(url); wsBuilder.clientName("jpred4"); wsBuilder.category("Secondary structure prediction"); wsBuilder.name("jpred4"); wsBuilder.description("JPred4 Secondary Structure Prediction."); wsBuilder.interactive(false); wsBuilder .paramDatastore(new SimpleParamDatastore(url, Collections.emptyList(), Collections.emptyList(), paramManager)); wsBuilder.actionClass(SecStructPredAction.class); var webService = wsBuilder.build(); var actionBuilder = SecStructPredAction.newBuilder( new JPred4WSClient(client, false)); actionBuilder.webService(webService); actionBuilder.name("JPred4"); webService.addAction(actionBuilder.build()); var actionBuilderMsa = SecStructPredAction.newBuilder( new JPred4WSClient(client, true)); actionBuilderMsa.webService(webService); actionBuilderMsa.name("JPred4 (MSA)"); webService.addAction(actionBuilderMsa.build()); return List.of(webService); } }