X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=3d00450353f89230ee6eb15478ffd5011af82737;hb=9c661277be76b954869d645e121d39224713e7b9;hp=9fb6ee5d5ce46fd5eb085ef600a118cb51c9950b;hpb=0a5c498eeb5d5b6bd73a3d1a9dc153f4de644fad;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 9fb6ee5..3d00450 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -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 - .comparing(o -> o.getHostName()) - .thenComparing(o -> o.getName())); - Map 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()) {