+\r
+ /**\r
+ * Generates menu items and listener event actions for web service clients\r
+ *\r
+ */\r
+ public void BuildWebServiceMenu()\r
+ {\r
+ if ( (Desktop.discoverer.services != null)\r
+ && (Desktop.discoverer.services.size() > 0))\r
+ {\r
+ Vector msaws = (Vector) Desktop.discoverer.services.get("MsaWS");\r
+ Vector secstrpr = (Vector) Desktop.discoverer.services.get("SecStrPred");\r
+ Vector wsmenu = new Vector();\r
+ if (msaws != null)\r
+ {\r
+ // Add any Multiple Sequence Alignment Services\r
+ final JMenu msawsmenu = new JMenu("Alignment");\r
+ for (int i = 0, j = msaws.size(); i < j; i++)\r
+ {\r
+ final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle) msaws.\r
+ get(i);\r
+ final JMenuItem method = new JMenuItem(sh.getName());\r
+ method.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceI[] msa = gatherSequencesForAlignment();\r
+ MsaWSClient ct = new jalview.ws.MsaWSClient(sh, title, msa,\r
+ false, true);\r
+\r
+ }\r
+\r
+ });\r
+ msawsmenu.add(method);\r
+ // Deal with services that we know accept partial alignments.\r
+ if (sh.getName().indexOf("lustal") > -1)\r
+ {\r
+ // We know that ClustalWS can accept partial alignments for refinement.\r
+ final JMenuItem methodR = new JMenuItem(sh.getName()+" Realign");\r
+ methodR.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceI[] msa = gatherSequencesForAlignment();\r
+ MsaWSClient ct = new jalview.ws.MsaWSClient(sh, title, msa,\r
+ true, true);\r
+\r
+ }\r
+\r
+ });\r
+ msawsmenu.add(methodR);\r
+\r
+ }\r
+ }\r
+ wsmenu.add(msawsmenu);\r
+ }\r
+ if (secstrpr != null)\r
+ {\r
+ // Add any secondary structure prediction services\r
+ final JMenu secstrmenu = new JMenu("Secondary Structure Prediction");\r
+ for (int i = 0, j = secstrpr.size(); i < j; i++)\r
+ {\r
+ final ext.vamsas.ServiceHandle sh = (ext.vamsas.ServiceHandle)\r
+ secstrpr.get(i);\r
+ final JMenuItem method = new JMenuItem(sh.getName());\r
+ method.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceI[] msa = gatherSeqOrMsaForSecStrPrediction();\r
+ if (msa.length == 1)\r
+ {\r
+ // Single Sequence prediction\r
+ jalview.ws.JPredClient ct = new jalview.ws.JPredClient(sh,\r
+ title, msa[0]);\r
+ }\r
+ else\r
+ {\r
+ if (msa.length > 1)\r
+ {\r
+ // Single Sequence prediction\r
+ jalview.ws.JPredClient ct = new jalview.ws.JPredClient(sh,\r
+ title, msa);\r
+ }\r
+ }\r
+ }\r
+ });\r
+ secstrmenu.add(method);\r
+ }\r
+ wsmenu.add(secstrmenu);\r
+ }\r
+ this.webService.removeAll();\r
+ for (int i = 0, j = wsmenu.size(); i < j; i++)\r
+ {\r
+ webService.add( (JMenu) wsmenu.get(i));\r
+ }\r
+ }\r
+ else\r
+ {\r
+ this.webService.removeAll();\r
+ this.webService.add(this.webServiceNoServices);\r
+ }\r
+ // TODO: add in rediscovery function\r
+ // TODO: reduce code redundancy.\r
+ // TODO: group services by location as well as function.\r
+ }\r
+\r