X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FWSWUBlastClient.java;h=c221d074c6e5b9a65379129c3837ec1f2b29dffa;hb=2c56ea5abe1fa29c861beb02fb594ad807b307ed;hp=1622187996bc132e5d64a1c55e03f27930fa7c88;hpb=5f1b13704251c9f3119351c972bd7b74a4064e9c;p=jalview.git diff --git a/src/jalview/io/WSWUBlastClient.java b/src/jalview/io/WSWUBlastClient.java index 1622187..c221d07 100755 --- a/src/jalview/io/WSWUBlastClient.java +++ b/src/jalview/io/WSWUBlastClient.java @@ -1,192 +1,255 @@ +/* +* 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 -{ - JInternalFrame outputFrame = new JInternalFrame(); - CutAndPasteTransfer output = new CutAndPasteTransfer(false); - int jobsRunning = 0; +import org.apache.axis.client.*; - public WSWUBlastClient(AlignmentI al, ArrayList ids) - { +import java.util.*; - output.formatForOutput(); - outputFrame.setContentPane(output); - 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(outputFrame, "BLASTing for unidentified sequences ", 800,300); +import javax.swing.*; - for(int i=0; i0) - { - try{ - Thread.sleep(100); - imageIndex++; - imageIndex %=9; - outputFrame.setFrameIcon( imageIcon[imageIndex]); - outputFrame.setTitle("BLASTing for unidentified sequences - "+jobsRunning+" jobs running."); - - }catch(Exception ex){} - - } - } - } +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ +public class WSWUBlastClient +{ + CutAndPasteTransfer output = new CutAndPasteTransfer(); + int jobsRunning = 0; + + /** + * Creates a new WSWUBlastClient object. + * + * @param al DOCUMENT ME! + * @param ids DOCUMENT ME! + */ + 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; i < ids.size(); i++) + { + SequenceI sequence = al.findName(ids.get(i).toString()); + StringBuffer nonGapped = new StringBuffer(); + for (int n = 0; n < sequence.getSequence().length(); n++) + { + if (!jalview.util.Comparison.isGap(sequence.getCharAt(n))) + { + nonGapped.append(sequence.getCharAt(n)); + } + } - class BlastThread extends Thread - { - String sequence; - String seqid; - String jobid; - boolean jobComplete = false; + BlastThread thread = new BlastThread(ids.get(i).toString(), + nonGapped.toString()); + thread.start(); + jobsRunning++; + } - BlastThread(String id, String sequence) - { - this.sequence = sequence; - seqid = id; + ImageTwirler thread = new ImageTwirler(); + thread.start(); } - public void run() + /** + * DOCUMENT ME! + * + * @param id1 DOCUMENT ME! + * @param res DOCUMENT ME! + */ + void parseResult(String id1, String res) { - StartJob(); + StringTokenizer st = new StringTokenizer(res, "\n"); + String data; + String id2; + int maxFound = 90; + StringBuffer buffer = new StringBuffer("\n\n" + id1 + " :"); - while (!jobComplete) - { - try + while (st.hasMoreTokens()) { - 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("I'm alive "+seqid+" "+jobid); + 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 + "%; "); + } + } + } + } } - 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(jobid); - - } - 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) + { + } + } + } - output.setText(output.getText()+buffer.toString()); + 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(); + } + } } - }