X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fws%2Fjws2%2FMsaWSThread.java;h=4c75756cd37a92b3490f1984940dda2c39a6048a;hb=a789f790fbb3ab13f1967b42781b837b58bf9bbc;hp=0049001ba33774db1a1d8787ca6acca9daa76e67;hpb=478cdf5b2350d055e0da878c5f54ba5a8ae4af4b;p=jalview.git diff --git a/src/jalview/ws/jws2/MsaWSThread.java b/src/jalview/ws/jws2/MsaWSThread.java index 0049001..4c75756 100644 --- a/src/jalview/ws/jws2/MsaWSThread.java +++ b/src/jalview/ws/jws2/MsaWSThread.java @@ -1,5 +1,5 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * * This file is part of Jalview. @@ -34,6 +34,8 @@ import jalview.gui.*; import jalview.ws.AWsJob; import jalview.ws.WSClientI; import jalview.ws.JobStateSummary; +import jalview.ws.jws2.dm.JabaWsParamSet; +import jalview.ws.params.WsParamSetI; /** *

@@ -69,7 +71,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI { long lastChunk = 0; - Preset preset = null; + WsParamSetI preset = null; List arguments = null; @@ -373,6 +375,67 @@ class MsaWSThread extends AWS2Thread implements WSClientI return alignmentProgram; } + public boolean hasArguments() + { + return (arguments != null && arguments.size() > 0) + || (preset != null && preset instanceof JabaWsParamSet); + } + + public List getJabaArguments() + { + List newargs = new ArrayList(); + if (preset != null && preset instanceof JabaWsParamSet) + { + newargs.addAll(((JabaWsParamSet) preset).getjabaArguments()); + } + if (arguments != null && arguments.size() > 0) + { + newargs.addAll(arguments); + } + return newargs; + } + + /** + * add a progess header to status string containing presets/args used + */ + public void addInitialStatus() + { + if (preset != null) + { + jobProgress.append("Using " + + (preset instanceof JabaPreset ? "Server" : "User") + + "Preset: " + preset.getName()); + if (preset instanceof JabaWsParamSet) + { + for (Argument opt : ((JabaWsParamSet) preset).getjabaArguments()) + { + jobProgress.append(opt.getName() + " " + opt.getDefaultValue() + + "\n"); + } + } + } + if (arguments != null && arguments.size() > 0) + { + jobProgress.append("With custom parameters : \n"); + // merge arguments with preset's own arguments. + for (Argument opt : arguments) + { + jobProgress.append(opt.getName() + " " + opt.getDefaultValue() + + "\n"); + } + } + jobProgress.append("\nJob Output:\n"); + } + + public boolean isPresetJob() + { + return preset != null && preset instanceof JabaPreset; + } + + public Preset getServerPreset() + { + return (isPresetJob()) ? ((JabaPreset) preset).p : null; + } } String alTitle; // name which will be used to form new alignment window. @@ -416,7 +479,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI * @param seqset * Alignment */ - MsaWSThread(MsaWS server2, Preset preset, List paramset, + MsaWSThread(MsaWS server2, WsParamSetI preset, List paramset, String wsUrl, WebserviceInfo wsinfo, jalview.gui.AlignFrame alFrame, String wsname, String title, AlignmentView _msa, boolean subgaps, boolean presorder, @@ -533,10 +596,17 @@ class MsaWSThread extends AWS2Thread implements WSClientI updateJobProgress(j); } - protected void updateJobProgress(MsaWSJob j) throws Exception + /** + * + * @param j + * @return true if more job progress data was available + * @throws Exception + */ + protected boolean updateJobProgress(MsaWSJob j) throws Exception { StringBuffer response = j.jobProgress; long lastchunk = j.getLastChunk(); + boolean changed=false; do { j.setLastChunk(lastchunk); @@ -544,11 +614,13 @@ class MsaWSThread extends AWS2Thread implements WSClientI .pullExecStatistics(j.getJobId(), lastchunk); if (chunk != null) { + changed=chunk.getChunk().length()>0; response.append(chunk.getChunk()); lastchunk = chunk.getNextPosition(); } ; } while (lastchunk >= 0 && j.getLastChunk() != lastchunk); + return changed; } public void StartJob(AWsJob job) @@ -580,21 +652,15 @@ class MsaWSThread extends AWS2Thread implements WSClientI } try { - // TODO: get the parameters (if any) for this job and submit the job - if (j.arguments != null && j.arguments.size() > 0) + j.addInitialStatus(); // list the presets/parameters used for the job in + // status + if (j.isPresetJob()) { - StringBuffer pset = new StringBuffer(); - for (Argument arg : j.arguments) - { - pset.append(arg.getName() + " " + arg.getDefaultValue() + "\n"); - } - j.setStatus("Custom Parameters:\n" + pset.toString() - + "\nJob Output:\n"); - j.setJobId(server.customAlign(j.seqs, j.arguments)); + j.setJobId(server.presetAlign(j.seqs, j.getServerPreset())); } - else if (j.preset != null) + else if (j.hasArguments()) { - j.setJobId(server.presetAlign(j.seqs, j.preset)); + j.setJobId(server.customAlign(j.seqs,j.getJabaArguments())); } else { @@ -689,16 +755,40 @@ class MsaWSThread extends AWS2Thread implements WSClientI MsaWSJob msjob = ((MsaWSJob) jobs[j]); if (jobs[j].isFinished() && msjob.alignment == null) { - try - { - updateJobProgress(msjob); - } catch (Exception e) - { - Cache.log - .warn("Exception when retrieving remaining Job progress data for job " - + msjob.getJobId() + " on server " + WsUrl); - e.printStackTrace(); - } + boolean jpchanged=false,jpex=false; + do { + try + { + jpchanged = updateJobProgress(msjob); + jpex=false; + } catch (Exception e) + { + + Cache.log + .warn("Exception when retrieving remaining Job progress data for job " + + msjob.getJobId() + " on server " + WsUrl); + e.printStackTrace(); + if (jpex) { + // give up polling after two consecutive exceptions + jpchanged=false; + } else { + jpchanged=true; + } + // set flag remember that we've had an exception. + jpex=true; + } + if (jpchanged) + { + try + { + Thread.sleep(jpex ? 400 : 200); // wait a bit longer if we experienced an exception. + } catch (Exception ex) + { + } + ; + } + } while (jpchanged); + if (Cache.log.isDebugEnabled()) { System.out.println("Job Execution file for job: "