import jalview.bin.Cache;
import jalview.ws2.*;
import jalview.ws2.operations.AlignmentOperation;
+import jalview.ws2.operations.AnnotationOperation;
import jalview.ws2.operations.Operation;
import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
private static SlivkaWSDiscoverer instance = null;
- private List<WebServiceI> services = List.of();
+ private List<Operation> operations = List.of();
private SlivkaWSDiscoverer()
{
}
}
- public List<WebServiceI> getServices()
+ @Override
+ public List<Operation> getOperations()
{
- return Collections.unmodifiableList(services);
+ return Collections.unmodifiableList(operations);
}
+ @Override
public boolean hasServices()
{
- return !isRunning() && services.size() > 0;
+ return !isRunning() && operations.size() > 0;
}
public boolean isRunning()
reloadServices();
return SlivkaWSDiscoverer.this;
});
+ task.thenRun(() -> fireOperationsChanged(getOperations()));
discoveryTasks.add(task);
return task;
}
- private List<WebServiceI> reloadServices()
+ private List<Operation> reloadServices()
{
Cache.log.info("Reloading Slivka services");
- fireServicesChanged(Collections.emptyList());
- ArrayList<WebServiceI> allServices = new ArrayList<>();
+ fireOperationsChanged(Collections.emptyList());
+ ArrayList<Operation> allOperations= new ArrayList<>();
for (String url : getUrls())
{
SlivkaClient client = new SlivkaClient(url);
for (SlivkaService service : services)
{
SlivkaWebService instance = new SlivkaWebService(client, service);
+ Operation op = null;
for (String classifier : service.classifiers)
{
String[] path = classifier.split("\\s*::\\s*");
if (path.length >= 3 && path[0].toLowerCase().equals("operation")
&& path[1].toLowerCase().equals("analysis"))
{
- Operation op = null;
switch (path[path.length - 1].toLowerCase())
{
+ case "rna secondary structure prediction":
+ AnnotationOperation anop;
+ op = anop = new AnnotationOperation(instance,
+ instance::getAnnotations, instance::getFeaturesFile,
+ "Secondary Structure Prediction");
+ anop.setInteractive(true);
+ anop.setAlignmentAnalysis(true);
+ anop.setProteinOperation(false);
+ break;
+ case "sequence alignment analysis (conservation)":
+ op = anop = new AnnotationOperation(instance,
+ instance::getAnnotations, instance::getFeaturesFile,
+ "Conservation");
+ anop.setAlignmentAnalysis(true);
+ anop.setInteractive(true);
+ break;
+ case "protein sequence analysis":
+ op = new AnnotationOperation(instance, instance::getAnnotations,
+ instance::getFeaturesFile, "Protein Disorder");
+ break;
case "multiple sequence alignment":
op = new AlignmentOperation(instance, instance::getAlignment);
+ break;
}
if (op != null)
- instance.addOperation(op);
+ {
+ break;
+ }
}
}
- if (instance.operations.size() > 0)
- {
- allServices.add(instance);
+ if (op != null) {
+ allOperations.add(op);
}
}
}
- this.services = allServices;
+ this.operations = allOperations;
Cache.log.info("Reloading slivka services finished");
- fireServicesChanged(getServices());
- return allServices;
+ return allOperations;
}
@Override