X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FWSWUBlastClient.java;h=33d6d9289db1cef413e2448e581d2e50cf594768;hb=acbb69521cbe230ab33b922f45329d21a95dc410;hp=ace3e0d54117e046811fadde195b6c27c139d741;hpb=e5127e5f27f02c8f328539eaac68eabfbee1d135;p=jalview.git diff --git a/src/jalview/io/WSWUBlastClient.java b/src/jalview/io/WSWUBlastClient.java index ace3e0d..33d6d92 100755 --- a/src/jalview/io/WSWUBlastClient.java +++ b/src/jalview/io/WSWUBlastClient.java @@ -1,192 +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 javax.swing.*; -import java.util.*; + +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 { - JInternalFrame outputFrame = new JInternalFrame(); - CutAndPasteTransfer output = new CutAndPasteTransfer(false); - int jobsRunning = 0; + CutAndPasteTransfer output = new CutAndPasteTransfer(); + int jobsRunning = 0; - public WSWUBlastClient(AlignmentI al, ArrayList ids) - { + /** + * 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); - 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); + for (int i = 0; i < ids.size(); i++) + { + SequenceI sequence = al.findName(ids.get(i).toString()); + StringBuffer nonGapped = new StringBuffer(); - 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){} - - } - } - } + 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(); - class BlastThread extends Thread - { - String sequence; - String seqid; - String jobid; - boolean jobComplete = false; + if (data.indexOf("") > -1) + { + int value = Integer.parseInt(data.substring(data.indexOf( + "") + 10, + data.indexOf(""))); - BlastThread(String id, String sequence) - { - this.sequence = sequence; - seqid = id; + if (value >= maxFound) + { + maxFound = value; + buffer.append(" " + id2 + " " + value + "%; "); + } + } + } + } + } + + output.setText(output.getText() + buffer.toString()); } - public void run() + class ImageTwirler extends Thread { - StartJob(); + ImageIcon[] imageIcon; + int imageIndex = 0; - while (!jobComplete) - { - try + public ImageTwirler() { - 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 + imageIcon = new ImageIcon[9]; + + 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); + } + } } - 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(); - } + public void run() + { + while (jobsRunning > 0) + { + try + { + Thread.sleep(100); + imageIndex++; + imageIndex %= 9; + output.setFrameIcon(imageIcon[imageIndex]); + output.setTitle("BLASTing for unidentified sequences - " + + jobsRunning + " jobs running."); + } + catch (Exception ex) + { + } + } + } } - } - void parseResult(String id1, String res) + class BlastThread extends Thread { - StringTokenizer st = new StringTokenizer(res, "\n"); - String data; - String id2; - int maxFound = 90; - StringBuffer buffer = new StringBuffer("\n\n"+id1+" :"); + String sequence; + String seqid; + String jobid; + boolean jobComplete = false; - while( st.hasMoreTokens() ) - { - data = st.nextToken(); + BlastThread(String id, String sequence) + { + this.sequence = sequence; + seqid = id; + } - 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) + StartJob(); + + while (!jobComplete) { - int value = Integer.parseInt( data.substring(data.indexOf("")+10, data.indexOf(""))); - if(value>=maxFound) - { - maxFound = value; - buffer.append(" "+ id2 + " " + value+"%; "); - } - } - } + 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(); - output.setText(output.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(); + } + } + } }