X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Frest%2FRestJobThread.java;h=ffbce621fcabafe90891ab8ca48591c7fbed8e9a;hb=797df64fa2a0a30773d0f48f5494d4155e5a8be3;hp=39f26ae027e423420faf8fcb8c351e29fd5e81af;hpb=2aa69a7cbf3d401b0c4cbff140ad5e3b316634b5;p=jalview.git diff --git a/src/jalview/ws/rest/RestJobThread.java b/src/jalview/ws/rest/RestJobThread.java index 39f26ae..ffbce62 100644 --- a/src/jalview/ws/rest/RestJobThread.java +++ b/src/jalview/ws/rest/RestJobThread.java @@ -1,3 +1,20 @@ +/******************************************************************************* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle + * + * This file is part of Jalview. + * + * Jalview 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 3 of the License, or (at your option) any later version. + * + * Jalview 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 Jalview. If not, see . + *******************************************************************************/ package jalview.ws.rest; import jalview.bin.Cache; @@ -177,6 +194,7 @@ public class RestJobThread extends AWSThread { String postUrl = rj.getPostUrl(); doHttpReq(Stage.SUBMIT, rj, postUrl); + wsInfo.invalidate(); } /** @@ -237,8 +255,10 @@ public class RestJobThread extends AWSThread response = httpclient.execute(request); } catch (ClientProtocolException he) { - rj.statMessage = "Web Protocol Exception when attempting to " - + getStage(stg) + "Job. See Console output for details."; + rj.statMessage = "Web Protocol Exception when " + getStage(stg) + + "Job.
Problematic url was " + request.getURI() + + "
See Console output for details."; rj.setAllowedServerExceptions(0);// unrecoverable; rj.error = true; Cache.log.fatal("Unexpected REST Job " + getStage(stg) @@ -246,8 +266,10 @@ public class RestJobThread extends AWSThread throw (he); } catch (IOException e) { - rj.statMessage = "IO Exception when attempting to " - + getStage(stg) + "Job. See Console output for details."; + rj.statMessage = "IO Exception when " + getStage(stg) + + "Job.
Problematic url was " + request.getURI() + + "
See Console output for details."; Cache.log.warn("IO Exception for REST Job " + getStage(stg) + "exception for URL " + rj.rsd.postUrl); @@ -304,9 +326,22 @@ public class RestJobThread extends AWSThread // TODO: deal with all other HTTP response codes from server. Cache.log.warn("Unhandled response status when " + getStage(stg) + "for " + postUrl + ": " + response.getStatusLine()); + rj.error = true; + rj.setAllowedServerExceptions(0); + rj.setSubjobComplete(true); + rj.setSubmitted(true); try { - response.getEntity().consumeContent(); + completeStatus( + rj, + response, + "" + + getStage(stg) + + " resulted in an unexpected server response.
Url concerned was " + + request.getURI() + + "
Filtered response content below:
"); } catch (IOException e) { Cache.log.debug("IOException when consuming unhandled response", @@ -376,7 +411,7 @@ public class RestJobThread extends AWSThread int body = f.indexOf(" -1) { - content.delete(0, f.indexOf(">", body)); + content.delete(0, f.indexOf(">", body) + 1); } if (body > -1 && sb.length() > 0) { @@ -404,6 +439,14 @@ public class RestJobThread extends AWSThread { System.err.println("Debug RestJob: Posting Job"); doPost((RestJob) job); + } catch (NoValidInputDataException erex) + { + job.setSubjobComplete(true); + job.setSubmitted(true); + ((RestJob) job).statMessage = "
It looks like there was a problem with the data sent to the service :
" + + erex.getMessage() + "\n"; + ((RestJob) job).error = true; + } catch (Exception ex) { job.setSubjobComplete(true); @@ -444,6 +487,14 @@ public class RestJobThread extends AWSThread Cache.log.warn("Failed to finish parsing data for job " + rj.getJobId()); ex.printStackTrace(); + } finally + { + rj.error = true; + rj.statMessage = "Error whilst parsing data for this job.
URL for job response is :" + + rj.resSet.getUrl() + + "
"; } } } @@ -459,7 +510,8 @@ public class RestJobThread extends AWSThread */ if (true) { - wsInfo.setViewResultsImmediatly(false); + // preserver current jalview behaviour + wsInfo.setViewResultsImmediatly(true); } else { @@ -495,6 +547,8 @@ public class RestJobThread extends AWSThread else { // tell the user nothing was returned. + wsInfo.setStatus(wsInfo.STATE_STOPPED_ERROR); + wsInfo.setFinishedNoResults(); } } @@ -795,7 +849,9 @@ public class RestJobThread extends AWSThread visgrps.add(exsg); exsg.setStartRes(sg.getStartRes() + contigs[ncnt]); exsg.setEndRes(sg.getEndRes() + contigs[ncnt]); - } else { + } + else + { recovered = true; } // now replace any references from the result set with @@ -925,12 +981,14 @@ public class RestJobThread extends AWSThread visan.sequenceRef = sqass; visAlAn.add(visan); } - if (contigs[ncnt]+alan[nrj][an].annotations.length>visan.annotations.length) + if (contigs[ncnt] + alan[nrj][an].annotations.length > visan.annotations.length) { // increase width of annotation row - Annotation[] newannv = new Annotation[contigs[ncnt]+alan[nrj][an].annotations.length]; - System.arraycopy(visan.annotations, 0, newannv, 0, visan.annotations.length); - visan.annotations=newannv; + Annotation[] newannv = new Annotation[contigs[ncnt] + + alan[nrj][an].annotations.length]; + System.arraycopy(visan.annotations, 0, newannv, 0, + visan.annotations.length); + visan.annotations = newannv; } // now copy local annotation data into correct position System.arraycopy(alan[nrj][an].annotations, 0, @@ -986,7 +1044,7 @@ public class RestJobThread extends AWSThread ColumnSelection destcs; String alTitle = restClient.service.details.Action + " using " + restClient.service.details.Name + " on " - + " whatever you clicked on." + "(set " + als + ")"; + + restClient.viewTitle; switch (action) { case newAlignment: @@ -994,7 +1052,8 @@ public class RestJobThread extends AWSThread destcs = destColsel.get(als); destaf = new AlignFrame(destal, destcs, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); - PaintRefresher.Refresh(destaf, destaf.getViewport().getSequenceSetId()); + PaintRefresher.Refresh(destaf, destaf.getViewport() + .getSequenceSetId()); // todo transfer any feature settings and colouring /* * destaf.getFeatureRenderer().transferSettings(this.featureSettings); @@ -1014,12 +1073,14 @@ public class RestJobThread extends AWSThread * i++) { af.addSortByOrderMenuItem( WebServiceName + ((String) * names.get(i)) + " Ordering", (AlignmentOrder) alorders.get(i)); } } } */ + // TODO: modify this and previous alignment's title if many alignments + // have been returned. Desktop.addInternalFrame(destaf, alTitle, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); break; case newView: - + // TODO: determine title for view break; case currentView: break; @@ -1193,6 +1254,8 @@ public class RestJobThread extends AWSThread */ public boolean isValid() { + ArrayList _warnings = new ArrayList(); + boolean validt = true; if (jobs != null) { for (RestJob rj : (RestJob[]) jobs) @@ -1201,14 +1264,48 @@ public class RestJobThread extends AWSThread { // invalid input for this job System.err.println("Job " + rj.getJobnum() - + " has invalid input."); - return false; + + " has invalid input. ( " + rj.getStatus() + ")"); + if (rj.hasStatus() && !_warnings.contains(rj.getStatus())) + { + _warnings.add(rj.getStatus()); + } + validt = false; } } - return true; } + if (!validt) + { + warnings = ""; + for (String st : _warnings) + { + if (warnings.length() > 0) + { + warnings += "\n"; + } + warnings += st; + + } + } + return validt; + } + + protected String warnings; + + public boolean hasWarnings() + { // TODO Auto-generated method stub - return false; + return warnings != null && warnings.length() > 0; + } + + /** + * get any informative messages about why the job thread couldn't start. + * + * @return + */ + public String getWarnings() + { + return isValid() ? "Job can be started. No warnings." + : hasWarnings() ? warnings : ""; } }