multiple web service jobs from visible blocks of an alignment.
[jalview.git] / src / jalview / gui / WebserviceInfo.java
index 9dadee7..63ef9f0 100755 (executable)
  */\r
 package jalview.gui;\r
 \r
-import jalview.jbgui.*;\r
+import java.util.*;\r
 \r
 import java.awt.*;\r
 import java.awt.event.*;\r
 import java.awt.image.*;\r
-\r
 import javax.swing.*;\r
 \r
+import jalview.jbgui.*;\r
+\r
 \r
 /**\r
  * Base class for web service client thread and gui\r
@@ -35,6 +36,7 @@ import javax.swing.*;
  */\r
 public class WebserviceInfo extends GWebserviceInfo\r
 {\r
+\r
     /** Job is Queued */\r
     public static final int STATE_QUEUING = 0;\r
 \r
@@ -59,7 +61,43 @@ public class WebserviceInfo extends GWebserviceInfo
     jalview.ws.WSClientI thisService;\r
     boolean serviceIsCancellable;\r
     JInternalFrame frame;\r
-\r
+    JTabbedPane subjobs=null;\r
+    java.util.Vector jobPanes = null;\r
+    // tabbed or not\r
+    public synchronized int addJobPane() {\r
+      JScrollPane jobpane = new JScrollPane();\r
+      JTextArea progressText = new JTextArea();\r
+      progressText.setFont(new java.awt.Font("Verdana", 0, 10));\r
+      progressText.setBorder(null);\r
+      progressText.setEditable(false);\r
+      progressText.setText("WS Job");\r
+      progressText.setLineWrap(true);\r
+      progressText.setWrapStyleWord(true);\r
+      jobpane.setName("JobPane");\r
+      jobpane.getViewport().add(progressText, null);\r
+      jobpane.setBorder(null);\r
+      if (jobPanes==null) {\r
+        jobPanes = new Vector();\r
+      }\r
+      int newpane = jobPanes.size();\r
+      jobPanes.add(jobpane);\r
+\r
+      if (newpane==0) {\r
+        this.add(jobpane, BorderLayout.CENTER);\r
+      } else {\r
+        if (newpane==1) {\r
+        // revert to a tabbed pane.\r
+        JScrollPane firstpane;\r
+        this.remove(firstpane=(JScrollPane) jobPanes.get(0));\r
+        subjobs=new JTabbedPane();\r
+          this.add(subjobs, BorderLayout.CENTER);\r
+          subjobs.add(firstpane);\r
+          subjobs.setTitleAt(0, firstpane.getName());\r
+        }\r
+        subjobs.add(jobpane);\r
+      }\r
+      return newpane; // index for accessor methods below\r
+    }\r
     /**\r
      * Creates a new WebserviceInfo object.\r
      *\r
@@ -153,7 +191,38 @@ public class WebserviceInfo extends GWebserviceInfo
     {\r
         currentStatus = status;\r
     }\r
-\r
+    /**\r
+     * subjob status indicator\r
+     * @param jobpane\r
+     * @param status\r
+     */\r
+    public void setStatus(int jobpane, int status) {\r
+      if (jobpane<0 || jobpane>=jobPanes.size()) {\r
+        throw new Error("setStatus called for non-existent job pane."+jobpane);\r
+      }\r
+      switch (status) {\r
+      case STATE_QUEUING:\r
+        setProgressText(jobpane, "QUEUED");\r
+        break;\r
+      case STATE_RUNNING:\r
+        setProgressText(jobpane, "RUNNING");\r
+        break;\r
+      case STATE_STOPPED_OK:\r
+        setProgressText(jobpane, "FINISHED");\r
+      break;\r
+      case STATE_CANCELLED_OK:\r
+        setProgressText(jobpane, "CANCELLED");\r
+        break;\r
+      case STATE_STOPPED_ERROR:\r
+        setProgressText(jobpane, "BROKEN");\r
+        break;\r
+      case STATE_STOPPED_SERVERERROR:\r
+        setProgressText(jobpane, "ALERT");\r
+        break;\r
+        default:\r
+          setProgressText(jobpane, "UNKNOWN STATE");\r
+      }\r
+    }\r
     /**\r
      * DOCUMENT ME!\r
      *\r
@@ -183,25 +252,29 @@ public class WebserviceInfo extends GWebserviceInfo
     {\r
         infoText.append(text);\r
     }\r
-\r
     /**\r
      * DOCUMENT ME!\r
      *\r
      * @return DOCUMENT ME!\r
      */\r
-    public String getProgressText()\r
+    public String getProgressText(int which)\r
     {\r
-        return progressText.getText();\r
+      if (jobPanes == null)\r
+        addJobPane();\r
+      return ( (JTextArea) ( (JScrollPane) jobPanes.get(which)).getViewport().\r
+              getComponent(0)).getText();\r
     }\r
-\r
     /**\r
      * DOCUMENT ME!\r
      *\r
      * @param text DOCUMENT ME!\r
      */\r
-    public void setProgressText(String text)\r
+    public void setProgressText(int which, String text)\r
     {\r
-        progressText.setText(text);\r
+      if (jobPanes == null)\r
+        addJobPane();\r
+      ( (JTextArea) ( (JScrollPane) jobPanes.get(which)).getViewport().\r
+       getComponent(0)).setText(text);\r
     }\r
 \r
     /**\r
@@ -209,9 +282,57 @@ public class WebserviceInfo extends GWebserviceInfo
      *\r
      * @param text DOCUMENT ME!\r
      */\r
+    public void appendProgressText(int which, String text)\r
+    {\r
+      if (jobPanes == null)\r
+        addJobPane();\r
+      ( (JTextArea) ( (JScrollPane) jobPanes.get(which)).getViewport().\r
+       getComponent(0)).append(text);\r
+    }\r
+    /**\r
+     * setProgressText(0, text)\r
+     */\r
+    public void setProgressText(String text)\r
+    {\r
+      setProgressText(0, text);\r
+    }\r
+    /**\r
+     * appendProgressText(0, text)\r
+     */\r
     public void appendProgressText(String text)\r
     {\r
-        progressText.append(text);\r
+      appendProgressText(0, text);\r
+    }\r
+    /**\r
+     * getProgressText(0)\r
+     */\r
+    public String getProgressText()\r
+    {\r
+      return getProgressText(0);\r
+    }\r
+    /**\r
+     * get the tab title for a subjob\r
+     * @param which int\r
+     * @return String\r
+     */\r
+    public String getProgressName(int which) {\r
+      if (jobPanes==null)\r
+        addJobPane();\r
+      if (subjobs!=null)\r
+        return subjobs.getTitleAt(which);\r
+      else\r
+        return ((JScrollPane) jobPanes.get(which)).getViewport().getComponent(0).getName();\r
+    }\r
+    /**\r
+     * set the tab title for a subjob\r
+     * @param name String\r
+     * @param which int\r
+     */\r
+    public void setProgressName(String name, int which) {\r
+      if (subjobs!=null)\r
+        subjobs.setTitleAt(which, name);\r
+      else\r
+        ((JScrollPane) jobPanes.get(which)).getViewport().getComponent(0).setName(name);\r
     }\r
 \r
     /**\r
@@ -246,7 +367,7 @@ public class WebserviceInfo extends GWebserviceInfo
     }\r
 \r
 \r
-    class AnimatedPanel extends JPanel implements Runnable\r
+  class AnimatedPanel extends JPanel implements Runnable\r
     {\r
         long startTime = 0;\r
         BufferedImage offscreen;\r