X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FJalviewLite.java;h=338b319e049bc9a63d7d2306d3b596f15aead7cc;hb=cdec8957d4dfd65ec894e9a51bc01b079bf3f7af;hp=9a09df4202c457fc826c7bfc6a52cb6c14263165;hpb=970bedebd2260e55bd1e584ee511d5e3990a5ce5;p=jalview.git diff --git a/src/jalview/bin/JalviewLite.java b/src/jalview/bin/JalviewLite.java index 9a09df4..338b319 100755 --- a/src/jalview/bin/JalviewLite.java +++ b/src/jalview/bin/JalviewLite.java @@ -1,20 +1,19 @@ /* - * 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.5) + * 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; @@ -22,8 +21,11 @@ import java.applet.*; import java.awt.*; import java.awt.event.*; +import java.io.BufferedReader; +import java.io.InputStreamReader; import java.util.*; +import jalview.api.SequenceStructureBinding; import jalview.appletgui.*; import jalview.datamodel.*; import jalview.io.*; @@ -51,7 +53,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 +64,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 +77,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 +109,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 +128,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 +252,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 @@ -294,28 +297,80 @@ 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; + 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 +379,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 +505,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 +559,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 +578,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 +602,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 +638,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() @@ -599,8 +664,11 @@ public class JalviewLite extends Applet * State variable: format of file source */ String format; + String _file; + JalviewLite applet; + private void dbgMsg(String msg) { if (applet.debug) @@ -635,10 +703,10 @@ public class JalviewLite extends Applet dbgMsg("Protocol identified as '" + protocol + "'"); return file; } - + public LoadingThread(String _file, JalviewLite _applet) { - this._file=_file; + this._file = _file; applet = _applet; } @@ -649,13 +717,20 @@ 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); @@ -670,21 +745,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) @@ -709,7 +807,7 @@ public class JalviewLite extends Applet if (fin.getTree() != null) { - currentAlignFrame.loadTree(fin, treeFile); + newAlignFrame.loadTree(fin, treeFile); dbgMsg("Successfuly imported tree."); } else @@ -727,14 +825,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"); @@ -743,11 +841,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 { @@ -767,7 +864,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 @@ -775,8 +872,8 @@ 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(); @@ -815,7 +912,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) }; } @@ -835,9 +932,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()]; @@ -889,13 +985,13 @@ public class JalviewLite extends Applet if (jmolAvailable) { new jalview.appletgui.AppletJmol(pdb, seqs, chains, - currentAlignFrame.alignPanel, protocol); + newAlignFrame.alignPanel, protocol); lastFrameX += 40; lastFrameY += 40; } else new MCview.AppletPDBViewer(pdb, seqs, chains, - currentAlignFrame.alignPanel, protocol); + newAlignFrame.alignPanel, protocol); } } @@ -909,13 +1005,13 @@ public class JalviewLite extends Applet param = getParameter("hidefeaturegroups"); if (param != null) { - applet.setFeatureGroupState(param, false); + applet.setFeatureGroupStateOn(newAlignFrame, param, false); } // show specific groups param = getParameter("showfeaturegroups"); if (param != null) { - applet.setFeatureGroupState(param, true); + applet.setFeatureGroupStateOn(newAlignFrame, param, true); } } else @@ -930,7 +1026,7 @@ public class JalviewLite extends Applet * Discovers whether the given file is in the Applet Archive * * @param file - * String + * String * @return boolean */ boolean inArchive(String file) @@ -1098,7 +1194,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() */ @@ -1121,7 +1217,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) @@ -1133,9 +1229,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) */ @@ -1166,10 +1262,83 @@ 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) + { + System.err.println("addPdbFile not yet implemented."); + return true; + } + /** + * bind the viewer instance to the pdbFile associated with sequences in the given alFrame. + * @param alFrame + * @param pdbFile - pdbFile URI as given via applet's parameters or by addPdb + * @param viewer + * @return binding for viewer + * TODO: consider making an exception structure for indicating when binding fails + */ + public SequenceStructureBinding addJmolInstance(AlignFrame alFrame, String pdbFile, org.jmol.api.JmolViewer viewer) + { + System.err.println("addJmolInstance not yet implemented."); + /** + */ + return null; + } + /** + * bind structures in a viewer to any matching sequences in an alignFrame (use seuqenceIds to limit scope of search to specific sequences) + * @param alFrame + * @param viewer + * @param sequenceIds + * @return + */ + public SequenceStructureBinding addJmolInstance(AlignFrame alFrame, org.jmol.api.JmolViewer viewer, String sequenceIds) + { + if (viewer!=null) + { + if (sequenceIds!=null && sequenceIds.length()>0) + { + return alFrame.addJmolInstance(viewer, separatorListToArray(sequenceIds)); + } else { + return alFrame.addJmolInstance(viewer, null); + } + } + return null; + } }