import java.io.IOException;
import java.net.MalformedURLException;
+import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import java.util.function.Function;
import jalview.bin.Cache;
import jalview.bin.Console;
private static SlivkaWSDiscoverer instance = null;
private static ParamManager paramManager = null;
+
+ private final Function<URI, SlivkaClient> clientFactory;
- private SlivkaWSDiscoverer()
+ SlivkaWSDiscoverer(Function<URI, SlivkaClient> clientFactory)
{
+ this.clientFactory = clientFactory;
}
public static SlivkaWSDiscoverer getInstance()
{
if (instance == null)
- instance = new SlivkaWSDiscoverer();
+ instance = new SlivkaWSDiscoverer(SlivkaClient::newInstance);
return instance;
}
{
try
{
- List<?> services = new SlivkaClient(url.toString()).getServices();
+ List<?> services = clientFactory.apply(url.toURI()).getServices();
return services.isEmpty() ? STATUS_NO_SERVICES : STATUS_OK;
+ } catch (URISyntaxException e)
+ {
+ Console.error("invalid URL " + url, e);
+ return STATUS_INVALID;
} catch (IOException e)
{
Console.error("slivka could not retrieve services from " + url, e);
SlivkaClient slivkaClient;
try
{
- slivkaClient = new SlivkaClient(url.toURI());
+ slivkaClient = clientFactory.apply(url.toURI());
} catch (URISyntaxException e)
{
throw new MalformedURLException(e.getMessage());
if (serviceClass == SERVICE_CLASS_MSA)
{
var wsb = WebService.<AlignmentAction> newBuilder();
- initServiceBuilder(slivkaService, wsb);
+ initServiceBuilder(slivkaClient, slivkaService, wsb);
wsb.category("Alignment");
wsb.interactive(false);
wsb.actionClass(AlignmentAction.class);
var msaService = wsb.build();
boolean canRealign = msaService.getName().contains("lustal");
- var client = new SlivkaAlignmentWSClient(slivkaService);
+ var client = new SlivkaAlignmentWSClient(slivkaClient, slivkaService);
var actionBuilder = AlignmentAction.newBuilder(client);
actionBuilder.name("Alignment");
actionBuilder.webService(msaService);
else if (serviceClass == SERVICE_CLASS_PROT_SEQ_ANALYSIS)
{
var wsb = WebService.<AnnotationAction> newBuilder();
- initServiceBuilder(slivkaService, wsb);
+ initServiceBuilder(slivkaClient, slivkaService, wsb);
wsb.category("Protein Disorder");
wsb.interactive(false);
wsb.actionClass(AnnotationAction.class);
var psaService = wsb.build();
- var client = new SlivkaAnnotationWSClient(slivkaService);
+ var client = new SlivkaAnnotationWSClient(slivkaClient, slivkaService);
var actionBuilder = AnnotationAction.newBuilder(client);
actionBuilder.webService(psaService);
actionBuilder.name("Analysis");
else if (serviceClass == SERVICE_CLASS_CONSERVATION)
{
var wsb = WebService.<AnnotationAction> newBuilder();
- initServiceBuilder(slivkaService, wsb);
+ initServiceBuilder(slivkaClient, slivkaService, wsb);
wsb.category("Conservation");
wsb.interactive(true);
wsb.actionClass(AnnotationAction.class);
var conService = wsb.build();
- var client = new SlivkaAnnotationWSClient(slivkaService);
+ var client = new SlivkaAnnotationWSClient(slivkaClient, slivkaService);
var actionBuilder = AnnotationAction.newBuilder(client);
actionBuilder.webService(conService);
actionBuilder.name("");
else if (serviceClass == SERVICE_CLASS_RNA_SEC_STR_PRED)
{
var wsb = WebService.<AnnotationAction> newBuilder();
- initServiceBuilder(slivkaService, wsb);
+ initServiceBuilder(slivkaClient, slivkaService, wsb);
wsb.category("Secondary Structure Prediction");
wsb.interactive(true);
wsb.actionClass(AnnotationAction.class);
var predService = wsb.build();
- var client = new SlivkaAnnotationWSClient(slivkaService);
+ var client = new SlivkaAnnotationWSClient(slivkaClient, slivkaService);
var actionBuilder = AnnotationAction.newBuilder(client);
actionBuilder.webService(predService);
actionBuilder.name("Prediction");
return allServices;
}
- private void initServiceBuilder(SlivkaService service, WebService.Builder<?> wsBuilder)
+ private void initServiceBuilder(SlivkaClient client, SlivkaService service, WebService.Builder<?> wsBuilder)
{
try
{
- wsBuilder.url(service.getClient().getUrl().toURL());
+ wsBuilder.url(client.getUrl().toURL());
} catch (MalformedURLException e)
{
e.printStackTrace();