/* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package jalview.bin; import jalview.appletgui.AlignFrame; import jalview.datamodel.*; import jalview.io.*; import java.applet.*; import java.awt.*; import java.awt.event.*; import jalview.appletgui.TreePanel; /** * Jalview Applet. Runs in Java 1.18 runtime * * @author $author$ * @version $Revision$ */ public class JalviewLite extends Applet { static int lastFrameX = 200; static int lastFrameY = 200; boolean fileFound = true; String file = "No file"; Button launcher = new Button("Start Jalview"); static AlignFrame currentAlignFrame; boolean embedded = false; /** * init method for Jalview Applet */ public void init() { int r = 255; int g = 255; int b = 255; String param = getParameter("RGB"); if (param != null) { try { r = Integer.parseInt(param.substring(0, 2), 16); g = Integer.parseInt(param.substring(2, 4), 16); b = Integer.parseInt(param.substring(4, 6), 16); } catch (Exception ex) { r = 255; g = 255; b = 255; } } param = getParameter("label"); if(param != null) launcher.setLabel(param); this.setBackground(new Color(r, g, b)); file = getParameter("file"); if(file.indexOf("://")==-1) file = getCodeBase() + file; final JalviewLite applet = this; if(getParameter("embedded")!=null && getParameter("embedded").equalsIgnoreCase("true")) { embedded = true; LoadingThread loader = new LoadingThread(file, "URL", applet); loader.start(); } else if (file != null) { add(launcher); launcher.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { LoadingThread loader = new LoadingThread(file, "URL", applet); loader.start(); } }); } else { file = "NO FILE"; fileFound = false; } } public static void main(String [] args) { if(args.length!=1) { System.out.println("\nUsage: java -jar jalviewApplet.jar fileName\n"); System.exit(1); } String format = jalview.io.IdentifyFile.Identify(args[0],"File"); SequenceI[] sequences = null; try{ sequences = new AppletFormatAdapter().readFile(args[0], "File", format); }catch(java.io.IOException ex) { ex.printStackTrace(); } if ( (sequences != null) && (sequences.length > 0)) { AlignFrame af = new AlignFrame(new Alignment(sequences), null, args[0]); af.statusBar.setText("Successfully loaded file " + args[0]); } } /** * Initialises and displays a new java.awt.Frame * * @param frame java.awt.Frame to be displayed * @param title title of new frame * @param width width if new frame * @param height height of new frame */ public static void addFrame(final Frame frame, String title, int width, int height) { frame.setLocation(lastFrameX, lastFrameY); lastFrameX += 40; lastFrameY += 40; frame.setSize(width, height); frame.setTitle(title); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if(currentAlignFrame == frame) { currentAlignFrame = null; } lastFrameX -=40; lastFrameY-=40; frame.setMenuBar(null); frame.dispose(); } public void windowActivated(WindowEvent e) { if(frame instanceof AlignFrame) currentAlignFrame = (AlignFrame)frame; } }); frame.setVisible(true); } public String getAlignment(String format) { return getAlignment(format, "true"); } public String getAlignment(String format, String suffix) { try { boolean seqlimits = suffix.equalsIgnoreCase("true"); String reply = new AppletFormatAdapter().formatSequences(format, currentAlignFrame.viewport.getAlignment().getSequences(), seqlimits); return reply; } catch (Exception ex) { ex.printStackTrace(); return "Error retrieving alignment in " + format + " format. "; } } /** * This paints the background surrounding the "Launch Jalview button" *
*
If file given in parameter not found, displays error message * * @param g graphics context */ public void paint(Graphics g) { if (!fileFound) { g.setColor(new Color(200, 200, 200)); g.setColor(Color.cyan); g.fillRect(0, 0, getSize().width, getSize().height); g.setColor(Color.red); g.drawString("Jalview can't open file", 5, 15); g.drawString("\"" + file + "\"", 5, 30); } else if(embedded) { g.setColor(Color.black); g.setFont(new Font("Arial", Font.BOLD, 24)); g.drawString("Jalview Applet", 50, this.size().height/2 -30); g.drawString("Loading Data...", 50, this.size().height/2); } } class LoadingThread extends Thread { String file; String protocol; String format; JalviewLite applet; public LoadingThread(String file, String protocol, JalviewLite applet) { this.file = file; this.protocol = protocol; format = jalview.io.IdentifyFile.Identify(file, "URL"); this.applet = applet; } public void run() { SequenceI[] sequences = null; try{ sequences = new AppletFormatAdapter().readFile(file, protocol, format); }catch(java.io.IOException ex) { ex.printStackTrace(); } if ((sequences != null) && (sequences.length > 0)) { currentAlignFrame = new AlignFrame(new Alignment(sequences), applet, file); if (embedded) currentAlignFrame.setEmbedded(); currentAlignFrame.statusBar.setText("Successfully loaded file " + file); String treeFile = applet.getParameter("treeFile"); if (treeFile != null) { if (treeFile.indexOf("://") == -1) treeFile = getCodeBase() + treeFile; try { jalview.io.NewickFile fin = new jalview.io.NewickFile(treeFile, "URL"); fin.parse(); if (fin.getTree() != null) { TreePanel tp = null; tp = new TreePanel(currentAlignFrame.viewport, currentAlignFrame.viewport.getAlignment().getSequences(), fin, "FromFile", treeFile); addFrame(tp, treeFile, 600, 500); currentAlignFrame.addTreeMenuItem(tp, treeFile); } } catch (Exception ex) { ex.printStackTrace(); } } String param = getParameter("features"); if (param != null) { if (param.indexOf("://") == -1) param = getCodeBase() + param; currentAlignFrame.parseFeaturesFile(param); } param = getParameter("annotations"); if (param != null) { if (param.indexOf("://") == -1) param = getCodeBase() + param; new AnnotationReader().readAnnotationFile( currentAlignFrame.viewport.getAlignment(), param); currentAlignFrame.alignPanel.fontChanged(); } String pdbfile = applet.getParameter("PDBFILE"); if(pdbfile!=null) { if(pdbfile.indexOf("://")==-1) pdbfile = getCodeBase() + pdbfile; String sequence = applet.getParameter("PDBSEQ"); if(sequence!=null) { new MCview.AppletPDBViewer(pdbfile, "URL", (Sequence)currentAlignFrame.getAlignViewport().getAlignment().findName(sequence), currentAlignFrame.getSeqcanvas()); } } } else { fileFound = false; remove(launcher); repaint(); } } } }