-/*
- * Jalview - A Sequence Alignment Editor and Viewer
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- */
-package jalview.ws;
-
-import java.awt.Component;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import javax.swing.*;
-
-import ext.vamsas.*;
-import jalview.datamodel.*;
-import jalview.gui.*;
-
-/**
- * DOCUMENT ME!
- *
- * @author $author$
- * @version $Revision$
- */
-public class SeqSearchWSClient
- extends WSClient
-{
- /**
- * server is a WSDL2Java generated stub for an archetypal MsaWSI service.
- */
- ext.vamsas.SeqSearchI server;
- AlignFrame alignFrame;
-
- /**
- * Creates a new MsaWSClient object that uses a service
- * given by an externally retrieved ServiceHandle
- *
- * @param sh service handle of type AbstractName(MsaWS)
- * @param altitle DOCUMENT ME!
- * @param msa DOCUMENT ME!
- * @param submitGaps DOCUMENT ME!
- * @param preserveOrder DOCUMENT ME!
- */
-
- public SeqSearchWSClient(ext.vamsas.ServiceHandle sh, String altitle,
- jalview.datamodel.AlignmentView msa, String db,
- Alignment seqdataset,
- AlignFrame _alignFrame)
- {
- super();
- alignFrame = _alignFrame;
- // can generalise the two errors below for metadata mapping from interface name to service client name
- if (!sh.getAbstractName().equals(this.getServiceActionKey()))
- {
- JOptionPane.showMessageDialog(Desktop.desktop,
- "The Service called \n" + sh.getName() +
- "\nis not a \nSequence Search Service !",
- "Internal Jalview Error",
- JOptionPane.WARNING_MESSAGE);
-
- return;
- }
-
- if ( (wsInfo = setWebService(sh)) == null)
- {
- JOptionPane.showMessageDialog(Desktop.desktop,
- "The Sequence Search Service named " +
- sh.getName() +
- " is unknown", "Internal Jalview Error",
- JOptionPane.WARNING_MESSAGE);
-
- return;
- }
- startSeqSearchClient(altitle, msa, db, seqdataset);
-
- }
- /**
- * non-process web service interaction - use this for calling HEADLESS synchronous service methods
- * @param sh
- */
- public SeqSearchWSClient(ServiceHandle sh)
- {
- setWebService(sh, true);
- }
-
- public SeqSearchWSClient()
- {
-
- super();
- // add a class reference to the list
- }
- private void startSeqSearchClient(String altitle, AlignmentView msa,
- String db,
- Alignment seqdataset)
- {
- if (!locateWebService())
- {
- return;
- }
- String visdb = (db==null || db == "") ? "default" : db; // need a visible name for a sequence db
- boolean profileSearch = msa.getSequences().length>2 ? true : false;
- // single sequence or profile from alignment view
- wsInfo.setProgressText( "Searching "+visdb+(!profileSearch ? " with sequence "+msa.getSequences()[0].getRefSeq().getName()
- : " with profile") +
- " from " + altitle + "\nJob details\n");
-
- String jobtitle = WebServiceName+((WebServiceName.indexOf("earch")>-1) ? " " : " search ")+" of "+visdb+(!profileSearch ? " with sequence "+msa.getSequences()[0].getRefSeq().getName()
- : " with profile") +
- " from " + altitle;
- SeqSearchWSThread ssthread = new SeqSearchWSThread(server, WsURL, wsInfo, alignFrame,
- WebServiceName,
- jobtitle,
- msa,
- db,
- seqdataset);
- wsInfo.setthisService(ssthread);
- ssthread.start();
- }
-
- /**
- * Initializes the server field with a valid service implementation.
- *
- * @return true if service was located.
- */
- private boolean locateWebService()
- {
- // this can be abstracted using reflection
- // TODO: MuscleWS transmuted to generic MsaWS client
- SeqSearchServiceLocator loc = new SeqSearchServiceLocator(); // Default
-
- try
- {
- this.server = (SeqSearchI) loc.getSeqSearchService(new java.net.URL(WsURL));
- ( (SeqSearchServiceSoapBindingStub)this.server).setTimeout(60000); // One minute timeout
- }
- catch (Exception ex)
- {
- wsInfo.setProgressText("Serious! " + WebServiceName +
- " Service location failed\nfor URL :" + WsURL +
- "\n" +
- ex.getMessage());
- wsInfo.setStatus(WebserviceInfo.ERROR);
- ex.printStackTrace();
-
- return false;
- }
-
- loc.getEngine().setOption("axis", "1");
-
- return true;
- }
-
- protected String getServiceActionKey()
- {
- return "SeqSearch";
- }
-
- protected String getServiceActionDescription()
- {
- return "Sequence Database Search";
- }
- // simple caching of db parameters for each service endpoint
- private static Hashtable dbParamsForEndpoint;
- static {
- dbParamsForEndpoint = new Hashtable();
- }
- public String[] getSupportedDatabases() throws Exception
- {
-
- // check that we haven't already been to this service endpoint
- if (dbParamsForEndpoint.containsKey(WsURL))
- {
- return (String[]) dbParamsForEndpoint.get(WsURL);
- }
- if (!locateWebService())
- {
- throw new Exception("Cannot contact service endpoint at "+WsURL);
- }
- String database = server.getDatabase();
- if (database==null)
- {
- dbParamsForEndpoint.put(WsURL, new String[] {});
- return null;
- }
- StringTokenizer en = new StringTokenizer(database.trim(), ",| ");
- String[] dbs = new String[en.countTokens()];
- for (int i=0; i<dbs.length; i++)
- {
- dbs[i++] = en.nextToken().trim();
- }
- dbParamsForEndpoint.put(WsURL, dbs);
- return dbs;
- }
- public void attachWSMenuEntry(JMenu wsmenu, final ServiceHandle sh,
- final AlignFrame af)
- {
- // look for existing database service submenus on wsmenu
- Hashtable dbsrchs = new Hashtable();
- Vector newdbsrch = new Vector();
- Component entries[] = wsmenu.getComponents();
- for (int i = 0; entries!=null && i<entries.length; i++)
- {
- if (entries[i] instanceof JMenu)
- {
- dbsrchs.put(entries[i].getName(), entries[i]);
- }
- }
- JMenu defmenu=(JMenu) dbsrchs.get("Default Database");
- if (defmenu==null)
- {
- dbsrchs.put("Default Database", defmenu = new JMenu("Default Database"));
- newdbsrch.addElement(defmenu);
- }
-
- String dbs[] = null;
- try {
- dbs = new jalview.ws.SeqSearchWSClient(sh).getSupportedDatabases();
- } catch (Exception e)
- {
- jalview.bin.Cache.log.warn("Database list request failed, so disabling SeqSearch Service client "+sh.getName()+" at "+sh.getEndpointURL(), e);
- return;
- }
- JMenuItem method;
- // do default entry
- defmenu.add(method = new JMenuItem(sh.getName()));
- method.setToolTipText(sh.getEndpointURL());
- method.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- // use same input gatherer as for secondary structure prediction
- // we could actually parameterise the gatherer method here...
- AlignmentView msa = af.gatherSeqOrMsaForSecStrPrediction();
- new jalview.ws.SeqSearchWSClient(sh, af.getTitle(), msa, null,
- af.getViewport().getAlignment().getDataset(),
- af);
- }
- }
- );
- // add entry for each database the service supports
- for (int db=0; dbs!=null && db<dbs.length; db++)
- {
- JMenu dbmenu = (JMenu) dbsrchs.get(dbs[db]);
- if (dbmenu==null)
- {
- dbsrchs.put(dbs[db], dbmenu = new JMenu(dbs[db]));
- newdbsrch.addElement(dbmenu);
- }
- // add the client handler code for this service
- dbmenu.add(method = new JMenuItem(sh.getName()));
- method.setToolTipText(sh.getEndpointURL());
- final String searchdb = dbs[db];
- method.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- AlignmentView msa = af.gatherSeqOrMsaForSecStrPrediction();
- new jalview.ws.SeqSearchWSClient(sh, af.getTitle(), msa, searchdb,
- af.getViewport().getAlignment().getDataset(),
- af);
- }
- });
- }
- // add the databases onto the seqsearch menu
- Enumeration e = newdbsrch.elements();
- while (e.hasMoreElements())
- {
- Object el = e.nextElement();
- if (el instanceof JMenu)
- {
- wsmenu.add((JMenu) el);
- } else {
- wsmenu.add((JMenuItem) el);
- }
- }
-
- }
-}
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5)\r
+ * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview is free software: you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License \r
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\r
+ * \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE. See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+package jalview.ws;\r
+\r
+import java.awt.Component;\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+import java.util.Enumeration;\r
+import java.util.Hashtable;\r
+import java.util.StringTokenizer;\r
+import java.util.Vector;\r
+\r
+import javax.swing.*;\r
+\r
+import ext.vamsas.*;\r
+import jalview.datamodel.*;\r
+import jalview.gui.*;\r
+\r
+/**\r
+ * DOCUMENT ME!\r
+ * \r
+ * @author $author$\r
+ * @version $Revision$\r
+ */\r
+public class SeqSearchWSClient extends WS1Client\r
+{\r
+ /**\r
+ * server is a WSDL2Java generated stub for an archetypal MsaWSI service.\r
+ */\r
+ ext.vamsas.SeqSearchI server;\r
+\r
+ AlignFrame alignFrame;\r
+\r
+ /**\r
+ * Creates a new MsaWSClient object that uses a service given by an externally\r
+ * retrieved ServiceHandle\r
+ * \r
+ * @param sh\r
+ * service handle of type AbstractName(MsaWS)\r
+ * @param altitle\r
+ * DOCUMENT ME!\r
+ * @param msa\r
+ * DOCUMENT ME!\r
+ * @param submitGaps\r
+ * DOCUMENT ME!\r
+ * @param preserveOrder\r
+ * DOCUMENT ME!\r
+ */\r
+\r
+ public SeqSearchWSClient(ext.vamsas.ServiceHandle sh, String altitle,\r
+ jalview.datamodel.AlignmentView msa, String db,\r
+ Alignment seqdataset, AlignFrame _alignFrame)\r
+ {\r
+ super();\r
+ alignFrame = _alignFrame;\r
+ // can generalise the two errors below for metadata mapping from interface\r
+ // name to service client name\r
+ if (!sh.getAbstractName().equals(this.getServiceActionKey()))\r
+ {\r
+ JOptionPane.showMessageDialog(Desktop.desktop,\r
+ "The Service called \n" + sh.getName()\r
+ + "\nis not a \nSequence Search Service !",\r
+ "Internal Jalview Error", JOptionPane.WARNING_MESSAGE);\r
+\r
+ return;\r
+ }\r
+\r
+ if ((wsInfo = setWebService(sh)) == null)\r
+ {\r
+ JOptionPane.showMessageDialog(Desktop.desktop,\r
+ "The Sequence Search Service named " + sh.getName()\r
+ + " is unknown", "Internal Jalview Error",\r
+ JOptionPane.WARNING_MESSAGE);\r
+\r
+ return;\r
+ }\r
+ startSeqSearchClient(altitle, msa, db, seqdataset);\r
+\r
+ }\r
+\r
+ /**\r
+ * non-process web service interaction - use this for calling HEADLESS\r
+ * synchronous service methods\r
+ * \r
+ * @param sh\r
+ */\r
+ public SeqSearchWSClient(ServiceHandle sh)\r
+ {\r
+ setWebService(sh, true);\r
+ }\r
+\r
+ public SeqSearchWSClient()\r
+ {\r
+\r
+ super();\r
+ // add a class reference to the list\r
+ }\r
+\r
+ private void startSeqSearchClient(String altitle, AlignmentView msa,\r
+ String db, Alignment seqdataset)\r
+ {\r
+ if (!locateWebService())\r
+ {\r
+ return;\r
+ }\r
+ String visdb = (db == null || db == "") ? "default" : db; // need a visible\r
+ // name for a\r
+ // sequence db\r
+ boolean profileSearch = msa.getSequences().length > 2 ? true : false;\r
+ // single sequence or profile from alignment view\r
+ wsInfo.setProgressText("Searching "\r
+ + visdb\r
+ + (!profileSearch ? " with sequence "\r
+ + msa.getSequences()[0].getRefSeq().getName()\r
+ : " with profile") + " from " + altitle\r
+ + "\nJob details\n");\r
+\r
+ String jobtitle = WebServiceName\r
+ + ((WebServiceName.indexOf("earch") > -1) ? " " : " search ")\r
+ + " of "\r
+ + visdb\r
+ + (!profileSearch ? " with sequence "\r
+ + msa.getSequences()[0].getRefSeq().getName()\r
+ : " with profile") + " from " + altitle;\r
+ SeqSearchWSThread ssthread = new SeqSearchWSThread(server, WsURL,\r
+ wsInfo, alignFrame, WebServiceName, jobtitle, msa, db,\r
+ seqdataset);\r
+ wsInfo.setthisService(ssthread);\r
+ ssthread.start();\r
+ }\r
+\r
+ /**\r
+ * Initializes the server field with a valid service implementation.\r
+ * \r
+ * @return true if service was located.\r
+ */\r
+ private boolean locateWebService()\r
+ {\r
+ // this can be abstracted using reflection\r
+ // TODO: MuscleWS transmuted to generic MsaWS client\r
+ SeqSearchServiceLocator loc = new SeqSearchServiceLocator(); // Default\r
+\r
+ try\r
+ {\r
+ this.server = (SeqSearchI) loc.getSeqSearchService(new java.net.URL(\r
+ WsURL));\r
+ ((SeqSearchServiceSoapBindingStub) this.server).setTimeout(60000); // One\r
+ // minute\r
+ // timeout\r
+ } catch (Exception ex)\r
+ {\r
+ wsInfo.setProgressText("Serious! " + WebServiceName\r
+ + " Service location failed\nfor URL :" + WsURL + "\n"\r
+ + ex.getMessage());\r
+ wsInfo.setStatus(WebserviceInfo.ERROR);\r
+ ex.printStackTrace();\r
+\r
+ return false;\r
+ }\r
+\r
+ loc.getEngine().setOption("axis", "1");\r
+\r
+ return true;\r
+ }\r
+\r
+ protected String getServiceActionKey()\r
+ {\r
+ return "SeqSearch";\r
+ }\r
+\r
+ protected String getServiceActionDescription()\r
+ {\r
+ return "Sequence Database Search";\r
+ }\r
+\r
+ // simple caching of db parameters for each service endpoint\r
+ private static Hashtable dbParamsForEndpoint;\r
+ static\r
+ {\r
+ dbParamsForEndpoint = new Hashtable();\r
+ }\r
+\r
+ public String[] getSupportedDatabases() throws Exception\r
+ {\r
+\r
+ // check that we haven't already been to this service endpoint\r
+ if (dbParamsForEndpoint.containsKey(WsURL))\r
+ {\r
+ return (String[]) dbParamsForEndpoint.get(WsURL);\r
+ }\r
+ if (!locateWebService())\r
+ {\r
+ throw new Exception("Cannot contact service endpoint at " + WsURL);\r
+ }\r
+ String database = server.getDatabase();\r
+ if (database == null)\r
+ {\r
+ dbParamsForEndpoint.put(WsURL, new String[]\r
+ {});\r
+ return null;\r
+ }\r
+ StringTokenizer en = new StringTokenizer(database.trim(), ",| ");\r
+ String[] dbs = new String[en.countTokens()];\r
+ for (int i = 0; i < dbs.length; i++)\r
+ {\r
+ dbs[i++] = en.nextToken().trim();\r
+ }\r
+ dbParamsForEndpoint.put(WsURL, dbs);\r
+ return dbs;\r
+ }\r
+\r
+ public void attachWSMenuEntry(JMenu wsmenu, final ServiceHandle sh,\r
+ final AlignFrame af)\r
+ {\r
+ // look for existing database service submenus on wsmenu\r
+ Hashtable dbsrchs = new Hashtable();\r
+ Vector newdbsrch = new Vector();\r
+ Component entries[] = wsmenu.getComponents();\r
+ for (int i = 0; entries != null && i < entries.length; i++)\r
+ {\r
+ if (entries[i] instanceof JMenu)\r
+ {\r
+ dbsrchs.put(entries[i].getName(), entries[i]);\r
+ }\r
+ }\r
+ JMenu defmenu = (JMenu) dbsrchs.get("Default Database");\r
+ if (defmenu == null)\r
+ {\r
+ dbsrchs.put("Default Database", defmenu = new JMenu(\r
+ "Default Database"));\r
+ newdbsrch.addElement(defmenu);\r
+ }\r
+\r
+ String dbs[] = null;\r
+ try\r
+ {\r
+ dbs = new jalview.ws.SeqSearchWSClient(sh).getSupportedDatabases();\r
+ } catch (Exception e)\r
+ {\r
+ jalview.bin.Cache.log.warn(\r
+ "Database list request failed, so disabling SeqSearch Service client "\r
+ + sh.getName() + " at " + sh.getEndpointURL(), e);\r
+ return;\r
+ }\r
+ JMenuItem method;\r
+ // do default entry\r
+ defmenu.add(method = new JMenuItem(sh.getName()));\r
+ method.setToolTipText(sh.getEndpointURL());\r
+ method.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ // use same input gatherer as for secondary structure prediction\r
+ // we could actually parameterise the gatherer method here...\r
+ AlignmentView msa = af.gatherSeqOrMsaForSecStrPrediction();\r
+ new jalview.ws.SeqSearchWSClient(sh, af.getTitle(), msa, null, af\r
+ .getViewport().getAlignment().getDataset(), af);\r
+ }\r
+ });\r
+ // add entry for each database the service supports\r
+ for (int db = 0; dbs != null && db < dbs.length; db++)\r
+ {\r
+ JMenu dbmenu = (JMenu) dbsrchs.get(dbs[db]);\r
+ if (dbmenu == null)\r
+ {\r
+ dbsrchs.put(dbs[db], dbmenu = new JMenu(dbs[db]));\r
+ newdbsrch.addElement(dbmenu);\r
+ }\r
+ // add the client handler code for this service\r
+ dbmenu.add(method = new JMenuItem(sh.getName()));\r
+ method.setToolTipText(sh.getEndpointURL());\r
+ final String searchdb = dbs[db];\r
+ method.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ AlignmentView msa = af.gatherSeqOrMsaForSecStrPrediction();\r
+ new jalview.ws.SeqSearchWSClient(sh, af.getTitle(), msa,\r
+ searchdb, af.getViewport().getAlignment().getDataset(),\r
+ af);\r
+ }\r
+ });\r
+ }\r
+ // add the databases onto the seqsearch menu\r
+ Enumeration e = newdbsrch.elements();\r
+ while (e.hasMoreElements())\r
+ {\r
+ Object el = e.nextElement();\r
+ if (el instanceof JMenu)\r
+ {\r
+ wsmenu.add((JMenu) el);\r
+ }\r
+ else\r
+ {\r
+ wsmenu.add((JMenuItem) el);\r
+ }\r
+ }\r
+\r
+ }\r
+}\r