JAL-3878 Create WebServiceMenuBuilder which will replace PreferredServiceRegistry
[jalview.git] / src / jalview / gui / AlignFrame.java
index 9fb6ee5..3d00450 100644 (file)
@@ -4726,35 +4726,18 @@ public class AlignFrame extends GAlignFrame
     }
   }
 
-  private void buildWebServicesMenu(WebServiceDiscoverer discoverer, JMenu menu)
+  private void buildWebServicesMenu(WebServiceDiscoverer discoverer, final JMenu menu)
   {
     if (discoverer.hasServices())
     {
-      var services = new ArrayList<>(discoverer.getServices());
-      services.sort(Comparator
-              .<WebServiceI, String>comparing(o -> o.getHostName())
-              .<String>thenComparing(o -> o.getName()));
-      Map<String, String> lastHostForOperation = new HashMap<>();
-      for (final WebServiceI service : services)
-      {
-        var host = service.getHostName();
-        for (Operation op : service.getOperations())
-        {
-          JMenu atpoint = JvSwingUtils.findOrCreateMenu(menu, op.getTypeName());
-          String lastHost = lastHostForOperation.get(op.getTypeName());
-          if (lastHost != host) {
-            if (lastHost != null)
-              atpoint.addSeparator();
-            var menuItem = new JMenuItem(host);
-            menuItem.setForeground(Color.blue);
-            menuItem.addActionListener(e -> Desktop.showUrl(host));
-            atpoint.add(menuItem);
-            lastHostForOperation.put(op.getTypeName(), host);
-          }
-          atpoint.addSeparator();
-          op.getMenuBuilder().buildMenu(atpoint, this);
-        }
-      }
+      var builder = new WebServicesMenuBuilder();
+      for (var service : discoverer.getServices())
+        builder.addAllOperations(service.getOperations());
+      builder.addSelectedHostChangeListener((name, op) -> {
+        menu.removeAll();
+        builder.buildMenu(menu, this);
+      });
+      builder.buildMenu(menu, this);
     }
     if (discoverer.isRunning())
     {