}
}
- 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())
{