- }
- ext.vamsas.Jpred server;
- String altitle = "";
- JPredThread(WebserviceInfo wsinfo, String altitle, ext.vamsas.Jpred server, AlignmentView alview, AlignFrame alframe) {
- this.altitle = altitle;
- this.server = server;
- this.wsInfo = wsinfo;
- this.input = alview;
- this.alignFrame = alframe;
- }
-
-// String OutputHeader;
-// vamsas.objects.simple.JpredResult result;
-
- JPredThread(WebserviceInfo wsinfo, String altitle, ext.vamsas.Jpred server, Hashtable SequenceInfo,SequenceI seq, AlignmentView alview, AlignFrame alframe)
- {
- this(wsinfo, altitle, server,alview, alframe);
- JPredJob job = new JPredJob(SequenceInfo, seq);
- if (job.hasValidInput())
- {
- OutputHeader = wsInfo.getProgressText();
- jobs = new WSJob[]
- {
- job};
- job.jobnum = 0;
- }
- }
-
- JPredThread(WebserviceInfo wsinfo, String altitle, ext.vamsas.Jpred server, Hashtable SequenceInfo, SequenceI[] msf, AlignmentView alview, AlignFrame alframe)
- {
- this(wsinfo, altitle, server,alview, alframe);
- JPredJob job = new JPredJob(SequenceInfo, msf);
- if (job.hasValidInput())
- {
- jobs = new WSJob[]
- {
- job};
- OutputHeader = wsInfo.getProgressText();
- job.jobnum = 0;
- }
- }
-
- /*
- public void run()
- {
- StartJob();
-
- while (!jobComplete && (allowedServerExceptions > 0))
- {
- try
- {
- if ( (result = server.getresult(jobId)) == null)
- {
- 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);
- }
- if (result.isQueued())
- {
- wsInfo.setStatus(WebserviceInfo.STATE_QUEUING);
- }
-
- wsInfo.setProgressText(OutputHeader + "\n" +
- result.getStatus());
-
- if (result.isFinished())
- {
-
- parseResult();
- jobComplete = true;
- jobsRunning--;
- } else {
- // catch exceptions
- if (! (result.isJobFailed() || result.isServerError()))
- {
- try
- {
- Thread.sleep(5000);
- }
- catch (InterruptedException ex1)
- {
- }
-
- // System.out.println("I'm alive "+seqid+" "+jobid);
- }
- else
- {
- wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR);
- jobsRunning--;
- jobComplete = true;
- }
- }
- }
- catch (Exception ex)
- {
- allowedServerExceptions--;
-
- wsInfo.appendProgressText("\nJPredWS Server exception!\n" +
- ex.getMessage());
-
- try
- {
- if (allowedServerExceptions > 0)
- {
- Thread.sleep(5000);
- }
- }
- catch (InterruptedException ex1)
- {
- }
- }
- 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!=null)
- if (! (result.isJobFailed() || result.isServerError()))
- {
- wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK);
- }
- else
- {
- wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR);
- }
- }
- */
- void StartJob(WSJob j)
- {
- if (! (j instanceof JPredJob))
- {
- throw new Error("Implementation error - StartJob(JpredJob) called on " +
- j.getClass());
- }
- try
- {
- JPredJob job = (JPredJob) j;
- if (job.msa != null)
- {
- job.jobId = server.predictOnMsa(job.msa);
- }
- else
- if (job.sequence!=null)
- {
- job.jobId = server.predict(job.sequence);
- }
-
- if (job.jobId != null)
- {
- if (job.jobId.startsWith("Broken"))
- {
- job.result = (vamsas.objects.simple.Result)new JpredResult();
- job.result.setInvalid(true);
- job.result.setStatus("Submission " + job.jobId);
- }
- else
- {
- job.submitted = true;
- job.subjobComplete = false;
- Cache.log.info(WsURL + " Job Id '" + job.jobId + "'");
- }
- }
- else
- {
- throw new Exception("Server timed out - try again later\n");
- }
- }
- catch (Exception e)
- {
- if (e.getMessage().indexOf("Exception") > -1)
- {
- wsInfo.setStatus(j.jobnum, WebserviceInfo.STATE_STOPPED_SERVERERROR);
- wsInfo.setProgressText(j.jobnum,
- "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(j.jobnum, WebserviceInfo.STATE_STOPPED_ERROR);
- // JBPNote - this could be a popup informing the user of the problem.
- wsInfo.appendProgressText(j.jobnum,
- "Failed to submit the prediction:\n"
- + e.getMessage() +
- wsInfo.getProgressText());
-
- jalview.bin.Cache.log.debug("Failed Submission of job " + j.jobnum, e);
-
- }
- j.allowedServerExceptions = -1;
- j.subjobComplete = true;
- }
- }
-
- /* 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));
- }*/
-
- void parseResult()
- {
- int results = 0; // number of result sets received
- JobStateSummary finalState = new JobStateSummary();
- try
- {
- for (int j = 0; j < jobs.length; j++)
- {
- finalState.updateJobPanelState(wsInfo, OutputHeader, jobs[j]);
- if (jobs[j].submitted && jobs[j].subjobComplete && jobs[j].hasResults())
- {
- results++;
- }
- }
- }
- catch (Exception ex)
- {
-
- Cache.log.error("Unexpected exception when processing results for " +
- altitle, ex);
- wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR);
- }
- if (results > 0)
- {
- wsInfo.showResultsNewFrame
- .addActionListener(new java.awt.event.ActionListener()
- {
- public void actionPerformed(
- java.awt.event.ActionEvent evt)
- {
- displayResults(true);
- }
- });
- wsInfo.mergeResults
- .addActionListener(new java.awt.event.ActionListener()
- {
- public void actionPerformed(
- java.awt.event.ActionEvent evt)
- {
- displayResults(false);
- }
- });
- wsInfo.setResultsReady();
- }
- else
- {
- wsInfo.setFinishedNoResults();
- }
- }
-
- void displayResults(boolean newWindow)
- {
- // TODO: cope with multiple subjobs.
- if (jobs != null)
- {
- Alignment res = null;
- boolean msa=false;
- for (int jn = 0; jn < jobs.length; jn++)
- {
- Alignment jobres = null;
- JPredJob j = (JPredJob) jobs[jn];
-
- if (j.hasResults())
- {
- // hack - we only deal with all single seuqence predictions or all profile predictions
- msa = (j.msa!=null) ? true : msa;
- try
- {
- jalview.bin.Cache.log.debug("Parsing output of job " + jn);
- jobres = j.getResultSet();
- jalview.bin.Cache.log.debug("Finished parsing output.");
- if (jobs.length==1)
- res = jobres;
- else {
- // do merge with other job results
- throw new Error("Multiple JNet subjob merging not yet implemented.");
- }
- }
- catch (Exception e)
- {
- jalview.bin.Cache.log.error(
- "JNet Client: JPred Annotation Parse Error",
- e);
- wsInfo.setStatus(j.jobnum, WebserviceInfo.STATE_STOPPED_ERROR);
- wsInfo.appendProgressText(j.jobnum,
- OutputHeader + "\n" +
- j.result.getStatus() +
- "\nInvalid JNet job result data!\n" +
- e.getMessage());
- j.result.setBroken(true);
- }
- }
- }
-
- if (res != null)
- {
- if (newWindow)
- {
- AlignFrame af;
- if (input==null) {
- af = new AlignFrame(res);
- } else {
- java.lang.Object[] alandcolsel = input.getAlignmentAndColumnSelection(alignFrame.getViewport().getGapCharacter());
-
- if (((SequenceI[])alandcolsel[0])[0].getLength()!=res.getWidth()) {
- if (msa) {
- throw new Error("Implementation Error! ColumnSelection from input alignment will not map to result alignment!");
- } else {
- // test this.
- ((ColumnSelection) alandcolsel[1]).compensateForEdits(ShiftList.parseMap(((SequenceI[]) alandcolsel[0])[0].gapMap()));
- }
- }
- af = new AlignFrame(res, (ColumnSelection) alandcolsel[1]);
- }
- Desktop.addInternalFrame(af, altitle,
- AlignFrame.NEW_WINDOW_WIDTH,
- AlignFrame.NEW_WINDOW_HEIGHT);
- }
- else
- {
- Cache.log.info("Append results onto existing alignment.");
- }
- }
- }
- }
- void pollJob(WSJob job)
- throws Exception
- {
- job.result = server.getresult(job.jobId);
- }
- public boolean isCancellable()
- {
- return false;
- }
-
- public void cancelJob()
- {
- throw new Error("Implementation error!");
- }
-
- public boolean canMergeResults()
- {
- return false;
- }
-