JAL-1645 Version-Rel Version 2.9 Year-Rel 2015 Licensing glob
[jalview.git] / src / jalview / ws / AWSThread.java
index 108ca03..156bd84 100644 (file)
@@ -1,19 +1,22 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9)
+ * Copyright (C) 2015 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 <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.ws;
 
@@ -25,7 +28,11 @@ import jalview.datamodel.AlignmentView;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
 import jalview.gui.WebserviceInfo;
-import jalview.gui.FeatureRenderer.FeatureRendererSettings;
+import jalview.util.MessageManager;
+import jalview.viewmodel.seqfeatures.FeatureRendererSettings;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
 
 public abstract class AWSThread extends Thread
 {
@@ -53,7 +60,7 @@ public abstract class AWSThread extends Thread
   /**
    * dataset sequence relationships to be propagated onto new results
    */
-  protected AlignedCodonFrame[] codonframe = null;
+  protected Set<AlignedCodonFrame> codonframe = null;
 
   /**
    * are there jobs still running in this thread.
@@ -83,6 +90,11 @@ public abstract class AWSThread extends Thread
    */
   protected String WsUrl = null;
 
+  /*
+   * The AlignFrame from which the service was requested.
+   */
+  private AlignFrame alignFrame;
+
   /**
    * generic web service job/subjob poll loop
    */
@@ -120,8 +132,9 @@ public abstract class AWSThread extends Thread
           } catch (Exception ex)
           {
             // Deal with Transaction exceptions
-            wsInfo.appendProgressText(jobs[j].jobnum, "\n" + WebServiceName
-                    + " Server exception!\n" + ex.getMessage());
+            wsInfo.appendProgressText(jobs[j].jobnum, MessageManager
+                    .formatMessage("info.server_exception", new Object[] {
+                        WebServiceName, ex.getMessage() }));
             // always output the exception's stack trace to the log
             Cache.log.warn(WebServiceName + " job(" + jobs[j].jobnum
                     + ") Server exception.");
@@ -163,30 +176,7 @@ public abstract class AWSThread extends Thread
         jstate.updateJobPanelState(wsInfo, OutputHeader, jobs[j]);
       }
       // Decide on overall state based on collected jobs[] states
-      if (jstate.running > 0)
-      {
-        wsInfo.setStatus(WebserviceInfo.STATE_RUNNING);
-      }
-      else if (jstate.queuing > 0)
-      {
-        wsInfo.setStatus(WebserviceInfo.STATE_QUEUING);
-      }
-      else
-      {
-        jobComplete = true;
-        if (jstate.finished > 0)
-        {
-          wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK);
-        }
-        else if (jstate.error > 0)
-        {
-          wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR);
-        }
-        else if (jstate.serror > 0)
-        {
-          wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_SERVERERROR);
-        }
-      }
+      updateGlobalStatus(jstate);
       if (!jobComplete)
       {
         try
@@ -208,10 +198,41 @@ public abstract class AWSThread extends Thread
     {
       Cache.log
               .debug("WebServiceJob poll loop finished with no jobs created.");
+      wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR);
+      wsInfo.appendProgressText(MessageManager
+              .getString("info.no_jobs_ran"));
       wsInfo.setFinishedNoResults();
     }
   }
 
+  protected void updateGlobalStatus(JobStateSummary jstate)
+  {
+    if (jstate.running > 0)
+    {
+      wsInfo.setStatus(WebserviceInfo.STATE_RUNNING);
+    }
+    else if (jstate.queuing > 0)
+    {
+      wsInfo.setStatus(WebserviceInfo.STATE_QUEUING);
+    }
+    else
+    {
+      jobComplete = true;
+      if (jstate.finished > 0)
+      {
+        wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_OK);
+      }
+      else if (jstate.error > 0)
+      {
+        wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR);
+      }
+      else if (jstate.serror > 0)
+      {
+        wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_SERVERERROR);
+      }
+    }
+  }
+
   public AWSThread()
   {
     super();
@@ -284,13 +305,12 @@ public abstract class AWSThread extends Thread
       SequenceI[] alignment = al.getSequencesArray();
       for (int sq = 0; sq < alignment.length; sq++)
       {
-        for (int i = 0; i < codonframe.length; i++)
+        for (AlignedCodonFrame acf : codonframe)
         {
-          if (codonframe[i] != null
-                  && codonframe[i].involvesSequence(alignment[sq]))
+          final SequenceI seq = alignment[sq];
+          if (acf != null && acf.involvesSequence(seq))
           {
-            al.addCodonFrame(codonframe[i]);
-            codonframe[i] = null;
+            al.addCodonFrame(acf);
             break;
           }
         }
@@ -335,6 +355,7 @@ public abstract class AWSThread extends Thread
 
   /**
    * Extracts additional info from alignment view's context.
+   * 
    * @param alframe
    *          - reference for copying mappings and display styles across
    * @param wsinfo2
@@ -348,7 +369,7 @@ public abstract class AWSThread extends Thread
           AlignmentView alview, String wsurl2)
   {
     super();
-    // this.alignFrame = alframe;
+    this.alignFrame = alframe;
     currentView = alframe.getCurrentView().getAlignment();
     featureSettings = alframe.getFeatureRenderer().getSettings();
     defGapChar = alframe.getViewport().getGapCharacter();
@@ -357,13 +378,18 @@ public abstract class AWSThread extends Thread
     WsUrl = wsurl2;
     if (alframe != null)
     {
-      AlignedCodonFrame[] cf = alframe.getViewport().getAlignment()
+      Set<AlignedCodonFrame> cf = alframe.getViewport().getAlignment()
               .getCodonFrames();
       if (cf != null)
       {
-        codonframe = new AlignedCodonFrame[cf.length];
-        System.arraycopy(cf, 0, codonframe, 0, cf.length);
+        codonframe = new LinkedHashSet<AlignedCodonFrame>();
+        codonframe.addAll(cf);
       }
     }
   }
+
+  protected AlignFrame getRequestingAlignFrame()
+  {
+    return this.alignFrame;
+  }
 }