Added jobFail state
[jalview.git] / src / jalview / gui / WebserviceInfo.java
1 package jalview.gui;\r
2 \r
3 import java.awt.*;\r
4 import java.awt.event.*;\r
5 import javax.swing.*;\r
6 import jalview.jbgui.GWebserviceInfo;\r
7 \r
8 public class WebserviceInfo extends GWebserviceInfo\r
9 {\r
10 \r
11   public static final int STATE_QUEUING = 0;\r
12   public static final int STATE_RUNNING = 1;\r
13   public static final int STATE_STOPPED_OK = 2;\r
14   public static final int STATE_CANCELLED_OK = 3;\r
15   public static final int STATE_STOPPED_ERROR = 4;\r
16   public static final int STATE_STOPPED_SERVERERROR = 5;\r
17   int currentStatus = STATE_QUEUING;\r
18   Image image;\r
19   int angle = 0;\r
20 \r
21   String title="";\r
22   jalview.ws.WSClientI thisService;\r
23   boolean serviceIsCancellable;\r
24   public jalview.ws.WSClientI getthisService() {\r
25     return thisService;\r
26   }\r
27   public void setthisService(jalview.ws.WSClientI newservice) {\r
28     thisService = newservice;\r
29     serviceIsCancellable = newservice.isCancellable();\r
30   }\r
31 \r
32   public WebserviceInfo(String title, String info)\r
33   {\r
34     init(title, info, 520, 500);\r
35   }\r
36 \r
37   public WebserviceInfo(String title, String info, int width, int height)\r
38   {\r
39     init(title, info, width, height);\r
40   }\r
41 \r
42   void init(String title, String info, int width, int height)\r
43   {\r
44     JInternalFrame frame = new JInternalFrame();\r
45     frame.setContentPane(this);\r
46     Desktop.addInternalFrame(frame, title, width, height);\r
47 \r
48     this.title = title;\r
49     setInfoText(info);\r
50     java.net.URL url = getClass().getResource("/images/logo.gif");\r
51     image = java.awt.Toolkit.getDefaultToolkit().createImage(url);\r
52     MediaTracker mt = new MediaTracker(this);\r
53     mt.addImage(image, 0);\r
54     try\r
55     {\r
56       mt.waitForID(0);\r
57     }\r
58     catch (Exception ex)\r
59     {}\r
60 \r
61 \r
62     AnimatedPanel ap = new AnimatedPanel();\r
63     titlePanel.add(ap, BorderLayout.CENTER);\r
64     Thread thread = new Thread(ap);\r
65     thread.start();\r
66   }\r
67 \r
68   public void setStatus(int status)\r
69   {\r
70     currentStatus = status;\r
71   }\r
72 \r
73   public String getInfoText()\r
74   {   return infoText.getText();  }\r
75 \r
76   public void setInfoText(String text)\r
77   {   infoText.setText(text);     }\r
78 \r
79   public void appendInfoText(String text)\r
80   {  infoText.append(text);  }\r
81 \r
82   public String getProgressText()\r
83   {   return progressText.getText();  }\r
84 \r
85   public void setProgressText(String text)\r
86   {   progressText.setText(text);   }\r
87 \r
88   public void appendProgressText(String text)\r
89   {   progressText.append(text);  }\r
90 \r
91   protected void cancel_actionPerformed(ActionEvent e)\r
92   {\r
93     if (!serviceIsCancellable)\r
94       JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
95                                             "This job cannot be cancelled." ,\r
96                                             "Cancel job"\r
97                                             ,JOptionPane.WARNING_MESSAGE);\r
98     else\r
99       thisService.cancelJob();\r
100   }\r
101 \r
102 \r
103   class AnimatedPanel extends JPanel implements Runnable\r
104   {\r
105     long startTime=0;\r
106     public void run()\r
107     {\r
108       startTime = System.currentTimeMillis();\r
109       while(currentStatus<STATE_STOPPED_OK)\r
110       try\r
111       {\r
112         Thread.sleep(50);\r
113 \r
114         int units =  (int)((System.currentTimeMillis()-startTime)/10f);\r
115         angle += units;\r
116         angle %= 360;\r
117         startTime = System.currentTimeMillis();\r
118         repaint();\r
119 \r
120       }\r
121       catch (Exception ex)\r
122       {}\r
123       angle = 0;\r
124       cancel.setEnabled(false);\r
125 \r
126     }\r
127 \r
128    synchronized public void  paintComponent(Graphics g1)\r
129     {\r
130       Graphics2D g = (Graphics2D) g1;\r
131       g.setColor(Color.white);\r
132       g.fillRect(0, 0, getWidth(), getHeight());\r
133       if (image != null)\r
134       {\r
135         g.rotate(Math.toRadians(angle), 28, 28);\r
136         g.drawImage(image, 10, 10, this);\r
137         g.rotate( -Math.toRadians(angle), 28, 28);\r
138       }\r
139       g.setFont(new Font("Arial", Font.BOLD, 12));\r
140       g.setColor(Color.black);\r
141       switch(currentStatus)\r
142       {\r
143         case STATE_QUEUING:\r
144           g.drawString(title.concat(" - queuing"), 60, 30);\r
145           break;\r
146         case STATE_RUNNING:\r
147           g.drawString(title.concat(" - running"), 60, 30);\r
148           break;\r
149         case STATE_STOPPED_OK:\r
150           g.drawString(title.concat(" - complete"), 60, 30);\r
151           break;\r
152 \r
153         case STATE_CANCELLED_OK:\r
154           g.drawString(title.concat(" - job cancelled!"), 60, 30);\r
155           break;\r
156 \r
157         case STATE_STOPPED_ERROR:\r
158           g.drawString(title.concat(" - job error!"), 60, 30);\r
159           break;\r
160         case STATE_STOPPED_SERVERERROR:\r
161           g.drawString(title.concat(" - Server Error! (try later)"), 60, 30);\r
162           break;\r
163       }\r
164 \r
165     }\r
166   }\r
167 }\r