2.08, not 2.07
[jalview.git] / src / jalview / gui / WebserviceInfo.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 package jalview.gui;\r
20 \r
21 import jalview.jbgui.*;\r
22 \r
23 import java.awt.*;\r
24 import java.awt.event.*;\r
25 \r
26 import javax.swing.*;\r
27 \r
28 \r
29 /**\r
30  * Base class for web service client thread and gui\r
31  *\r
32  * @author $author$\r
33  * @version $Revision$\r
34  */\r
35 public class WebserviceInfo extends GWebserviceInfo\r
36 {\r
37     /** Job is Queued */\r
38     public static final int STATE_QUEUING = 0;\r
39 \r
40     /** Job is Running */\r
41     public static final int STATE_RUNNING = 1;\r
42 \r
43     /** Job has finished with no errors */\r
44     public static final int STATE_STOPPED_OK = 2;\r
45 \r
46     /** Job has been cancelled with no errors */\r
47     public static final int STATE_CANCELLED_OK = 3;\r
48 \r
49     /** job has stopped because of some error */\r
50     public static final int STATE_STOPPED_ERROR = 4;\r
51 \r
52     /** job has failed because of some unavoidable service interruption */\r
53     public static final int STATE_STOPPED_SERVERERROR = 5;\r
54     int currentStatus = STATE_QUEUING;\r
55     Image image;\r
56     int angle = 0;\r
57     String title = "";\r
58     jalview.ws.WSClientI thisService;\r
59     boolean serviceIsCancellable;\r
60 \r
61     /**\r
62      * Creates a new WebserviceInfo object.\r
63      *\r
64      * @param title short name and job type\r
65      * @param info reference or other human readable description\r
66      */\r
67     public WebserviceInfo(String title, String info)\r
68     {\r
69         init(title, info, 520, 500);\r
70     }\r
71 \r
72     /**\r
73      * Creates a new WebserviceInfo object.\r
74      *\r
75      * @param title DOCUMENT ME!\r
76      * @param info DOCUMENT ME!\r
77      * @param width DOCUMENT ME!\r
78      * @param height DOCUMENT ME!\r
79      */\r
80     public WebserviceInfo(String title, String info, int width, int height)\r
81     {\r
82         init(title, info, width, height);\r
83     }\r
84 \r
85     /**\r
86      * DOCUMENT ME!\r
87      *\r
88      * @return DOCUMENT ME!\r
89      */\r
90     public jalview.ws.WSClientI getthisService()\r
91     {\r
92         return thisService;\r
93     }\r
94 \r
95     /**\r
96      * DOCUMENT ME!\r
97      *\r
98      * @param newservice DOCUMENT ME!\r
99      */\r
100     public void setthisService(jalview.ws.WSClientI newservice)\r
101     {\r
102         thisService = newservice;\r
103         serviceIsCancellable = newservice.isCancellable();\r
104     }\r
105 \r
106     /**\r
107      * DOCUMENT ME!\r
108      *\r
109      * @param title DOCUMENT ME!\r
110      * @param info DOCUMENT ME!\r
111      * @param width DOCUMENT ME!\r
112      * @param height DOCUMENT ME!\r
113      */\r
114     void init(String title, String info, int width, int height)\r
115     {\r
116         JInternalFrame frame = new JInternalFrame();\r
117         frame.setContentPane(this);\r
118         Desktop.addInternalFrame(frame, title, width, height);\r
119 \r
120         this.title = title;\r
121         setInfoText(info);\r
122 \r
123         java.net.URL url = getClass().getResource("/images/logo.gif");\r
124         image = java.awt.Toolkit.getDefaultToolkit().createImage(url);\r
125 \r
126         MediaTracker mt = new MediaTracker(this);\r
127         mt.addImage(image, 0);\r
128 \r
129         try\r
130         {\r
131             mt.waitForID(0);\r
132         }\r
133         catch (Exception ex)\r
134         {\r
135         }\r
136 \r
137         AnimatedPanel ap = new AnimatedPanel();\r
138         titlePanel.add(ap, BorderLayout.CENTER);\r
139 \r
140         Thread thread = new Thread(ap);\r
141         thread.start();\r
142     }\r
143 \r
144     /**\r
145      * DOCUMENT ME!\r
146      *\r
147      * @param status integer status from state constants\r
148      */\r
149     public void setStatus(int status)\r
150     {\r
151         currentStatus = status;\r
152     }\r
153 \r
154     /**\r
155      * DOCUMENT ME!\r
156      *\r
157      * @return DOCUMENT ME!\r
158      */\r
159     public String getInfoText()\r
160     {\r
161         return infoText.getText();\r
162     }\r
163 \r
164     /**\r
165      * DOCUMENT ME!\r
166      *\r
167      * @param text DOCUMENT ME!\r
168      */\r
169     public void setInfoText(String text)\r
170     {\r
171         infoText.setText(text);\r
172     }\r
173 \r
174     /**\r
175      * DOCUMENT ME!\r
176      *\r
177      * @param text DOCUMENT ME!\r
178      */\r
179     public void appendInfoText(String text)\r
180     {\r
181         infoText.append(text);\r
182     }\r
183 \r
184     /**\r
185      * DOCUMENT ME!\r
186      *\r
187      * @return DOCUMENT ME!\r
188      */\r
189     public String getProgressText()\r
190     {\r
191         return progressText.getText();\r
192     }\r
193 \r
194     /**\r
195      * DOCUMENT ME!\r
196      *\r
197      * @param text DOCUMENT ME!\r
198      */\r
199     public void setProgressText(String text)\r
200     {\r
201         progressText.setText(text);\r
202     }\r
203 \r
204     /**\r
205      * DOCUMENT ME!\r
206      *\r
207      * @param text DOCUMENT ME!\r
208      */\r
209     public void appendProgressText(String text)\r
210     {\r
211         progressText.append(text);\r
212     }\r
213 \r
214     /**\r
215      * Gui action for cancelling the current job, if possible.\r
216      *\r
217      * @param e DOCUMENT ME!\r
218      */\r
219     protected void cancel_actionPerformed(ActionEvent e)\r
220     {\r
221         if (!serviceIsCancellable)\r
222         {\r
223             JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
224                 "This job cannot be cancelled.\nJust close the window.", "Cancel job",\r
225                 JOptionPane.WARNING_MESSAGE);\r
226         }\r
227         else\r
228         {\r
229             thisService.cancelJob();\r
230         }\r
231     }\r
232 \r
233     class AnimatedPanel extends JPanel implements Runnable\r
234     {\r
235         long startTime = 0;\r
236 \r
237         public void run()\r
238         {\r
239             startTime = System.currentTimeMillis();\r
240 \r
241             while (currentStatus < STATE_STOPPED_OK)\r
242             {\r
243                 try\r
244                 {\r
245                     Thread.sleep(50);\r
246 \r
247                     int units = (int) ((System.currentTimeMillis() - startTime) / 10f);\r
248                     angle += units;\r
249                     angle %= 360;\r
250                     startTime = System.currentTimeMillis();\r
251                     repaint();\r
252                 }\r
253                 catch (Exception ex)\r
254                 {\r
255                 }\r
256             }\r
257 \r
258             angle = 0;\r
259             cancel.setEnabled(false);\r
260         }\r
261 \r
262         synchronized public void paintComponent(Graphics g1)\r
263         {\r
264             Graphics2D g = (Graphics2D) g1;\r
265             g.setColor(Color.white);\r
266             g.fillRect(0, 0, getWidth(), getHeight());\r
267 \r
268             if (image != null)\r
269             {\r
270                 g.rotate(Math.toRadians(angle), 28, 28);\r
271                 g.drawImage(image, 10, 10, this);\r
272                 g.rotate(-Math.toRadians(angle), 28, 28);\r
273             }\r
274 \r
275             g.setFont(new Font("Arial", Font.BOLD, 12));\r
276             g.setColor(Color.black);\r
277 \r
278             switch (currentStatus)\r
279             {\r
280             case STATE_QUEUING:\r
281                 g.drawString(title.concat(" - queuing"), 60, 30);\r
282 \r
283                 break;\r
284 \r
285             case STATE_RUNNING:\r
286                 g.drawString(title.concat(" - running"), 60, 30);\r
287 \r
288                 break;\r
289 \r
290             case STATE_STOPPED_OK:\r
291                 g.drawString(title.concat(" - complete"), 60, 30);\r
292 \r
293                 break;\r
294 \r
295             case STATE_CANCELLED_OK:\r
296                 g.drawString(title.concat(" - job cancelled!"), 60, 30);\r
297 \r
298                 break;\r
299 \r
300             case STATE_STOPPED_ERROR:\r
301                 g.drawString(title.concat(" - job error!"), 60, 30);\r
302 \r
303                 break;\r
304 \r
305             case STATE_STOPPED_SERVERERROR:\r
306                 g.drawString(title.concat(" - Server Error! (try later)"), 60,\r
307                     30);\r
308 \r
309                 break;\r
310             }\r
311         }\r
312     }\r
313 }\r