JAL-1601 Load and display JPred4 service in AlignFrame
[jalview.git] / src / jalview / gui / AlignFrame.java
index 8ae4601..2849d6b 100644 (file)
@@ -184,6 +184,7 @@ import jalview.ws.params.WsParamSetI;
 import jalview.ws.seqfetcher.DbSourceProxy;
 import jalview.ws2.client.api.WebServiceDiscovererI;
 import jalview.ws2.client.ebi.JobDispatcherWSDiscoverer;
+import jalview.ws2.client.jpred4.JPred4WSDiscoverer;
 import jalview.ws2.client.slivka.SlivkaWSDiscoverer;
 import jalview.ws2.gui.WebServicesMenuManager;
 
@@ -986,6 +987,15 @@ public class AlignFrame extends GAlignFrame
         menu.setInProgress(discoverer.isRunning());
         menu.setNoServices(services.isEmpty() && discoverer.isDone());
       };
+  
+  private WebServiceDiscovererI.ServicesChangeListener jpred4ServiceChangeListener =
+      (discoverer, services) -> {
+        // run when jpred4 services change
+        var menu = AlignFrame.this.jpred4Menu;
+        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()
@@ -999,6 +1009,10 @@ public class AlignFrame extends GAlignFrame
     {
       JobDispatcherWSDiscoverer.getInstance().addServicesChangeListener(ebiServiceChangeListener);
     }
+    if (Cache.getDefault("SHOW_JPRED4_SERVICES", true))
+    {
+      JPred4WSDiscoverer.getInstance().addServicesChangeListener(jpred4ServiceChangeListener);
+    }
     if (Cache.getDefault("SHOW_JWS2_SERVICES", true))
     {
       WSDiscovererI discoverer = Jws2Discoverer.getInstance();
@@ -1015,6 +1029,7 @@ public class AlignFrame extends GAlignFrame
       public void internalFrameClosed(InternalFrameEvent e) {
         System.out.println("deregistering discoverer listener");
         SlivkaWSDiscoverer.getInstance().removeServicesChangeListener(slivkaServiceChangeListener);
+        JPred4WSDiscoverer.getInstance().removeServicesChangeListener(jpred4ServiceChangeListener);
         Jws2Discoverer.getInstance().removeServiceChangeListener(AlignFrame.this);
         Desktop.getInstance().removeJalviewPropertyChangeListener("services", legacyListener);
         closeMenuItem_actionPerformed(true);
@@ -4672,6 +4687,7 @@ public class AlignFrame extends GAlignFrame
 
   private WebServicesMenuManager slivkaMenu = new WebServicesMenuManager("slivka", this);
   private WebServicesMenuManager ebiMenu = new WebServicesMenuManager("job dispatcher", this);
+  private WebServicesMenuManager jpred4Menu = new WebServicesMenuManager("jpred4", this);
 
   /**
    * Schedule the web services menu rebuild to the event dispatch thread.
@@ -4699,6 +4715,15 @@ public class AlignFrame extends GAlignFrame
         ebiMenu.setNoServices(discoverer.isDone() && !discoverer.hasServices());
         webService.add(ebiMenu.getMenu());
       }
+      if (Cache.getDefault("SHOW_JPRED4_SERVICES", true))
+      {
+        Console.info("Building web services menu for jpred4");
+        JPred4WSDiscoverer discoverer = JPred4WSDiscoverer.getInstance();
+        jpred4Menu.setServices(discoverer);
+        jpred4Menu.setInProgress(discoverer.isRunning());
+        jpred4Menu.setNoServices(discoverer.isDone() && !discoverer.hasServices());
+        webService.add(jpred4Menu.getMenu());
+      }
       if (Cache.getDefault("SHOW_JWS2_SERVICES", true))
       {
         WSDiscovererI jws2servs = Jws2Discoverer.getInstance();