X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2FMsaWSClient.java;h=6d46e4b145b2c24cc66eb929b4c2a0501a5b231c;hb=f24dacb1da56fccf05d684e2f4899facec2aecf7;hp=9626132dadd37b9c1abb0a53eeeef825f7aa6d34;hpb=40c5abaee48533a19613d9566099a92a60e841d4;p=jalview.git diff --git a/src/jalview/ws/MsaWSClient.java b/src/jalview/ws/MsaWSClient.java index 9626132..6d46e4b 100755 --- a/src/jalview/ws/MsaWSClient.java +++ b/src/jalview/ws/MsaWSClient.java @@ -1,301 +1,487 @@ -package jalview.ws; - -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.*; -import jalview.analysis.AlignSeq; -import ext.vamsas.*; -import vamsas.objects.*; - - - - -public class MsaWSClient - extends WSClient -{ - /** - * server is a WSDL2Java generated stub for an archetypal MsaWSI service. - */ - ext.vamsas.MuscleWS server; - - private boolean setWebService(String MsaWSName) { - if (MsaWServices.info.containsKey(MsaWSName)) { - WebServiceName = MsaWSName; - String[] wsinfo = (String[]) MsaWServices.info.get(MsaWSName); - WsURL = wsinfo[0]; - WebServiceJobTitle = wsinfo[1]; - WebServiceReference = wsinfo[2]; - return true; - } else { - return false; - } - } - - - public MsaWSClient(String MsaWSName, String altitle, SequenceI[] msa, boolean submitGaps, boolean preserveOrder) - { - if (setWebService(MsaWSName)==false) { - JOptionPane.showMessageDialog(Desktop.desktop, "The Multiple Sequence Alignment Service named "+MsaWSName+" is unknown", - "Internal Jalview Error", JOptionPane.WARNING_MESSAGE); - return; - } - - wsInfo = new jalview.gui.WebserviceInfo(WebServiceJobTitle, WebServiceReference); - - wsInfo.setProgressText(((submitGaps) ? "Re-alignment" : "Alignment")+" of "+altitle+"\nJob details\n"); - - // TODO: MuscleWS transmuted to generic MsaWS client - MuscleWSServiceLocator loc = new MuscleWSServiceLocator(); // Default - try { - this.server = (MuscleWS) loc.getMuscleWS(new java.net.URL(WsURL)); - } - catch (Exception ex) { - wsInfo.setProgressText("Serious! "+WebServiceName+" Service location failed\nfor URL :" - +WsURL+"\n"+ex.getMessage()); - wsInfo.setStatus(wsInfo.ERROR); - ex.printStackTrace(); - } - - MsaWSThread musclethread = new MsaWSThread(WebServiceName+" alignment of "+altitle, msa, submitGaps, preserveOrder); - wsInfo.setthisService(musclethread); - musclethread.start(); - } - - - protected class MsaWSThread extends Thread implements WSClientI - { - String ServiceName = WebServiceName; - - public boolean isCancellable() - { - return true; - } - - String OutputHeader; - vamsas.objects.simple.MsaResult result = null; - - vamsas.objects.simple.SequenceSet seqs = new vamsas.objects.simple. - SequenceSet(); - - Hashtable SeqNames = null; - boolean submitGaps = false,// default is to strip gaps from sequences - preserveOrder = true; // and always store and recover sequence order - - String jobId; - String alTitle; // name which will be used to form new alignment window. - int allowedServerExceptions = 3; // thread dies if too many exceptions. - MsaWSThread(String title, SequenceI[] msa, boolean subgaps, boolean presorder) - { - alTitle = title; - submitGaps = subgaps; - preserveOrder = presorder; - - OutputHeader = wsInfo.getProgressText(); - SeqNames = new Hashtable(); - vamsas.objects.simple.Sequence[] seqarray = new vamsas.objects.simple. - Sequence[msa.length]; - - for (int i = 0; i < msa.length; i++) - { - String newname = jalview.analysis.SeqsetUtils.unique_name(i); - // uniquify as we go - // TODO: JBPNote: this is a ubiquitous transformation - set of jalview seq objects to vamsas sequences with name preservation - SeqNames.put(newname, jalview.analysis.SeqsetUtils.SeqCharacterHash(msa[i])); - seqarray[i] = new vamsas.objects.simple.Sequence(); - seqarray[i].setId(newname); - seqarray[i].setSeq((submitGaps) ? msa[i].getSequence() - : AlignSeq.extractGaps(jalview.util.Comparison.GapChars, msa[i].getSequence())); - } - - this.seqs = new vamsas.objects.simple.SequenceSet(); - this.seqs.setSeqs(seqarray); - } - - boolean jobComplete = false; - - public void cancelJob() { - if (!jobComplete) { - String cancelledMessage=""; - try { - vamsas.objects.simple.WsJobId cancelledJob = server.cancel(jobId); - if (cancelledJob.getStatus() == 2) - { - // CANCELLED_JOB - cancelledMessage = "Job cancelled."; - wsInfo.setStatus(WebserviceInfo.STATE_CANCELLED_OK); - jobComplete = true; - jobsRunning--; - result = null; - } - else - if (cancelledJob.getStatus() == 3) - { - // VALID UNSTOPPABLE JOB - cancelledMessage += - "Server cannot cancel this job. just close the window.\n"; - } - if (cancelledJob.getJobId() != null) - cancelledMessage += "[" + cancelledJob.getJobId() + "]"; - cancelledMessage +="\n"; - } catch (Exception exc) { - cancelledMessage +="\nProblems cancelling the job : Exception received...\n"+exc+"\n"; - exc.printStackTrace(); - } - wsInfo.setProgressText(OutputHeader + cancelledMessage+"\n"); - } - } - - public void run() - { - - StartJob(); - - while (!jobComplete && (allowedServerExceptions > 0)) - { - try - { - result = server.getResult(jobId); - - if (result.isRunning()) - wsInfo.setStatus(WebserviceInfo.STATE_RUNNING); - else if (result.isQueued()) - wsInfo.setStatus(WebserviceInfo.STATE_QUEUING); - - if (result.isFinished()) - { - parseResult(); - jobComplete = true; - jobsRunning--; - } - else - { - if (result.getStatus() != null) - wsInfo.setProgressText(OutputHeader + "\n" + result.getStatus()); - if (! (result.isJobFailed() || result.isServerError())) - { - Thread.sleep(5000); - // System.out.println("I'm alive "+seqid+" "+jobid); - } - else - { - break; - } - } - } - catch (Exception ex) - { - allowedServerExceptions--; - wsInfo.appendProgressText("\n" + ServiceName + " Server exception!\n" + - ex.getMessage()); - ex.printStackTrace(); - } - } - if (allowedServerExceptions == 0) - { - wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_SERVERERROR); - } - else - { - if (! (result != null && (result.isJobFailed() || result.isServerError()))) - wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK); - else - { - if (result.isFailed()) - wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); - if (result.isServerError()) - wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_SERVERERROR); - } - } - } - void StartJob() - { - try - { - vamsas.objects.simple.WsJobId jobsubmit = server.align(seqs); - if (jobsubmit.getStatus()==1) { - jobId=jobsubmit.getJobId(); - System.out.println(WsURL+" Job Id '"+jobId+"'"); - } else { - throw new Exception(jobsubmit.getJobId()); - } - } - catch (Exception e) - { - System.err.println(ServiceName + " Client: Failed to submit the prediction\n" + - e.toString() + "\n"); - e.printStackTrace(); - } - } - - private void addFloatAnnotations(Alignment al, int[] gapmap, Vector values, String Symname, String Visname, float min, float max, int winLength) { - - Annotation[] annotations = new Annotation[al.getWidth()]; - for (int j = 0; j < values.size(); j++) - { - float value = Float.parseFloat(values.get(j).toString()); - annotations[gapmap[j]] = new Annotation("", value+"",' ',value); - } - al.addAnnotation(new AlignmentAnnotation(Symname, Visname, annotations, min, max, winLength)); - } - private jalview.datamodel.Sequence[] getVamsasAlignment(vamsas.objects.simple.Alignment valign) { - vamsas.objects.simple.Sequence[] seqs = valign.getSeqs().getSeqs(); - jalview.datamodel.Sequence[] msa = new jalview.datamodel.Sequence[seqs.length]; - for (int i=0, j=seqs.length; i