X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FJalviewLite.java;h=09e87013484837b26038173afea1de51deac5861;hb=829c30f2ba9994a71e18db7dc652cbd11a9c8846;hp=35ebecc5d8e2a577f20d32ecb53be0c2ae301cd1;hpb=588042b69abf8e60bcc950b24c283933c7dd422f;p=jalview.git diff --git a/src/jalview/bin/JalviewLite.java b/src/jalview/bin/JalviewLite.java index 35ebecc..09e8701 100755 --- a/src/jalview/bin/JalviewLite.java +++ b/src/jalview/bin/JalviewLite.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer -* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle +* Copyright (C) 2006 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 @@ -30,66 +30,222 @@ import java.awt.*; import java.awt.event.*; -public class JalviewLite extends Applet { +/** + * 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; - static Applet applet; boolean fileFound = true; String file = "No file"; Button launcher = new Button("Start Jalview"); - public void init() { - applet = this; - this.setBackground(Color.white); + //The currentAlignFrame is static, it will change + //if and when the user selects a new window + public static AlignFrame currentAlignFrame; + + //This is the first frame to be displayed, and does not change + AlignFrame initialAlignFrame; + + 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 != null) { + if(file==null) + { + //Maybe the sequences are added as parameters + StringBuffer data = new StringBuffer("PASTE"); + int i=1; + while( (file=getParameter("sequence"+i))!=null) + { + data.append(file.toString()+"\n"); + i++; + } + if(data.length()>5) + file = data.toString(); + } + + final JalviewLite applet = this; + if(getParameter("embedded")!=null + && getParameter("embedded").equalsIgnoreCase("true")) + { + embedded = true; + LoadingThread loader = new LoadingThread(file, applet); + loader.start(); + } + else if (file != null) + { add(launcher); - file = applet.getCodeBase() + file; - launcher.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - String format = jalview.io.IdentifyFile.Identify(file, - "URL"); - LoadFile(file, "URL", format); - } + + launcher.addActionListener(new java.awt.event.ActionListener() + { + public void actionPerformed(ActionEvent e) + { + LoadingThread loader = new LoadingThread(file, + applet); + loader.start(); + } }); - } else { + } + else + { file = "NO FILE"; fileFound = false; } } - public static void showURL(String url) { - try { - applet.getAppletContext().showDocument(new java.net.URL(url), - "HELP_WINDOW"); - } catch (Exception ex) { - } - } - public void LoadFile(String file, String protocol, String format) { - LoadingThread loader = new LoadingThread(file, protocol, format, this); - loader.start(); + 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 = new jalview.io.IdentifyFile().Identify(args[0],AppletFormatAdapter.FILE); + + SequenceI[] sequences = null; + try{ + sequences = new AppletFormatAdapter().readFile(args[0], AppletFormatAdapter.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], false); + 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) { + 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) { + 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 void paint(Graphics g) { - if (!fileFound) { + public String getSelectedSequences() + { + StringBuffer result = new StringBuffer(""); + + if(initialAlignFrame.viewport.getSelectionGroup()!=null) + { + SequenceI[] seqs = initialAlignFrame.viewport.getSelectionGroup(). + getSequencesInOrder( + initialAlignFrame.viewport.getAlignment()); + + for (int i = 0; i < seqs.length; i++) + result.append(seqs[i].getName() + "¬"); + } + + return result.toString(); + } + + 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); @@ -97,37 +253,212 @@ public class JalviewLite extends Applet { 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 { + class LoadingThread extends Thread + { String file; String protocol; String format; - JalviewLite jlapplet; - - public LoadingThread(String file, String protocol, String format, - JalviewLite applet) { - this.file = file; - this.protocol = protocol; - this.format = format; - this.jlapplet = applet; + JalviewLite applet; + + public LoadingThread(String _file, + JalviewLite _applet) + { + file = _file; + if(file.startsWith("PASTE")) + { + file = file.substring(5); + protocol = AppletFormatAdapter.PASTE; + } + else if(inArchive(file)) + protocol = AppletFormatAdapter.CLASSLOADER; + else + { + file = addProtocol(file); + protocol = AppletFormatAdapter.URL; + } + format = new jalview.io.IdentifyFile().Identify(file, protocol); + applet = _applet; } - public void run() { + public void run() + { SequenceI[] sequences = null; - sequences = FormatAdapter.readFile(file, protocol, format); - - if ((sequences != null) && (sequences.length > 0)) { - AlignFrame af = new AlignFrame(new Alignment(sequences), - jlapplet); - addFrame(af, file, AlignFrame.NEW_WINDOW_WIDTH, - AlignFrame.NEW_WINDOW_HEIGHT); - af.statusBar.setText("Successfully loaded file " + file); - } else { + 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, + embedded); + + if(protocol==jalview.io.AppletFormatAdapter.PASTE) + currentAlignFrame.setTitle("Sequences from "+getDocumentBase()); + + initialAlignFrame = currentAlignFrame; + + currentAlignFrame.statusBar.setText("Successfully loaded file " + file); + + + String treeFile = applet.getParameter("tree"); + if(treeFile==null) + treeFile = applet.getParameter("treeFile"); + + if (treeFile != null) + { + try + { + if(inArchive(treeFile)) + protocol = AppletFormatAdapter.CLASSLOADER; + else + { + protocol = AppletFormatAdapter.URL; + treeFile = addProtocol(treeFile); + } + + jalview.io.NewickFile fin = new jalview.io.NewickFile(treeFile, protocol); + + fin.parse(); + + if (fin.getTree() != null) + { + currentAlignFrame.loadTree(fin, treeFile); + } + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + + String param = getParameter("features"); + if (param != null) + { + if( !inArchive(param) ) + param = addProtocol( param ); + + currentAlignFrame.parseFeaturesFile(param, protocol); + } + + param = getParameter("showFeatureSettings"); + if(param !=null && param.equalsIgnoreCase("true")) + { + currentAlignFrame.viewport.showSequenceFeatures(true); + currentAlignFrame.featureSettings_actionPerformed(); + } + + param = getParameter("annotations"); + if (param != null) + { + if( !inArchive(param) ) + param = addProtocol( param ); + + new AnnotationFile().readAnnotationFile( + currentAlignFrame.viewport.getAlignment(), + param); + + currentAlignFrame.alignPanel.fontChanged(); + currentAlignFrame.alignPanel.setScrollValues(0,0); + + } + + param = getParameter("jnetfile"); + if (param != null) + { + try + { + if (inArchive(param)) + protocol = AppletFormatAdapter.CLASSLOADER; + else + { + protocol = AppletFormatAdapter.URL; + param = addProtocol(param); + } + + jalview.io.JPredFile predictions = new jalview.io.JPredFile( + param, protocol); + new JnetAnnotationMaker().add_annotation(predictions, + currentAlignFrame.viewport.getAlignment(), + 0,false); // do not add sequence profile from concise output + currentAlignFrame.alignPanel.fontChanged(); + currentAlignFrame.alignPanel.setScrollValues(0, 0); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + + String pdbfile = applet.getParameter("PDBFILE"); + if(pdbfile!=null) + { + if( inArchive(pdbfile) ) + protocol = AppletFormatAdapter.CLASSLOADER; + else + { + protocol = AppletFormatAdapter.URL; + pdbfile = addProtocol(pdbfile); + } + + String sequence = applet.getParameter("PDBSEQ"); + + if(sequence!=null) + { + new MCview.AppletPDBViewer(pdbfile, protocol, + (Sequence)currentAlignFrame.getAlignViewport().getAlignment().findName(sequence), + currentAlignFrame.getSeqcanvas()); + } + + } + } + else + { fileFound = false; remove(launcher); repaint(); } } + + /** + * Discovers whether the given file is in the Applet Archive + * @param file String + * @return boolean + */ + boolean inArchive(String file) + { + //This might throw a security exception in certain browsers + //Netscape Communicator for instance. + try{ + return (getClass().getResourceAsStream("/" + file) != null); + }catch(Exception ex) + { + System.out.println("Exception checking resources: "+file+" "+ex); + return false; + } + } + + String addProtocol(String file) + { + if (file.indexOf("://") == -1) + file = getCodeBase() + file; + + return file; + } + } }