X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FWSWUBlastClient.java;h=33d6d9289db1cef413e2448e581d2e50cf594768;hb=ef3333028b291ce92bdae34bd2f8487d35d0a0d3;hp=ed29f89cb2404aaa98d04ebf037ab7060b4f67c8;hpb=42f46263655185b0a436356c37295ec82d091dce;p=jalview.git diff --git a/src/jalview/io/WSWUBlastClient.java b/src/jalview/io/WSWUBlastClient.java index ed29f89..33d6d92 100755 --- a/src/jalview/io/WSWUBlastClient.java +++ b/src/jalview/io/WSWUBlastClient.java @@ -1,119 +1,257 @@ +/* +* 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 org.apache.axis.client.*; + +import java.awt.*; + +import java.util.*; + import javax.swing.*; +import javax.xml.namespace.QName; + + +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ public class WSWUBlastClient { - CutAndPasteTransfer cap = new CutAndPasteTransfer(false); - - public WSWUBlastClient(AlignmentI al, ArrayList ids) - { - JInternalFrame frame = new JInternalFrame(); - cap.formatForOutput(); - frame.setContentPane(cap); - cap.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(frame, "BLASTing for unidentified sequences ", 800,300); - - for(int i=0; i") == -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 + "%; "); + } + } + } } - catch (Exception exp) { - System.err.println ("ERROR:\n" + exp.toString()); - exp.printStackTrace(); } + + output.setText(output.getText() + buffer.toString()); } - void parseResult(String id1, String res) + class ImageTwirler extends Thread { - StringTokenizer st = new StringTokenizer(res, "\n"); - String data; - String id2; - int maxFound = 90; - StringBuffer buffer = new StringBuffer("\n\n"+id1+" :"); + ImageIcon[] imageIcon; + int imageIndex = 0; + + public ImageTwirler() + { + imageIcon = new ImageIcon[9]; - while( st.hasMoreTokens() ) - { - data = st.nextToken(); + for (int i = 0; i < 9; i++) + { + java.net.URL url = getClass().getResource("/images/dna" + + (i + 1) + ".gif"); + + if (url != null) + { + imageIcon[i] = new ImageIcon(url); + } + } + } - if(data.indexOf("database=\"uniprot\" id=")>-1) + public void run() { - 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) + while (jobsRunning > 0) { - int value = Integer.parseInt( data.substring(data.indexOf("")+10, data.indexOf(""))); - if(value>=maxFound) - { - maxFound = value; - buffer.append(" "+ id2 + " " + value+"%; "); - } + 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(); - cap.setText(cap.getText()+buffer.toString()); - } + 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(); + } + } + } }