\r
import java.awt.*;\r
import java.awt.event.*;\r
+import java.awt.image.*;\r
\r
import javax.swing.*;\r
\r
\r
/**\r
- * DOCUMENT ME!\r
+ * Base class for web service client thread and gui\r
*\r
* @author $author$\r
* @version $Revision$\r
*/\r
public class WebserviceInfo extends GWebserviceInfo\r
{\r
- /** DOCUMENT ME!! */\r
+ /** Job is Queued */\r
public static final int STATE_QUEUING = 0;\r
\r
- /** DOCUMENT ME!! */\r
+ /** Job is Running */\r
public static final int STATE_RUNNING = 1;\r
\r
- /** DOCUMENT ME!! */\r
+ /** Job has finished with no errors */\r
public static final int STATE_STOPPED_OK = 2;\r
\r
- /** DOCUMENT ME!! */\r
+ /** Job has been cancelled with no errors */\r
public static final int STATE_CANCELLED_OK = 3;\r
\r
- /** DOCUMENT ME!! */\r
+ /** job has stopped because of some error */\r
public static final int STATE_STOPPED_ERROR = 4;\r
\r
- /** DOCUMENT ME!! */\r
+ /** job has failed because of some unavoidable service interruption */\r
public static final int STATE_STOPPED_SERVERERROR = 5;\r
int currentStatus = STATE_QUEUING;\r
Image image;\r
String title = "";\r
jalview.ws.WSClientI thisService;\r
boolean serviceIsCancellable;\r
+ JInternalFrame frame;\r
\r
/**\r
* Creates a new WebserviceInfo object.\r
*\r
- * @param title DOCUMENT ME!\r
- * @param info DOCUMENT ME!\r
+ * @param title short name and job type\r
+ * @param info reference or other human readable description\r
*/\r
public WebserviceInfo(String title, String info)\r
{\r
*/\r
void init(String title, String info, int width, int height)\r
{\r
- JInternalFrame frame = new JInternalFrame();\r
+ frame = new JInternalFrame();\r
frame.setContentPane(this);\r
Desktop.addInternalFrame(frame, title, width, height);\r
+ frame.setClosable(false);\r
\r
this.title = title;\r
setInfoText(info);\r
/**\r
* DOCUMENT ME!\r
*\r
- * @param status DOCUMENT ME!\r
+ * @param status integer status from state constants\r
*/\r
public void setStatus(int status)\r
{\r
}\r
\r
/**\r
- * DOCUMENT ME!\r
+ * Gui action for cancelling the current job, if possible.\r
*\r
* @param e DOCUMENT ME!\r
*/\r
if (!serviceIsCancellable)\r
{\r
JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
- "This job cannot be cancelled.", "Cancel job",\r
+ "This job cannot be cancelled.\nJust close the window.", "Cancel job",\r
JOptionPane.WARNING_MESSAGE);\r
}\r
else\r
{\r
+ frame.setClosable(true);\r
thisService.cancelJob();\r
}\r
}\r
\r
+ public void setResultsReady()\r
+ {\r
+ frame.setClosable(true);\r
+ buttonPanel.remove(cancel);\r
+ buttonPanel.add(showResultsNewFrame);\r
+ buttonPanel.add(mergeResults);\r
+ buttonPanel.setLayout(new GridLayout(2,1,5,5));\r
+ buttonPanel.validate();\r
+ validate();\r
+ }\r
+\r
+\r
class AnimatedPanel extends JPanel implements Runnable\r
{\r
long startTime = 0;\r
+ BufferedImage offscreen;\r
\r
public void run()\r
{\r
startTime = System.currentTimeMillis();\r
+ Graphics2D g = null;\r
\r
while (currentStatus < STATE_STOPPED_OK)\r
{\r
{\r
Thread.sleep(50);\r
\r
- int units = (int) ((System.currentTimeMillis() - startTime) / 10f);\r
+ int units = (int) ( (System.currentTimeMillis() - startTime) /\r
+ 10f);\r
angle += units;\r
angle %= 360;\r
startTime = System.currentTimeMillis();\r
- repaint();\r
- }\r
- catch (Exception ex)\r
- {\r
- }\r
- }\r
\r
- angle = 0;\r
- cancel.setEnabled(false);\r
- }\r
+ if (offscreen == null || offscreen.getWidth(this) != getWidth()\r
+ || offscreen.getHeight(this) != getHeight())\r
+ {\r
+ offscreen = new BufferedImage(getWidth(), getHeight(),\r
+ BufferedImage.TYPE_INT_ARGB);\r
+ g = (Graphics2D) offscreen.getGraphics();\r
+ }\r
\r
- synchronized public void paintComponent(Graphics g1)\r
- {\r
- Graphics2D g = (Graphics2D) g1;\r
- g.setColor(Color.white);\r
- g.fillRect(0, 0, getWidth(), getHeight());\r
+ g.setColor(Color.white);\r
+ g.fillRect(0, 0, getWidth(), getHeight());\r
\r
- if (image != null)\r
- {\r
- g.rotate(Math.toRadians(angle), 28, 28);\r
- g.drawImage(image, 10, 10, this);\r
- g.rotate(-Math.toRadians(angle), 28, 28);\r
- }\r
+ g.setFont(new Font("Arial", Font.BOLD, 12));\r
+ g.setColor(Color.black);\r
\r
- g.setFont(new Font("Arial", Font.BOLD, 12));\r
- g.setColor(Color.black);\r
+ switch (currentStatus)\r
+ {\r
+ case STATE_QUEUING:\r
+ g.drawString(title.concat(" - queuing"), 60, 30);\r
\r
- switch (currentStatus)\r
- {\r
- case STATE_QUEUING:\r
- g.drawString(title.concat(" - queuing"), 60, 30);\r
+ break;\r
+\r
+ case STATE_RUNNING:\r
+ g.drawString(title.concat(" - running"), 60, 30);\r
+\r
+ break;\r
\r
- break;\r
+ case STATE_STOPPED_OK:\r
+ g.drawString(title.concat(" - complete"), 60, 30);\r
\r
- case STATE_RUNNING:\r
- g.drawString(title.concat(" - running"), 60, 30);\r
+ break;\r
\r
- break;\r
+ case STATE_CANCELLED_OK:\r
+ g.drawString(title.concat(" - job cancelled!"), 60, 30);\r
\r
- case STATE_STOPPED_OK:\r
- g.drawString(title.concat(" - complete"), 60, 30);\r
+ break;\r
\r
- break;\r
+ case STATE_STOPPED_ERROR:\r
+ g.drawString(title.concat(" - job error!"), 60, 30);\r
\r
- case STATE_CANCELLED_OK:\r
- g.drawString(title.concat(" - job cancelled!"), 60, 30);\r
+ break;\r
\r
- break;\r
+ case STATE_STOPPED_SERVERERROR:\r
+ g.drawString(title.concat(" - Server Error! (try later)"),\r
+ 60,\r
+ 30);\r
\r
- case STATE_STOPPED_ERROR:\r
- g.drawString(title.concat(" - job error!"), 60, 30);\r
+ break;\r
+ }\r
\r
- break;\r
\r
- case STATE_STOPPED_SERVERERROR:\r
- g.drawString(title.concat(" - Server Error! (try later)"), 60,\r
- 30);\r
+ if (currentStatus >= STATE_STOPPED_OK)\r
+ angle = 0;\r
\r
- break;\r
+ if (image != null)\r
+ {\r
+ g.rotate(Math.toRadians(angle), 28, 28);\r
+ g.drawImage(image, 10, 10, this);\r
+ g.rotate( -Math.toRadians(angle), 28, 28);\r
+ }\r
+\r
+\r
+ repaint();\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ }\r
}\r
+\r
+ cancel.setEnabled(false);\r
+ }\r
+\r
+ public void paintComponent(Graphics g1)\r
+ {\r
+ g1.drawImage(offscreen, 0,0,this);\r
}\r
}\r
}\r