Merge branch 'JAL-3878_ws-overhaul-3' into mmw/Release_2_12_ws_merge
[jalview.git] / src / jalview / gui / AlignFrame.java
index c38f336..63bbb72 100644 (file)
@@ -182,7 +182,10 @@ import jalview.ws.params.ArgumentI;
 import jalview.ws.params.ParamDatastoreI;
 import jalview.ws.params.WsParamSetI;
 import jalview.ws.seqfetcher.DbSourceProxy;
-import jalview.ws.slivkaws.SlivkaWSDiscoverer;
+import jalview.ws2.client.api.WebServiceDiscovererI;
+import jalview.ws2.client.slivka.SlivkaWSDiscoverer;
+import jalview.ws2.gui.WebServicesMenuManager;
+
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Set;
@@ -964,13 +967,23 @@ public class AlignFrame extends GAlignFrame
   {
     buildWebServicesMenu();
   }
+
+  private WebServiceDiscovererI.ServicesChangeListener slivkaServiceChangeListener =
+      (discoverer, services) -> {
+        // run when slivka services change
+        var menu = AlignFrame.this.slivkaMenu;
+        menu.setServices(discoverer);
+        menu.setInProgress(discoverer.isRunning());
+        menu.setNoServices(services.isEmpty() && discoverer.isDone());
+      };
+
   /* Set up intrinsic listeners for dynamically generated GUI bits. */
   private void addServiceListeners()
   {
     if (Cache.getDefault("SHOW_SLIVKA_SERVICES", true))
     {
-      WSDiscovererI discoverer = SlivkaWSDiscoverer.getInstance();
-      discoverer.addServiceChangeListener(this);
+      WebServiceDiscovererI discoverer = SlivkaWSDiscoverer.getInstance();
+      discoverer.addServicesChangeListener(slivkaServiceChangeListener);
     }
     if (Cache.getDefault("SHOW_JWS2_SERVICES", true))
     {
@@ -987,7 +1000,7 @@ public class AlignFrame extends GAlignFrame
       @Override
       public void internalFrameClosed(InternalFrameEvent e) {
         System.out.println("deregistering discoverer listener");
-        SlivkaWSDiscoverer.getInstance().removeServiceChangeListener(AlignFrame.this);
+        SlivkaWSDiscoverer.getInstance().removeServicesChangeListener(slivkaServiceChangeListener);
         Jws2Discoverer.getInstance().removeServiceChangeListener(AlignFrame.this);
         Desktop.getInstance().removeJalviewPropertyChangeListener("services", legacyListener);
         closeMenuItem_actionPerformed(true);
@@ -1111,6 +1124,12 @@ public class AlignFrame extends GAlignFrame
   }
   
   @Override
+  public void addProgressBar(long id, String message)
+  {
+    progressBar.addProgressBar(id, message);
+  }
+
+  @Override
   public void removeProgressBar(long id)
   {
     progressBar.removeProgressBar(id);
@@ -4637,6 +4656,7 @@ public class AlignFrame extends GAlignFrame
     return tp;
   }
 
+  private WebServicesMenuManager slivkaMenu = new WebServicesMenuManager("slivka", this);
 
   /**
    * Schedule the web services menu rebuild to the event dispatch thread.
@@ -4650,9 +4670,10 @@ public class AlignFrame extends GAlignFrame
       {
         Console.info("Building web service menu for slivka");
         SlivkaWSDiscoverer discoverer = SlivkaWSDiscoverer.getInstance();
-        JMenu submenu = new JMenu("Slivka");
-        buildWebServicesMenu(discoverer, submenu);
-        webService.add(submenu);
+        slivkaMenu.setServices(discoverer);
+        slivkaMenu.setInProgress(discoverer.isRunning());
+        slivkaMenu.setNoServices(discoverer.isDone() && !discoverer.hasServices());
+        webService.add(slivkaMenu.getMenu());
       }
       if (Cache.getDefault("SHOW_JWS2_SERVICES", true))
       {
@@ -4662,6 +4683,7 @@ public class AlignFrame extends GAlignFrame
         buildWebServicesMenu(jws2servs, submenu);
         webService.add(submenu);
       }
+      build_urlServiceMenu(webService);
       build_fetchdbmenu(webService);
     });
   }