*/\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
*/\r
public class WebserviceInfo extends GWebserviceInfo\r
{\r
+\r
/** Job is Queued */\r
public static final int STATE_QUEUING = 0;\r
\r
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
{\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
{\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
*\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
}\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