X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fjws2%2FMsaWSThread.java;h=2bae428c409363425f4f3c2c81f46882dd060061;hb=b5d61763044c1d72f06ce0e50da2171422a3774b;hp=08accbac5d9e91c50f7756662209b6db8020f431;hpb=4272f31e9cc505f9a1496e2cd002dc9250c77928;p=jalview.git diff --git a/src/jalview/ws/jws2/MsaWSThread.java b/src/jalview/ws/jws2/MsaWSThread.java index 08accba..2bae428 100644 --- a/src/jalview/ws/jws2/MsaWSThread.java +++ b/src/jalview/ws/jws2/MsaWSThread.java @@ -1,24 +1,48 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1) + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) * Copyright (C) 2014 The Jalview Authors * * 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. + * 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 . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.ws.jws2; -import java.util.*; +import jalview.analysis.AlignSeq; +import jalview.bin.Cache; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentOrder; +import jalview.datamodel.AlignmentView; +import jalview.datamodel.ColumnSelection; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; +import jalview.gui.AlignFrame; +import jalview.gui.Desktop; +import jalview.gui.WebserviceInfo; +import jalview.util.MessageManager; +import jalview.ws.AWsJob; +import jalview.ws.JobStateSummary; +import jalview.ws.WSClientI; +import jalview.ws.jws2.dm.JabaWsParamSet; +import jalview.ws.params.WsParamSetI; + +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; +import java.util.Vector; import compbio.data.msa.MsaWS; import compbio.metadata.Argument; @@ -26,16 +50,6 @@ import compbio.metadata.ChunkHolder; import compbio.metadata.JobStatus; import compbio.metadata.Preset; -import jalview.analysis.*; -import jalview.bin.*; -import jalview.datamodel.*; -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; - class MsaWSThread extends AWS2Thread implements WSClientI { boolean submitGaps = false; // pass sequences including gaps to alignment @@ -107,8 +121,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI int nseqs = 0; if (minlen < 0) { - throw new Error( - "Implementation error: minlen must be zero or more."); + throw new Error(MessageManager.getString("error.implementation_error_minlen_must_be_greater_zero")); } for (int i = 0; i < seqs.length; i++) { @@ -219,7 +232,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI int ow = w, nw = w; for (i = 0, w = emptySeqs.size(); i < w; i++) { - String[] es = (String[]) emptySeqs.get(i); + String[] es = emptySeqs.get(i); if (es != null && es[1] != null) { int sw = es[1].length(); @@ -250,7 +263,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI } for (i = 0, w = emptySeqs.size(); i < w; i++) { - String[] es = (String[]) emptySeqs.get(i); + String[] es = emptySeqs.get(i); if (es[1] == null) { t_alseqs[i + alseq_l] = new jalview.datamodel.Sequence(es[0], @@ -472,7 +485,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI SequenceI[][] conmsa = _msa.getVisibleContigs('-'); if (conmsa != null) { - int njobs = conmsa.length; + int nvalid = 0, njobs = conmsa.length; jobs = new MsaWSJob[njobs]; for (int j = 0; j < njobs; j++) { @@ -484,6 +497,10 @@ class MsaWSThread extends AWS2Thread implements WSClientI { jobs[j] = new MsaWSJob(0, conmsa[j]); } + if (((MsaWSJob) jobs[j]).hasValidInput()) + { + nvalid++; + } ((MsaWSJob) jobs[j]).preset = preset; ((MsaWSJob) jobs[j]).arguments = paramset; ((MsaWSJob) jobs[j]).alignmentProgram = wsname; @@ -494,9 +511,20 @@ class MsaWSThread extends AWS2Thread implements WSClientI } wsinfo.setProgressText(jobs[j].getJobnum(), OutputHeader); } + validInput = nvalid > 0; } } + boolean validInput = false; + + /** + * + * @return true if the thread will perform a calculation + */ + public boolean hasValidInput() + { + return validInput; + } public boolean isCancellable() { return true; @@ -545,11 +573,14 @@ class MsaWSThread extends AWS2Thread implements WSClientI } wsInfo.setProgressText(jobs[job].getJobnum(), OutputHeader + cancelledMessage + "\n"); - } else { + } + else + { // if we hadn't submitted then just mark the job as cancelled. jobs[job].setSubjobComplete(true); - wsInfo.setStatus(jobs[job].getJobnum(), WebserviceInfo.STATE_CANCELLED_OK); - + wsInfo.setStatus(jobs[job].getJobnum(), + WebserviceInfo.STATE_CANCELLED_OK); + } } if (cancelled) @@ -620,8 +651,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI // boiler plate template if (!(job instanceof MsaWSJob)) { - throw new Error("StartJob(MsaWSJob) called on a WSJobInstance " - + job.getClass()); + throw new Error(MessageManager.formatMessage("error.implementation_error_msawbjob_called", new String[]{job.getClass().toString()})); } MsaWSJob j = (MsaWSJob) job; if (j.isSubmitted()) @@ -639,7 +669,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI { // special case - selection consisted entirely of empty sequences... j.setjobStatus(JobStatus.FINISHED); - j.setStatus("Empty Alignment Job"); + j.setStatus(MessageManager.getString("label.empty_alignment_job")); } try { @@ -667,35 +697,28 @@ class MsaWSThread extends AWS2Thread implements WSClientI } else { - throw new Exception( - "Server at " - + WsUrl - + " returned null string for job id, it probably cannot be contacted. Try again later ?"); + throw new Exception(MessageManager.formatMessage("exception.web_service_returned_null_try_later", new String[]{WsUrl})); } } catch (compbio.metadata.UnsupportedRuntimeException _lex) { lex = _lex; - wsInfo.appendProgressText("Job could not be run because the server doesn't support this program.\n" - + _lex.getMessage()); - wsInfo.warnUser(_lex.getMessage(), "Service not supported!"); + wsInfo.appendProgressText(MessageManager.formatMessage("info.job_couldnt_be_run_server_doesnt_support_program", new String[]{_lex.getMessage()})); + wsInfo.warnUser(_lex.getMessage(), MessageManager.getString("warn.service_not_supported")); wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_SERVERERROR); wsInfo.setStatus(j.getJobnum(), WebserviceInfo.STATE_STOPPED_SERVERERROR); } catch (compbio.metadata.LimitExceededException _lex) { lex = _lex; - wsInfo.appendProgressText("Job could not be run because it exceeded a hard limit on the server.\n" - + _lex.getMessage()); - wsInfo.warnUser(_lex.getMessage(), "Input is too big!"); + wsInfo.appendProgressText(MessageManager.formatMessage("info.job_couldnt_be_run_exceeded_hard_limit", new String[]{_lex.getMessage()})); + wsInfo.warnUser(_lex.getMessage(), MessageManager.getString("warn.input_is_too_big")); wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); wsInfo.setStatus(j.getJobnum(), WebserviceInfo.STATE_STOPPED_ERROR); } catch (compbio.metadata.WrongParameterException _lex) { lex = _lex; - wsInfo.warnUser(_lex.getMessage(), "Invalid job parameter set!"); - wsInfo.appendProgressText("Job could not be run because some of the parameter settings are not supported by the server.\n" - + _lex.getMessage() - + "\nPlease check to make sure you have used the correct parameter set for this service!\n"); + wsInfo.warnUser(_lex.getMessage(), MessageManager.getString("warn.invalid_job_param_set")); + wsInfo.appendProgressText(MessageManager.formatMessage("info.job_couldnt_be_run_incorrect_param_setting", new String[]{_lex.getMessage()})); wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); wsInfo.setStatus(j.getJobnum(), WebserviceInfo.STATE_STOPPED_ERROR); } catch (Error e) @@ -729,8 +752,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI j.setAllowedServerExceptions(0); wsInfo.appendProgressText(j.getJobnum(), - "Failed to submit sequences for alignment.\n" - + "Just close the window\n"); + MessageManager.getString("info.failed_to_submit_sequences_for_alignment")); } } } @@ -738,7 +760,7 @@ class MsaWSThread extends AWS2Thread implements WSClientI public void parseResult() { long progbar = System.currentTimeMillis(); - wsInfo.setProgressBar("Collecting job results.", progbar); + wsInfo.setProgressBar(MessageManager.getString("status.collecting_job_results"), progbar); int results = 0; // number of result sets received JobStateSummary finalState = new JobStateSummary(); try