/* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 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.io; import org.apache.axis.client.*; import javax.xml.namespace.QName; import java.util.*; import jalview.datamodel.*; import jalview.gui.*; import javax.swing.*; import java.util.*; import java.awt.*; public class WSWUBlastClient { CutAndPasteTransfer output = new CutAndPasteTransfer(); int jobsRunning = 0; public WSWUBlastClient(AlignmentI al, ArrayList ids) { output.setText("To display sequence features an exact Uniprot id with 100% sequence identity match must be entered." +"\nIn order to display these features, try changing the names of your sequences to the ids suggested below."); Desktop.addInternalFrame(output, "BLASTing for unidentified sequences ", 800,300); for(int i=0; i0) { try{ Thread.sleep(100); imageIndex++; imageIndex %=9; output.setFrameIcon( imageIcon[imageIndex]); output.setTitle("BLASTing for unidentified sequences - "+jobsRunning+" jobs running."); }catch(Exception ex){} } } } class BlastThread extends Thread { String sequence; String seqid; String jobid; boolean jobComplete = false; BlastThread(String id, String sequence) { this.sequence = sequence; seqid = id; } public void run() { StartJob(); while (!jobComplete) { try { Call call = (Call)new Service().createCall(); call.setTargetEndpointAddress(new java.net.URL( "http://www.ebi.ac.uk/cgi-bin/webservices/WSWUBlast")); call.setOperationName(new QName("WSWUBlast", "polljob")); String result = (String) call.invoke(new Object[] {jobid, "xml"}); if(result.indexOf("JOB PENDING")==-1 && result.indexOf("JOB RUNNING")==-1) { parseResult(seqid, result); jobComplete = true; jobsRunning --; } Thread.sleep(5000); // System.out.println("WSWuBlastClient: I'm alive "+seqid+" "+jobid); // log.debug } catch (Exception ex) {} } } void StartJob() { HashMap params = new HashMap(); params.put("database", "uniprot"); params.put("sensitivity", "low"); params.put("sort", "totalscore"); params.put("matrix", "pam10"); params.put("program", "blastp"); params.put("alignments", "5"); params.put("outformat", "xml"); params.put("searchtype", "1"); byte[] seqbytes = sequence.getBytes(); try { Call call = (Call)new Service().createCall(); call.setTargetEndpointAddress(new java.net.URL( "http://www.ebi.ac.uk/cgi-bin/webservices/WSWUBlast")); call.setOperationName(new QName("WSWUBlast", "doWUBlast")); String result = (String) call.invoke(new Object[] {params, seqbytes}); jobid = result; System.out.println("http://www.ebi.ac.uk/cgi-bin/webservices/WSWUBlast JobId '"+jobid+"'"); } catch (Exception exp) { System.err.println("WSWUBlastClient error:\n" + exp.toString()); exp.printStackTrace(); } } } void parseResult(String id1, String res) { StringTokenizer st = new StringTokenizer(res, "\n"); String data; String id2; int maxFound = 90; StringBuffer buffer = new StringBuffer("\n\n"+id1+" :"); while( st.hasMoreTokens() ) { data = st.nextToken(); if(data.indexOf("database=\"uniprot\" id=")>-1) { int index = data.indexOf("database=\"uniprot\" id=")+ 23; id2 = data.substring( index, data.indexOf("\"", index) ); while( data.indexOf("")==-1) { data = st.nextToken(); if(data.indexOf("")>-1) { int value = Integer.parseInt( data.substring(data.indexOf("")+10, data.indexOf(""))); if(value>=maxFound) { maxFound = value; buffer.append(" "+ id2 + " " + value+"%; "); } } } } } output.setText(output.getText()+buffer.toString()); } }