JAL-3878 Separate gui elements from operations.
[jalview.git] / src / jalview / ws2 / slivka / SlivkaWSDiscoverer.java
index f2dd9ee..8534f06 100644 (file)
@@ -9,6 +9,7 @@ import java.util.concurrent.*;
 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;
@@ -21,7 +22,7 @@ public class SlivkaWSDiscoverer implements WebServiceDiscoverer
 
   private static SlivkaWSDiscoverer instance = null;
 
-  private List<WebServiceI> services = List.of();
+  private List<Operation> operations = List.of();
 
   private SlivkaWSDiscoverer()
   {
@@ -95,14 +96,16 @@ public class SlivkaWSDiscoverer implements WebServiceDiscoverer
     }
   }
 
-  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()
@@ -132,15 +135,16 @@ public class SlivkaWSDiscoverer implements WebServiceDiscoverer
               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);
@@ -156,32 +160,45 @@ public class SlivkaWSDiscoverer implements WebServiceDiscoverer
       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 "sequence alignment analysis (conservation)":
+              AnnotationOperation anop;
+              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