X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FJalviewLite.java;h=157c22bf6615bd9c42448f62b8af31eea26ff359;hb=153dd62dc91da13ae732600e6ea55ddbe15eab39;hp=9226dc451ad03fe4c68c34a35b127e683d4aec52;hpb=221f8d1d2054a4582dd3a4ca52f7708fccdf053c;p=jalview.git diff --git a/src/jalview/bin/JalviewLite.java b/src/jalview/bin/JalviewLite.java index 9226dc4..157c22b 100755 --- a/src/jalview/bin/JalviewLite.java +++ b/src/jalview/bin/JalviewLite.java @@ -1,32 +1,53 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) + * Copyright (C) 2010 J Procter, AM Waterhouse, 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 file is part of Jalview. * - * 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. + * Jalview 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 3 of the License, or (at your option) any later version. * - * 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 + * Jalview 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 Jalview. If not, see . */ package jalview.bin; -import java.applet.*; - -import java.awt.*; -import java.awt.event.*; -import java.util.*; - -import jalview.appletgui.*; -import jalview.datamodel.*; -import jalview.io.*; +import jalview.api.SequenceStructureBinding; +import jalview.appletgui.AlignFrame; +import jalview.appletgui.AppletJmol; +import jalview.appletgui.EmbmenuFrame; +import jalview.appletgui.FeatureSettings; +import jalview.datamodel.Alignment; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceI; +import jalview.io.AnnotationFile; +import jalview.io.AppletFormatAdapter; +import jalview.io.FileParse; +import jalview.io.IdentifyFile; +import jalview.io.JnetAnnotationMaker; + +import java.applet.Applet; +import java.awt.Button; +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.event.ActionEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.lang.reflect.Method; +import java.util.Enumeration; +import java.util.StringTokenizer; +import java.util.Vector; /** * Jalview Applet. Runs in Java 1.18 runtime @@ -51,7 +72,7 @@ public class JalviewLite extends Applet /** * @param sep - * separator string or null for default + * separator string or null for default * @return String list of selected sequence IDs, each terminated by sep or * ("¬" as default) */ @@ -62,7 +83,7 @@ public class JalviewLite extends Applet /** * @param alf - * alignframe containing selection + * alignframe containing selection * @return String list of selected sequence IDs, each terminated by "¬" * */ @@ -75,9 +96,9 @@ public class JalviewLite extends Applet * get list of selected sequence IDs separated by given separator * * @param alf - * window containing selection + * window containing selection * @param sep - * separator string to use - default is "¬" + * separator string to use - default is "¬" * @return String list of selected sequence IDs, each terminated by the given * separator */ @@ -107,12 +128,12 @@ public class JalviewLite extends Applet * get sequences selected in current alignFrame and return their alignment in * format 'format' either with or without suffix * - * @param alf - - * where selection is - * @param format - - * format of alignment file - * @param suffix - - * "true" to append /start-end string to each sequence ID + * @param alf + * - where selection is + * @param format + * - format of alignment file + * @param suffix + * - "true" to append /start-end string to each sequence ID * @return selected sequences as flat file or empty string if there was no * current selection */ @@ -126,12 +147,12 @@ public class JalviewLite extends Applet * get sequences selected in alf and return their alignment in format 'format' * either with or without suffix * - * @param alf - - * where selection is - * @param format - - * format of alignment file - * @param suffix - - * "true" to append /start-end string to each sequence ID + * @param alf + * - where selection is + * @param format + * - format of alignment file + * @param suffix + * - "true" to append /start-end string to each sequence ID * @return selected sequences as flat file or empty string if there was no * current selection */ @@ -250,14 +271,15 @@ public class JalviewLite extends Applet /** * * @param text - * alignment file as a string + * alignment file as a string * @param title - * window title + * window title * @return null or new alignment frame */ public AlignFrame loadAlignment(String text, String title) { Alignment al = null; + String format = new IdentifyFile().Identify(text, AppletFormatAdapter.PASTE); try @@ -278,9 +300,9 @@ public class JalviewLite extends Applet // ////////////////////////////////////////////// // ////////////////////////////////////////////// - static int lastFrameX = 200; + public static int lastFrameX = 200; - static int lastFrameY = 200; + public static int lastFrameY = 200; boolean fileFound = true; @@ -294,28 +316,82 @@ public class JalviewLite extends Applet * AlignFrame if the applet is started as embedded on the page and then * afterwards a new view is created. */ - public static AlignFrame currentAlignFrame; + public static AlignFrame currentAlignFrame = null; /** * This is the first frame to be displayed, and does not change. API calls * will default to this instance if currentAlignFrame is null. */ - AlignFrame initialAlignFrame; + AlignFrame initialAlignFrame = null; boolean embedded = false; private boolean checkForJmol = true; - private boolean checkedForJmol = false; // ensure we don't check for jmol every time the app is re-inited + + private boolean checkedForJmol = false; // ensure we don't check for jmol + + // every time the app is re-inited public boolean jmolAvailable = false; - public static boolean debug; + private boolean alignPdbStructures=false; + + public static boolean debug = false; + + static String builddate = null, version = null; + + private static void initBuildDetails() + { + if (builddate == null) + { + builddate = "unknown"; + version = "test"; + java.net.URL url = JalviewLite.class + .getResource("/.build_properties"); + if (url != null) + { + try + { + BufferedReader reader = new BufferedReader(new InputStreamReader( + url.openStream())); + String line; + while ((line = reader.readLine()) != null) + { + if (line.indexOf("VERSION") > -1) + { + version = line.substring(line.indexOf("=") + 1); + } + if (line.indexOf("BUILD_DATE") > -1) + { + builddate = line.substring(line.indexOf("=") + 1); + } + } + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + } + } + + public static String getBuildDate() + { + initBuildDetails(); + return builddate; + } + + public static String getVersion() + { + initBuildDetails(); + return version; + } /** * init method for Jalview Applet */ public void init() { + /** * turn on extra applet debugging */ @@ -324,6 +400,13 @@ public class JalviewLite extends Applet { debug = dbg.toLowerCase().equals("true"); } + if (debug) + { + + System.err.println("JalviewLite Version " + getVersion()); + System.err.println("Build Date : " + getBuildDate()); + + } /** * if true disable the check for jmol */ @@ -443,13 +526,13 @@ public class JalviewLite extends Applet * Initialises and displays a new java.awt.Frame * * @param frame - * java.awt.Frame to be displayed + * java.awt.Frame to be displayed * @param title - * title of new frame + * title of new frame * @param width - * width if new frame + * width if new frame * @param height - * height of new frame + * height of new frame */ public static void addFrame(final Frame frame, String title, int width, int height) @@ -497,7 +580,9 @@ public class JalviewLite extends Applet /* * Probably not necessary to do this - see TODO above. (non-Javadoc) * - * @see java.awt.event.WindowAdapter#windowDeactivated(java.awt.event.WindowEvent) + * @see + * java.awt.event.WindowAdapter#windowDeactivated(java.awt.event.WindowEvent + * ) * * public void windowDeactivated(WindowEvent e) { if (currentAlignFrame == * frame) { currentAlignFrame = null; if (debug) { @@ -514,7 +599,7 @@ public class JalviewLite extends Applet * If file given in parameter not found, displays error message * * @param g - * graphics context + * graphics context */ public void paint(Graphics g) { @@ -538,14 +623,15 @@ public class JalviewLite extends Applet class LoadJmolThread extends Thread { - private boolean running=false; + private boolean running = false; public void run() { - if (running || checkedForJmol) { + if (running || checkedForJmol) + { return; } - running=true; + running = true; if (checkForJmol) { try @@ -573,8 +659,8 @@ public class JalviewLite extends Applet .println("Skipping Jmol check. Will use MCView (probably)"); } } - checkedForJmol=true; - running=false; + checkedForJmol = true; + running = false; } public boolean notFinished() @@ -600,7 +686,10 @@ public class JalviewLite extends Applet */ String format; + String _file; + JalviewLite applet; + private void dbgMsg(String msg) { if (applet.debug) @@ -638,11 +727,7 @@ public class JalviewLite extends Applet public LoadingThread(String _file, JalviewLite _applet) { - dbgMsg("Loading thread started with:\n>>file\n" + _file + ">>endfile"); - file = setProtocolState(_file); - - format = new jalview.io.IdentifyFile().Identify(file, protocol); - dbgMsg("File identified as '" + format + "'"); + this._file = _file; applet = _applet; } @@ -653,13 +738,25 @@ public class JalviewLite extends Applet while (jmolchecker.notFinished()) { // wait around until the Jmol check is complete. - try { Thread.sleep(2); } catch (Exception e) {}; + try + { + Thread.sleep(2); + } catch (Exception e) + { + } + ; } startLoading(); } private void startLoading() { + AlignFrame newAlignFrame; + dbgMsg("Loading thread started with:\n>>file\n" + _file + ">>endfile"); + file = setProtocolState(_file); + + format = new jalview.io.IdentifyFile().Identify(file, protocol); + dbgMsg("File identified as '" + format + "'"); dbgMsg("Loading started."); Alignment al = null; try @@ -669,21 +766,44 @@ public class JalviewLite extends Applet { dbgMsg("File load exception."); ex.printStackTrace(); + if (debug) + { + try + { + FileParse fp = new FileParse(file, protocol); + String ln = null; + dbgMsg(">>>Dumping contents of '" + file + "' " + "(" + + protocol + ")"); + while ((ln = fp.nextLine()) != null) + { + dbgMsg(ln); + } + dbgMsg(">>>Dump finished."); + } catch (Exception e) + { + System.err + .println("Exception when trying to dump the content of the file parameter."); + e.printStackTrace(); + } + } } if ((al != null) && (al.getHeight() > 0)) { dbgMsg("Successfully loaded file."); - initialAlignFrame = new AlignFrame(al, applet, file, embedded); + newAlignFrame = new AlignFrame(al, applet, file, embedded); + if (initialAlignFrame == null) + { + initialAlignFrame = newAlignFrame; + } // update the focus. - currentAlignFrame = initialAlignFrame; + currentAlignFrame = newAlignFrame; if (protocol == jalview.io.AppletFormatAdapter.PASTE) { - currentAlignFrame.setTitle("Sequences from " + getDocumentBase()); + newAlignFrame.setTitle("Sequences from " + getDocumentBase()); } - currentAlignFrame.statusBar.setText("Successfully loaded file " - + file); + newAlignFrame.statusBar.setText("Successfully loaded file " + file); String treeFile = applet.getParameter("tree"); if (treeFile == null) @@ -708,7 +828,7 @@ public class JalviewLite extends Applet if (fin.getTree() != null) { - currentAlignFrame.loadTree(fin, treeFile); + newAlignFrame.loadTree(fin, treeFile); dbgMsg("Successfuly imported tree."); } else @@ -726,14 +846,14 @@ public class JalviewLite extends Applet { param = setProtocolState(param); - currentAlignFrame.parseFeaturesFile(param, protocol); + newAlignFrame.parseFeaturesFile(param, protocol); } param = getParameter("showFeatureSettings"); if (param != null && param.equalsIgnoreCase("true")) { - currentAlignFrame.viewport.showSequenceFeatures(true); - new FeatureSettings(currentAlignFrame.alignPanel); + newAlignFrame.viewport.showSequenceFeatures(true); + new FeatureSettings(newAlignFrame.alignPanel); } param = getParameter("annotations"); @@ -742,11 +862,10 @@ public class JalviewLite extends Applet param = setProtocolState(param); if (new AnnotationFile().readAnnotationFile( - currentAlignFrame.viewport.getAlignment(), param, - protocol)) + newAlignFrame.viewport.getAlignment(), param, protocol)) { - currentAlignFrame.alignPanel.fontChanged(); - currentAlignFrame.alignPanel.setScrollValues(0, 0); + newAlignFrame.alignPanel.fontChanged(); + newAlignFrame.alignPanel.setScrollValues(0, 0); } else { @@ -766,7 +885,7 @@ public class JalviewLite extends Applet jalview.io.JPredFile predictions = new jalview.io.JPredFile( param, protocol); JnetAnnotationMaker.add_annotation(predictions, - currentAlignFrame.viewport.getAlignment(), 0, false); // false==do + newAlignFrame.viewport.getAlignment(), 0, false); // false==do // not // add // sequence @@ -774,14 +893,18 @@ public class JalviewLite extends Applet // from // concise // output - currentAlignFrame.alignPanel.fontChanged(); - currentAlignFrame.alignPanel.setScrollValues(0, 0); + newAlignFrame.alignPanel.fontChanged(); + newAlignFrame.alignPanel.setScrollValues(0, 0); } catch (Exception ex) { ex.printStackTrace(); } } - + /* + * + * Undocumented for 2.6 - related to JAL-434 + */ + applet.setAlignPdbStructures(getDefaultParameter("alignpdbfiles",false)); /* * @@ -790,8 +913,10 @@ public class JalviewLite extends Applet * * */ - + int pdbFileCount = 0; + // Accumulate pdbs here if they are heading for the same view (if alignPdbStructures is true) + Vector pdbs=new Vector(); do { if (pdbFileCount > 0) @@ -814,7 +939,7 @@ public class JalviewLite extends Applet String sequence = applet.getParameter("PDBSEQ"); if (sequence != null) seqs = new SequenceI[] - { (Sequence) currentAlignFrame.getAlignViewport() + { (Sequence) newAlignFrame.getAlignViewport() .getAlignment().findName(sequence) }; } @@ -834,9 +959,8 @@ public class JalviewLite extends Applet tmp2.addElement(st2.nextToken()); seqstring = st2.nextToken(); } - tmp.addElement((Sequence) currentAlignFrame - .getAlignViewport().getAlignment().findName( - seqstring)); + tmp.addElement((Sequence) newAlignFrame.getAlignViewport() + .getAlignment().findName(seqstring)); } seqs = new SequenceI[tmp.size()]; @@ -859,7 +983,7 @@ public class JalviewLite extends Applet // the local pdb file was identified in the class loader protocol = AppletFormatAdapter.URL; // this is probably NOT // CORRECT! - param = addProtocol(param); // + param = addProtocol(param); // } pdb.setFile(param); @@ -884,23 +1008,35 @@ public class JalviewLite extends Applet } } } - - if (jmolAvailable) - { - new jalview.appletgui.AppletJmol(pdb, seqs, chains, - currentAlignFrame.alignPanel, protocol); - lastFrameX += 40; - lastFrameY += 40; + + if (!alignPdbStructures) { + newAlignFrame.newStructureView(applet, pdb, seqs, chains, + protocol); + } else { + pdbs.addElement(new Object[] { pdb, seqs, chains, new String(protocol)}); } - else - new MCview.AppletPDBViewer(pdb, seqs, chains, - currentAlignFrame.alignPanel, protocol); } } pdbFileCount++; } while (pdbFileCount < 10); - + if (pdbs.size()>0) + { + SequenceI[][] seqs = new SequenceI[pdbs.size()][]; + PDBEntry[] pdb = new PDBEntry[pdbs.size()]; + String[][] chains = new String[pdbs.size()][]; + String[] protocols = new String[pdbs.size()]; + for (int pdbsi=0,pdbsiSize=pdbs.size(); pdbsi0) { for (int i = 0, iSize = list.length - 1; i < iSize; i++) { @@ -1097,7 +1233,7 @@ public class JalviewLite extends Applet /** * @param alf - * alignframe to get feature groups on + * alignframe to get feature groups on * @return * @see jalview.appletgui.AlignFrame#getFeatureGroups() */ @@ -1120,7 +1256,7 @@ public class JalviewLite extends Applet /** * @param alf - * align frame to get groups of state visible + * align frame to get groups of state visible * @param visible * @return * @see jalview.appletgui.AlignFrame#getFeatureGroupsOfState(boolean) @@ -1132,9 +1268,9 @@ public class JalviewLite extends Applet /** * @param groups - * tab separated list of group names + * tab separated list of group names * @param state - * true or false + * true or false * @see jalview.appletgui.AlignFrame#setFeatureGroupState(java.lang.String[], * boolean) */ @@ -1165,10 +1301,114 @@ public class JalviewLite extends Applet * List separator string * * @param separator - * the separator to set + * the separator to set */ public void setSeparator(String separator) { this.separator = separator; } + + /** + * get boolean value of applet parameter 'name' and return default if + * parameter is not set + * + * @param name + * name of paremeter + * @param def + * the value to return otherwise + * @return true or false + */ + public boolean getDefaultParameter(String name, boolean def) + { + String stn; + if ((stn = getParameter(name)) == null) + { + return def; + } + if (stn.toLowerCase().equals("true")) + { + return true; + } + return false; + } + + /** + * bind a pdb file to a sequence in the given alignFrame. + * + * @param alFrame + * - null or specific alignFrame. This specifies the dataset that + * will be searched for a seuqence called sequenceId + * @param sequenceId + * - sequenceId within the dataset. + * @param pdbEntryString + * - the short name for the PDB file + * @param pdbFile + * - pdb file - either a URL or a valid PDB file. + * @return true if binding was as success TODO: consider making an exception + * structure for indicating when PDB parsing or seqeunceId location + * fails. + */ + public boolean addPdbFile(AlignFrame alFrame, String sequenceId, + String pdbEntryString, String pdbFile) + { + return alFrame.addPdbFile(sequenceId, pdbEntryString, pdbFile); + } + + protected void setAlignPdbStructures(boolean alignPdbStructures) + { + this.alignPdbStructures = alignPdbStructures; + } + + public boolean isAlignPdbStructures() + { + return alignPdbStructures; + } + + /** + * get all components associated with the applet of the given type + * @param class1 + * @return + */ + public Vector getAppletWindow(Class class1) + { + Vector wnds = new Vector(); + Component[] cmp = getComponents(); + if (cmp!=null) + { + for (int i=0;i 0) + { + return alFrame.addStructureViewInstance(viewer, + separatorListToArray(sequenceIds)); + } + else + { + return alFrame.addStructureViewInstance(viewer, null); + } + // return null; + } + */ }