X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2FJPredClient.java;h=6fd0a4a702b638ab129dbf6400040c77dc3b8c90;hb=01cc9bf86a687fa7c8a741128264b23eb7feba9b;hp=e6f3899892a6058fff4b0021eb61e9528582b67f;hpb=efc31b4a8d5cee63555586804a2b79c06bdb5a14;p=jalview.git diff --git a/src/jalview/ws/JPredClient.java b/src/jalview/ws/JPredClient.java index e6f3899..6fd0a4a 100755 --- a/src/jalview/ws/JPredClient.java +++ b/src/jalview/ws/JPredClient.java @@ -26,19 +26,38 @@ import ext.vamsas.*; import jalview.analysis.*; import jalview.datamodel.*; import jalview.gui.*; +import jalview.io.FormatAdapter; public class JPredClient extends WSClient { - ext.vamsas.JPredWS server; + ext.vamsas.Jpred server; String altitle = ""; java.util.Hashtable SequenceInfo = null; + public JPredClient(ext.vamsas.ServiceHandle sh, String title, SequenceI seq) { + wsInfo = setWebService(sh); + startJPredClient(title, seq); + } + public JPredClient(ext.vamsas.ServiceHandle sh, String title, SequenceI[] msa) { + wsInfo = setWebService(sh); + startJPredClient(title, msa); + } + + public JPredClient(String title, SequenceI[] msf) { + startJPredClient(title, msf); + } + + public JPredClient(String title, SequenceI seq) { + startJPredClient(title, seq); + } - public JPredClient(String title, SequenceI[] msf) + private void startJPredClient(String title, SequenceI[] msf) { - wsInfo = setWebService(); + if (wsInfo==null) + wsInfo = setWebService(); SequenceI seq = msf[0]; + altitle = "JNet prediction on " + seq.getName() + " using alignment from " + title; @@ -46,21 +65,26 @@ public class JPredClient title + ") on sequence :\n>" + seq.getName() + "\n" + AlignSeq.extractGaps("-. ", seq.getSequence()) + "\n"); + SequenceI aln[] = new SequenceI[msf.length]; + for (int i=0,j=msf.length; i" + seq.getName() + "\n" + AlignSeq.extractGaps("-. ", seq.getSequence()) + @@ -97,7 +121,7 @@ public class JPredClient private boolean locateWebService() { - JPredWSServiceLocator loc = new JPredWSServiceLocator(); // Default + ext.vamsas.JpredServiceLocator loc = new JpredServiceLocator(); // Default try { @@ -116,7 +140,7 @@ public class JPredClient " Service location failed\nfor URL :" + WsURL + "\n" + ex.getMessage()); - wsInfo.setStatus(wsInfo.STATE_STOPPED_SERVERERROR); + wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_SERVERERROR); return false; } @@ -128,9 +152,9 @@ public class JPredClient extends Thread { String OutputHeader; - ext.vamsas.JpredResult result; - ext.vamsas.Sequence sequence; - ext.vamsas.Msfalignment msa; + vamsas.objects.simple.JpredResult result; + vamsas.objects.simple.Sequence sequence; + vamsas.objects.simple.Msfalignment msa; String jobId; boolean jobComplete = false; int allowedServerExceptions = 3; // thread dies if too many exceptions. @@ -138,7 +162,7 @@ public class JPredClient JPredThread(SequenceI seq) { OutputHeader = wsInfo.getProgressText(); - this.sequence = new ext.vamsas.Sequence(); + this.sequence = new vamsas.objects.simple.Sequence(); this.sequence.setId(seq.getName()); this.sequence.setSeq(AlignSeq.extractGaps("-. ", seq.getSequence())); } @@ -146,14 +170,14 @@ public class JPredClient JPredThread(SequenceI[] msf) { OutputHeader = wsInfo.getProgressText(); - this.sequence = new ext.vamsas.Sequence(); + this.sequence = new vamsas.objects.simple.Sequence(); this.sequence.setId(msf[0].getName()); this.sequence.setSeq(AlignSeq.extractGaps("-. ", msf[0].getSequence())); - jalview.io.PileUpfile mwrite = new jalview.io.PileUpfile(); - this.msa = new ext.vamsas.Msfalignment(); - msa.setMsf(mwrite.print(msf)); + this.msa = new vamsas.objects.simple.Msfalignment(); + jalview.io.PileUpfile pileup = new jalview.io.PileUpfile(); + msa.setMsf(pileup.print(msf)); } public void run() @@ -169,27 +193,28 @@ public class JPredClient throw (new Exception( "Timed out when communicating with server\nTry again later.\n")); } - + if (result.getState()==0) + jalview.bin.Cache.log.debug("Finished "+jobId); if (result.isRunning()) { wsInfo.setStatus(WebserviceInfo.STATE_RUNNING); } - else if (result.isQueued()) + if (result.isQueued()) { wsInfo.setStatus(WebserviceInfo.STATE_QUEUING); } + wsInfo.setProgressText(OutputHeader + "\n" + + result.getStatus()); + if (result.isFinished()) { + parseResult(); jobComplete = true; jobsRunning--; - } - else - { - wsInfo.setProgressText(OutputHeader + "\n" + - result.getStatus()); - + } else { + // catch exceptions if (! (result.isJobFailed() || result.isServerError())) { try @@ -205,6 +230,8 @@ public class JPredClient else { wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); + jobsRunning--; + jobComplete = true; } } } @@ -225,16 +252,29 @@ public class JPredClient { } } + catch (OutOfMemoryError er) + { + jobComplete = true; + wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); + JOptionPane.showInternalMessageDialog(Desktop.desktop, + "Out of memory handling result!!" + + + "\nSee help files for increasing Java Virtual Machine memory." + , "Out of memory", + JOptionPane.WARNING_MESSAGE); + System.out.println("JPredClient: "+er); + System.gc(); + } } - - if (! (result.isJobFailed() || result.isServerError())) - { - wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK); - } - else - { - wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); - } + if (result!=null) + if (! (result.isJobFailed() || result.isServerError())) + { + wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK); + } + else + { + wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); + } } void StartJob() @@ -268,23 +308,36 @@ public class JPredClient } catch (Exception e) { - wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_SERVERERROR); - allowedServerExceptions = 0; - jobComplete = false; - - wsInfo.appendProgressText("Failed to submit the prediction.\n" - + - "It is most likely that there is a problem with the server.\n" - + "Just close the window\n"); - System.err.println( - "JPredWS Client: Failed to submit the prediction (Probably a server error - see below)\n" + - e.toString() + "\n"); - - // e.printStackTrace(); TODO: JBPNote DEBUG + if (e.getMessage().indexOf("Exception")>-1) { + wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_SERVERERROR); + wsInfo.setProgressText( + "Failed to submit the prediction. (Just close the window)\n" + + + "It is most likely that there is a problem with the server.\n"); + System.err.println( + "JPredWS Client: Failed to submit the prediction. Quite possibly because of a server error - see below)\n" + + e.getMessage() + "\n"); + + jalview.bin.Cache.log.warn("Server Exception",e); + } else { + wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); + // JBPNote - this could be a popup informing the user of the problem. + wsInfo.setProgressText("Failed to submit the prediction:\n" + +e.getMessage()+ + wsInfo.getProgressText()); + + jalview.bin.Cache.log.debug("Failed Submission",e); + + } + allowedServerExceptions = -1; + jobComplete = true; + } } - private void addFloatAnnotations(Alignment al, int[] gapmap, + + + /* private void addFloatAnnotations(Alignment al, int[] gapmap, Vector values, String Symname, String Visname, float min, float max, int winLength) @@ -300,7 +353,7 @@ public class JPredClient al.addAnnotation(new AlignmentAnnotation(Symname, Visname, annotations, min, max, winLength)); - } + }*/ void parseResult() { @@ -327,29 +380,43 @@ public class JPredClient OutputHeader += ("\n" + result.getAligfile()); } - wsInfo.setProgressText(OutputHeader); + wsInfo.setProgressText(OutputHeader+"Parsing..."); try { + jalview.bin.Cache.log.debug("Parsing output from JNet job."); // JPredFile prediction = new JPredFile("C:/JalviewX/files/jpred.txt", "File"); jalview.io.JPredFile prediction = new jalview.io.JPredFile(result. getPredfile(), "Paste"); SequenceI[] preds = prediction.getSeqsAsArray(); + jalview.bin.Cache.log.debug("Got prediction profile."); Alignment al; int FirstSeq; // the position of the query sequence in Alignment al boolean noMsa = true; // set if no MSA has been returned by JPred if ( (this.msa != null) && (result.getAligfile() != null)) { + jalview.bin.Cache.log.debug("Getting associated alignment."); // we ignore the returned alignment if we only predicted on a single sequence String format = jalview.io.IdentifyFile.Identify(result.getAligfile(), "Paste"); if (jalview.io.FormatAdapter.formats.contains(format)) { - al = new Alignment(jalview.io.FormatAdapter.readFile( + al = new Alignment(new FormatAdapter().readFile( result.getAligfile(), "Paste", format)); + SequenceI sqs[] = new SequenceI[al.getHeight()]; + for (int i=0, j=al.getHeight(); i