+ List<Jws2Instance> enumerableServices = new ArrayList<Jws2Instance>();
+ // jws2al.removeAll();
+ Map<String, Jws2Instance> preferredHosts = new HashMap<String, Jws2Instance>();
+ Map<String, List<Jws2Instance>> alternates = new HashMap<String, List<Jws2Instance>>();
+ for (Jws2Instance service : services.toArray(new Jws2Instance[0]))
+ {
+ if (!isRecalculable(service.action))
+ {
+ // add 'one shot' services to be displayed using the classic menu
+ // structure
+ enumerableServices.add(service);
+ }
+ else
+ {
+ if (!preferredHosts.containsKey(service.serviceType))
+ {
+ Jws2Instance preferredInstance = getPreferredServiceFor(
+ alignFrame, service.serviceType);
+ if (preferredInstance != null)
+ {
+ preferredHosts.put(service.serviceType, preferredInstance);
+ }
+ else
+ {
+ preferredHosts.put(service.serviceType, service);
+ }
+ }
+ List<Jws2Instance> ph = alternates.get(service.serviceType);
+ if (preferredHosts.get(service.serviceType) != service)
+ {
+ if (ph == null)
+ {
+ ph = new ArrayList<Jws2Instance>();
+ }
+ ph.add(service);
+ alternates.put(service.serviceType, ph);
+ }
+ }
+
+ }
+
+ // create GUI element for classic services
+ addEnumeratedServices(jws2al, alignFrame, enumerableServices);
+ // and the instantaneous services
+ for (final Jws2Instance service : preferredHosts.values())
+ {
+ atpoint = JvSwingUtils.findOrCreateMenu(jws2al, service.action);
+ JMenuItem hitm;
+ if (atpoint.getItemCount() > 1)
+ {
+ // previous service of this type already present
+ atpoint.addSeparator();
+ }
+ atpoint.add(hitm = new JMenuItem(service.getHost()));
+ hitm.setForeground(Color.blue);
+ hitm.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ Desktop.showUrl(service.getHost());
+ }
+ });
+ hitm.setToolTipText(JvSwingUtils
+ .wrapTooltip(false, MessageManager.getString("label.open_jabaws_web_page ")));
+
+ service.attachWSMenuEntry(atpoint, alignFrame);
+ if (alternates.containsKey(service.serviceType))
+ {
+ atpoint.add(hitm = new JMenu(MessageManager.getString("label.switch_server")));
+ hitm.setToolTipText(JvSwingUtils
+ .wrapTooltip(false, MessageManager.getString("label.choose_jabaws_server")));
+ for (final Jws2Instance sv : alternates.get(service.serviceType))
+ {
+ JMenuItem itm;
+ hitm.add(itm = new JMenuItem(sv.getHost()));
+ itm.setForeground(Color.blue);
+ itm.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0)
+ {
+ new Thread(new Runnable()
+ {
+ public void run()
+ {
+ setPreferredServiceFor(alignFrame, sv.serviceType,
+ sv.action, sv);
+ changeSupport.firePropertyChange("services",
+ new Vector(), services);
+ };
+ }).start();
+
+ }
+ });
+ }
+ /*
+ * hitm.addActionListener(new ActionListener() {
+ *
+ * @Override public void actionPerformed(ActionEvent arg0) { new
+ * Thread(new Runnable() {
+ *
+ * @Override public void run() { new SetPreferredServer(alignFrame,
+ * service.serviceType, service.action); } }).start(); } });
+ */
+ }
+ }
+ }
+
+ /**
+ * add services using the Java 2.5/2.6/2.7 system which optionally creates
+ * submenus to index by host and service program type
+ */
+ private void addEnumeratedServices(final JMenu jws2al,
+ final AlignFrame alignFrame, List<Jws2Instance> enumerableServices)
+ {
+ boolean byhost = Cache.getDefault("WSMENU_BYHOST", false), bytype = Cache
+ .getDefault("WSMENU_BYTYPE", false);
+ /**
+ * eventually, JWS2 services will appear under the same align/etc submenus.
+ * for moment we keep them separate.
+ */
+ JMenu atpoint;