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; public WSWUBlastClient(AlignmentI al, ArrayList ids) { 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; i0) { try{ Thread.sleep(100); imageIndex++; imageIndex %=9; outputFrame.setFrameIcon( imageIcon[imageIndex]); outputFrame.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("I'm alive "+seqid+" "+jobid); } 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(); } } } 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()); } }