import jalview.schemes.TurnColourScheme;
import jalview.schemes.UserColourScheme;
import jalview.schemes.ZappoColourScheme;
+import jalview.ws.WSMenuEntryProviderI;
import jalview.ws.jws1.Discoverer;
import jalview.ws.jws2.Jws2Discoverer;
// object broker mechanism.
final Vector wsmenu = new Vector();
final IProgressIndicator af = me;
+ final JMenu msawsmenu = new JMenu("Alignment");
+ final JMenu secstrmenu = new JMenu(
+ "Secondary Structure Prediction");
+ final JMenu seqsrchmenu = new JMenu(
+ "Sequence Database Search");
+ final JMenu analymenu = new JMenu(
+ "Analyse Alignment");
+
if (Cache.getDefault("SHOW_JWS1_SERVICES", true)
&& Discoverer.services != null
&& (Discoverer.services.size() > 0))
if (msaws != null)
{
// Add any Multiple Sequence Alignment Services
- final JMenu msawsmenu = new JMenu("Alignment");
for (int i = 0, j = msaws.size(); i < j; i++)
{
final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws
impl.attachWSMenuEntry(msawsmenu, me);
}
- wsmenu.add(msawsmenu);
}
if (secstrpr != null)
{
// Add any secondary structure prediction services
- final JMenu secstrmenu = new JMenu(
- "Secondary Structure Prediction");
for (int i = 0, j = secstrpr.size(); i < j; i++)
{
final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) secstrpr
.getServiceClient(sh);
impl.attachWSMenuEntry(secstrmenu, me);
}
- wsmenu.add(secstrmenu);
}
if (seqsrch != null)
{
// Add any sequence search services
- final JMenu seqsrchmenu = new JMenu(
- "Sequence Database Search");
for (int i = 0, j = seqsrch.size(); i < j; i++)
{
final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) seqsrch
.getServiceClient(sh);
impl.attachWSMenuEntry(seqsrchmenu, me);
}
- wsmenu.add(seqsrchmenu);
}
}
if (jws2servs.hasServices())
{
JMenu jws2men = new JMenu("Jaba Web Services");
- jws2servs.attachWSMenuEntry(jws2men, me);
- for (int i = 0, iSize = jws2men.getMenuComponentCount(); i < iSize; i++)
- {
- wsmenu.add(jws2men.getMenuComponent(i));
- }
+ jws2servs.attachWSMenuEntry(msawsmenu, me);
+// for (int i = 0, iSize = jws2men.getMenuComponentCount(); i < iSize; i++)
+// {
+// msawsmenu.add(jws2men.getMenuComponent(i));
+// }
}
}
}
+ if (msawsmenu.getMenuComponentCount()>0)
+ wsmenu.add(msawsmenu);
+ if (secstrmenu.getMenuComponentCount()>0)
+ wsmenu.add(secstrmenu);
+ if (analymenu.getMenuComponentCount()>0)
+ wsmenu.add(analymenu);
+ if (seqsrchmenu.getMenuComponentCount()>0)
+ wsmenu.add(seqsrchmenu);
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
// TODO: refactor to RestClient discoverer and merge menu entries for
// rest-style services with other types of analysis/calculation service
// SHmmr test client - still being implemented.
- jalview.ws.rest.RestClient.makeShmmrRestClient().attachWSMenuEntry(
- webService, this);
+
+ for (jalview.ws.rest.RestClient client: jalview.ws.rest.RestClient.getRestClients()) {
+ client.attachWSMenuEntry(JvSwingUtils.findOrCreateMenu(webService, client.getAction()), this);
+ }
// DEBUG - alignmentView
}
import jalview.gui.AlignFrame;
import jalview.gui.Desktop;
import jalview.gui.JalviewChangeSupport;
+import jalview.gui.JvSwingUtils;
import jalview.ws.WSMenuEntryProviderI;
+import jalview.ws.jws2.Jws2Discoverer.Jws2Instance;
import jalview.ws.params.ParamDatastoreI;
import compbio.data.msa.MsaWS;
import compbio.metadata.Option;
{
// this is only valid for Jaba 1.0 - this formula might have to change!
return hosturl
- + (hosturl.lastIndexOf("/") == (hosturl.length() - 1) ? "/"
- : "") + serviceType;
+ + (hosturl.lastIndexOf("/") == (hosturl.length() - 1) ? ""
+ : "/") + serviceType;
}
private boolean hasParams = false, lookedForParams = false;
*/
protected Vector<Jws2Instance> services;
- /**
- * find or add a submenu with the given title in the given menu
- *
- * @param menu
- * @param submenu
- * @return the new or existing submenu
- */
- private JMenu findOrCreateMenu(JMenu menu, String submenu)
- {
- JMenu submenuinstance = null;
- for (int i = 0, iSize = menu.getMenuComponentCount(); i < iSize; i++)
- {
- if (menu.getMenuComponent(i) instanceof JMenu
- && ((JMenu) menu.getMenuComponent(i)).getText().equals(
- submenu))
- {
- submenuinstance = (JMenu) menu.getMenuComponent(i);
- }
- }
- if (submenuinstance == null)
- {
- submenuinstance = new JMenu(submenu);
- menu.add(submenuinstance);
- }
- return submenuinstance;
-
- }
-
public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
{
// dynamically regenerate service list.
- final JMenu jws2al = new JMenu("JABAWS Alignment");
+ final JMenu jws2al = wsmenu; // new JMenu("JABAWS Alignment");
jws2al.addMenuListener(new MenuListener()
{
// TODO: future: add menu listener to parent menu - so submenus are
Vector hostLabels = new Vector();
jws2al.removeAll();
String lasthost = null;
- for (final Jws2Instance service : services)
+ Hashtable<String, ArrayList<Jws2Instance>> hosts = new Hashtable<String, ArrayList<Jws2Instance>>();
+ String[] sorton;
+ for (Jws2Instance service : services)
{
- atpoint = jws2al;
- String host = service.getHost();
- String type = service.serviceType;
- if (byhost)
+ ArrayList<Jws2Instance> hostservices = hosts.get(service.getHost());
+ if (hostservices == null)
{
- atpoint = findOrCreateMenu(atpoint, host);
- if (atpoint.getToolTipText() == null)
- {
- atpoint.setToolTipText("Services at " + host);
- }
+ hosts.put(service.getHost(),
+ hostservices = new ArrayList<Jws2Instance>());
}
- if (bytype)
+ hostservices.add(service);
+ }
+ sorton = hosts.keySet().toArray(new String[1]);
+ String hostlist[] = sorton.clone();
+ jalview.util.QuickSort.sort(sorton, hostlist);
+ for (String host : hostlist)
+ {
+ Jws2Instance orderedsvcs[] = hosts.get(host).toArray(
+ new Jws2Instance[1]);
+ String sortbytype[] = new String[orderedsvcs.length];
+ for (int i = 0; i < sortbytype.length; i++)
{
- atpoint = findOrCreateMenu(atpoint, type);
- if (atpoint.getToolTipText() == null)
- {
- atpoint.setToolTipText(service.getActionText());
- }
+ sortbytype[i] = orderedsvcs[i].serviceType;
}
- if (!byhost
- && !hostLabels.contains(host + service.serviceType
- + service.getActionText()))
- // !hostLabels.contains(host + (bytype ?
- // service.serviceType+service.getActionText() : "")))
+ jalview.util.QuickSort.sort(sortbytype, orderedsvcs);
+ for (final Jws2Instance service : orderedsvcs)
{
- // add a marker indicating where this service is hosted
- // relies on services from the same host being listed in a contiguous
- // group
- JMenuItem hitm;
- atpoint.addSeparator();
- if (lasthost == null || !lasthost.equals(host))
+ atpoint = jws2al;
+ String type = service.serviceType;
+ if (byhost)
{
- atpoint.add(hitm = new JMenuItem(host));
- hitm.setForeground(Color.blue);
- lasthost = host;
+ atpoint = JvSwingUtils.findOrCreateMenu(atpoint, host);
+ if (atpoint.getToolTipText() == null)
+ {
+ atpoint.setToolTipText("Services at " + host);
+ }
+ }
+ if (bytype)
+ {
+ atpoint = JvSwingUtils.findOrCreateMenu(atpoint, type);
+ if (atpoint.getToolTipText() == null)
+ {
+ atpoint.setToolTipText(service.getActionText());
+ }
+ }
+ if (!byhost
+ && !hostLabels.contains(host + service.serviceType
+ + service.getActionText()))
+ // !hostLabels.contains(host + (bytype ?
+ // service.serviceType+service.getActionText() : "")))
+ {
+ // add a marker indicating where this service is hosted
+ // relies on services from the same host being listed in a
+ // contiguous
+ // group
+ JMenuItem hitm;
+ atpoint.addSeparator();
+ if (lasthost == null || !lasthost.equals(host))
+ {
+ atpoint.add(hitm = new JMenuItem(host));
+ hitm.setForeground(Color.blue);
+ hitm.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ Desktop.showUrl(service.getHost());
+ }
+ });
+ hitm.setToolTipText(JvSwingUtils
+ .wrapTooltip("Opens the JABAWS server's homepage in web browser"));
+ lasthost = host;
+ }
+ hostLabels.addElement(host + service.serviceType
+ + service.getActionText());
+ // hostLabels.addElement(host + (bytype ?
+ // service.serviceType+service.getActionText() : ""));
}
- hostLabels.addElement(host + service.serviceType
- + service.getActionText());
- // hostLabels.addElement(host + (bytype ?
- // service.serviceType+service.getActionText() : ""));
+ msacl.attachWSMenuEntry(atpoint, service, alignFrame);
+ /*
+ * JMenuItem sitem = new JMenuItem(service.serviceType);
+ * sitem.setToolTipText("Hosted at " + service.hosturl);
+ * sitem.addActionListener(new ActionListener() {
+ *
+ * @Override public void actionPerformed(ActionEvent e) { AlignmentView
+ * msa = alignFrame.gatherSequencesForAlignment(); MsaWSClient client =
+ * new MsaWSClient(service, "JWS2 Alignment of " +
+ * alignFrame.getTitle(), msa, false, true,
+ * alignFrame.getViewport().getAlignment().getDataset(), alignFrame); }
+ * });
+ */
}
- msacl.attachWSMenuEntry(atpoint, service, alignFrame);
- /*
- * JMenuItem sitem = new JMenuItem(service.serviceType);
- * sitem.setToolTipText("Hosted at " + service.hosturl);
- * sitem.addActionListener(new ActionListener() {
- *
- * @Override public void actionPerformed(ActionEvent e) { AlignmentView
- * msa = alignFrame.gatherSequencesForAlignment(); MsaWSClient client =
- * new MsaWSClient(service, "JWS2 Alignment of " + alignFrame.getTitle(),
- * msa, false, true, alignFrame.getViewport().getAlignment().getDataset(),
- * alignFrame); } });
- */
}
+
}
public static void main(String[] args)
}
/**
- * add an 'empty' JABA server to the list. Only servers not already in the 'bad URL' list will be added to this list.
+ * add an 'empty' JABA server to the list. Only servers not already in the
+ * 'bad URL' list will be added to this list.
*
* @param jwsservers
*/