FormatAdapter throws exception
[jalview.git] / src / jalview / bin / JalviewLite.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.bin;\r
20 \r
21 import jalview.appletgui.AlignFrame;\r
22 \r
23 import jalview.datamodel.*;\r
24 \r
25 import jalview.io.*;\r
26 \r
27 import java.applet.*;\r
28 \r
29 import java.awt.*;\r
30 import java.awt.event.*;\r
31 import jalview.appletgui.TreePanel;\r
32 \r
33 \r
34 /**\r
35  * Jalview Applet. Runs in Java 1.18 runtime\r
36  *\r
37  * @author $author$\r
38  * @version $Revision$\r
39  */\r
40 public class JalviewLite extends Applet\r
41 {\r
42     static int lastFrameX = 200;\r
43     static int lastFrameY = 200;\r
44     boolean fileFound = true;\r
45     String file = "No file";\r
46     Button launcher = new Button("Start Jalview");\r
47 \r
48     static AlignFrame currentAlignFrame;\r
49     boolean embedded = false;\r
50 \r
51 \r
52     /**\r
53      * init method for Jalview Applet\r
54      */\r
55     public void init()\r
56     {\r
57         int r = 255;\r
58         int g = 255;\r
59         int b = 255;\r
60         String param = getParameter("RGB");\r
61 \r
62         if (param != null)\r
63         {\r
64             try\r
65             {\r
66                 r = Integer.parseInt(param.substring(0, 2), 16);\r
67                 g = Integer.parseInt(param.substring(2, 4), 16);\r
68                 b = Integer.parseInt(param.substring(4, 6), 16);\r
69             }\r
70             catch (Exception ex)\r
71             {\r
72                 r = 255;\r
73                 g = 255;\r
74                 b = 255;\r
75             }\r
76         }\r
77 \r
78         param = getParameter("label");\r
79         if(param != null)\r
80           launcher.setLabel(param);\r
81 \r
82         this.setBackground(new Color(r, g, b));\r
83 \r
84         file = getParameter("file");\r
85         if(file.indexOf("://")==-1)\r
86                file = getCodeBase() + file;\r
87 \r
88         final JalviewLite applet = this;\r
89         if(getParameter("embedded")!=null\r
90            && getParameter("embedded").equalsIgnoreCase("true"))\r
91         {\r
92           embedded = true;\r
93           LoadingThread loader = new LoadingThread(file,\r
94                             "URL",\r
95                             applet);\r
96           loader.start();\r
97         }\r
98         else if (file != null)\r
99         {\r
100             add(launcher);\r
101 \r
102             launcher.addActionListener(new java.awt.event.ActionListener()\r
103                 {\r
104                     public void actionPerformed(ActionEvent e)\r
105                     {\r
106                         LoadingThread loader = new LoadingThread(file,\r
107                             "URL",\r
108                             applet);\r
109                         loader.start();\r
110                       }\r
111                 });\r
112         }\r
113         else\r
114         {\r
115             file = "NO FILE";\r
116             fileFound = false;\r
117         }\r
118     }\r
119 \r
120 \r
121     public static void main(String [] args)\r
122     {\r
123       if(args.length!=1)\r
124       {\r
125         System.out.println("\nUsage: java -jar jalviewApplet.jar fileName\n");\r
126         System.exit(1);\r
127       }\r
128 \r
129       String format = jalview.io.IdentifyFile.Identify(args[0],"File");\r
130       SequenceI[] sequences = null;\r
131      try{\r
132        sequences = new AppletFormatAdapter().readFile(args[0], "File", format);\r
133      }catch(java.io.IOException ex)\r
134      {\r
135        ex.printStackTrace();\r
136      }\r
137       if ( (sequences != null) && (sequences.length > 0))\r
138       {\r
139         AlignFrame af = new AlignFrame(new Alignment(sequences), null, args[0]);\r
140         af.statusBar.setText("Successfully loaded file " + args[0]);\r
141       }\r
142     }\r
143 \r
144 \r
145     /**\r
146      * Initialises and displays a new java.awt.Frame\r
147      *\r
148      * @param frame java.awt.Frame to be displayed\r
149      * @param title title of new frame\r
150      * @param width width if new frame\r
151      * @param height height of new frame\r
152      */\r
153     public static void addFrame(final Frame frame, String title, int width,\r
154         int height)\r
155     {\r
156         frame.setLocation(lastFrameX, lastFrameY);\r
157         lastFrameX += 40;\r
158         lastFrameY += 40;\r
159         frame.setSize(width, height);\r
160         frame.setTitle(title);\r
161         frame.addWindowListener(new WindowAdapter()\r
162             {\r
163                 public void windowClosing(WindowEvent e)\r
164                 {\r
165                     if(currentAlignFrame == frame)\r
166                     {\r
167                       currentAlignFrame = null;\r
168                     }\r
169                     lastFrameX -=40;\r
170                     lastFrameY-=40;\r
171                     frame.setMenuBar(null);\r
172                     frame.dispose();\r
173                 }\r
174                 public void windowActivated(WindowEvent e)\r
175                 {\r
176                   if(frame instanceof AlignFrame)\r
177                     currentAlignFrame = (AlignFrame)frame;\r
178                 }\r
179 \r
180             });\r
181         frame.setVisible(true);\r
182     }\r
183 \r
184     public String getAlignment(String format)\r
185     {\r
186       return getAlignment(format, "true");\r
187     }\r
188 \r
189     public String getAlignment(String format, String suffix)\r
190     {\r
191       try\r
192       {\r
193         boolean seqlimits = suffix.equalsIgnoreCase("true");\r
194 \r
195         String reply = new AppletFormatAdapter().formatSequences(format,\r
196             currentAlignFrame.viewport.getAlignment().getSequences(), seqlimits);\r
197         return reply;\r
198       }\r
199       catch (Exception ex)\r
200       {\r
201         ex.printStackTrace();\r
202         return "Error retrieving alignment in " + format + " format. ";\r
203       }\r
204     }\r
205 \r
206     /**\r
207      * This paints the background surrounding the "Launch Jalview button"\r
208      * <br>\r
209      * <br>If file given in parameter not found, displays error message\r
210      *\r
211      * @param g graphics context\r
212      */\r
213     public void paint(Graphics g)\r
214     {\r
215         if (!fileFound)\r
216         {\r
217             g.setColor(new Color(200, 200, 200));\r
218             g.setColor(Color.cyan);\r
219             g.fillRect(0, 0, getSize().width, getSize().height);\r
220             g.setColor(Color.red);\r
221             g.drawString("Jalview can't open file", 5, 15);\r
222             g.drawString("\"" + file + "\"", 5, 30);\r
223         }\r
224         else if(embedded)\r
225         {\r
226           g.setColor(Color.black);\r
227           g.setFont(new Font("Arial", Font.BOLD, 24));\r
228           g.drawString("Jalview Applet", 50, this.size().height/2 -30);\r
229           g.drawString("Loading Data...", 50, this.size().height/2);\r
230         }\r
231 \r
232 \r
233     }\r
234 \r
235     class LoadingThread extends Thread\r
236     {\r
237         String file;\r
238         String protocol;\r
239         String format;\r
240         JalviewLite applet;\r
241 \r
242         public LoadingThread(String file,\r
243                              String protocol,\r
244                              JalviewLite applet)\r
245         {\r
246             this.file = file;\r
247             this.protocol = protocol;\r
248             format = jalview.io.IdentifyFile.Identify(file, "URL");\r
249             this.applet = applet;\r
250         }\r
251 \r
252         public void run()\r
253         {\r
254             SequenceI[] sequences = null;\r
255             try{\r
256               sequences = new AppletFormatAdapter().readFile(file, protocol,\r
257                   format);\r
258             }catch(java.io.IOException ex)\r
259             {\r
260               ex.printStackTrace();\r
261             }\r
262             if ((sequences != null) && (sequences.length > 0))\r
263             {\r
264               currentAlignFrame = new AlignFrame(new Alignment(sequences),\r
265                                                  applet, file);\r
266               if (embedded)\r
267                 currentAlignFrame.setEmbedded();\r
268 \r
269               currentAlignFrame.statusBar.setText("Successfully loaded file " + file);\r
270 \r
271 \r
272                 String treeFile = applet.getParameter("treeFile");\r
273                 if (treeFile != null)\r
274                 {\r
275                   if (treeFile.indexOf("://") == -1)\r
276                     treeFile = getCodeBase() + treeFile;\r
277 \r
278                   try\r
279                   {\r
280                     jalview.io.NewickFile fin = new jalview.io.NewickFile(treeFile, "URL");\r
281                     fin.parse();\r
282 \r
283                     if (fin.getTree() != null)\r
284                     {\r
285                       TreePanel tp = null;\r
286                       tp = new TreePanel(currentAlignFrame.viewport,\r
287                                          currentAlignFrame.viewport.getAlignment().getSequences(),\r
288                                          fin, "FromFile", treeFile);\r
289                       addFrame(tp, treeFile, 600, 500);\r
290                       currentAlignFrame.addTreeMenuItem(tp, treeFile);\r
291                     }\r
292                   }\r
293                   catch (Exception ex)\r
294                   {\r
295                     ex.printStackTrace();\r
296                   }\r
297               }\r
298 \r
299               String param = getParameter("features");\r
300               if (param != null)\r
301               {\r
302                 if (param.indexOf("://") == -1)\r
303                   param = getCodeBase() + param;\r
304 \r
305                 currentAlignFrame.parseFeaturesFile(param);\r
306               }\r
307 \r
308              param = getParameter("annotations");\r
309              if (param != null)\r
310              {\r
311                if (param.indexOf("://") == -1)\r
312                  param = getCodeBase() + param;\r
313 \r
314                new AnnotationReader().readAnnotationFile(\r
315                    currentAlignFrame.viewport.getAlignment(),\r
316                    param);\r
317 \r
318                currentAlignFrame.alignPanel.fontChanged();\r
319              }\r
320 \r
321 \r
322                 String pdbfile = applet.getParameter("PDBFILE");\r
323                 if(pdbfile!=null)\r
324                 {\r
325                   if(pdbfile.indexOf("://")==-1)\r
326                        pdbfile = getCodeBase() + pdbfile;\r
327 \r
328                   String sequence = applet.getParameter("PDBSEQ");\r
329 \r
330                   if(sequence!=null)\r
331                   {\r
332                     new MCview.AppletPDBViewer(pdbfile, "URL",\r
333                                                (Sequence)currentAlignFrame.getAlignViewport().getAlignment().findName(sequence),\r
334                                                currentAlignFrame.getSeqcanvas());\r
335                   }\r
336 \r
337                 }\r
338             }\r
339             else\r
340             {\r
341                 fileFound = false;\r
342                 remove(launcher);\r
343                 repaint();\r
344             }\r
345         }\r
346     }\r
347 }\r