X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FJalviewLite.java;h=7329a6f4f456eb49cbf5c087eb628d6c2ac87030;hb=2de8acfae59aced665e4c37ad0f7dcc2ed68818e;hp=a1f9e8e96f4fda1d255cc820f0606be8a7066595;hpb=040334e09c24e394675f14937c0d8f6a32742b6a;p=jalview.git diff --git a/src/jalview/bin/JalviewLite.java b/src/jalview/bin/JalviewLite.java index a1f9e8e..7329a6f 100755 --- a/src/jalview/bin/JalviewLite.java +++ b/src/jalview/bin/JalviewLite.java @@ -1,17 +1,17 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * + * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) + * Copyright (C) 2009 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 @@ -30,68 +30,158 @@ import jalview.io.*; /** * Jalview Applet. Runs in Java 1.18 runtime - * + * * @author $author$ * @version $Revision$ */ -public class JalviewLite - extends Applet +public class JalviewLite extends Applet { - - - /////////////////////////////////////////// - //The following public methods maybe called - //externally, eg via javascript in HTML page + // ///////////////////////////////////////// + // The following public methods maybe called + // externally, eg via javascript in HTML page /** - * @return list of selected sequences separated by "¬" + * @return String list of selected sequence IDs, each terminated by "¬" + * (¬) */ public String getSelectedSequences() { return getSelectedSequencesFrom(getDefaultTargetFrame()); } + + /** + * @param sep + * separator string or null for default + * @return String list of selected sequence IDs, each terminated by sep or + * ("¬" as default) + */ + public String getSelectedSequences(String sep) + { + return getSelectedSequencesFrom(getDefaultTargetFrame(), sep); + } + + /** + * @param alf + * alignframe containing selection + * @return String list of selected sequence IDs, each terminated by "¬" + * + */ public String getSelectedSequencesFrom(AlignFrame alf) { - StringBuffer result = new StringBuffer(""); + return getSelectedSequencesFrom(alf, "¬"); + } + /** + * get list of selected sequence IDs separated by given separator + * + * @param alf + * window containing selection + * @param sep + * separator string to use - default is "¬" + * @return String list of selected sequence IDs, each terminated by the given + * separator + */ + public String getSelectedSequencesFrom(AlignFrame alf, String sep) + { + StringBuffer result = new StringBuffer(""); + if (sep == null || sep.length() == 0) + { + sep = "¬"; + } if (alf.viewport.getSelectionGroup() != null) { - SequenceI[] seqs = alf.viewport.getSelectionGroup(). - getSequencesInOrder( - alf.viewport.getAlignment()); + SequenceI[] seqs = alf.viewport.getSelectionGroup() + .getSequencesInOrder(alf.viewport.getAlignment()); for (int i = 0; i < seqs.length; i++) { - result.append(seqs[i].getName() + "¬"); + result.append(seqs[i].getName()); + result.append(sep); } } return result.toString(); } - + + /** + * 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 + * @return selected sequences as flat file or empty string if there was no + * current selection + */ + public String getSelectedSequencesAsAlignment(String format, String suffix) + { + return getSelectedSequencesAsAlignmentFrom(currentAlignFrame, format, + suffix); + } + + /** + * 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 + * @return selected sequences as flat file or empty string if there was no + * current selection + */ + public String getSelectedSequencesAsAlignmentFrom(AlignFrame alf, + String format, String suffix) + { + try + { + boolean seqlimits = suffix.equalsIgnoreCase("true"); + if (alf.viewport.getSelectionGroup() != null) + { + String reply = new AppletFormatAdapter().formatSequences(format, + new Alignment(alf.viewport.getSelectionAsNewSequence()), + seqlimits); + return reply; + } + } catch (Exception ex) + { + ex.printStackTrace(); + return "Error retrieving alignment in " + format + " format. "; + } + return ""; + } + public String getAlignment(String format) { return getAlignmentFrom(getDefaultTargetFrame(), format, "true"); } + public String getAlignmentFrom(AlignFrame alf, String format) { return getAlignmentFrom(alf, format, "true"); } + public String getAlignment(String format, String suffix) { return getAlignmentFrom(getDefaultTargetFrame(), format, suffix); } - public String getAlignmentFrom(AlignFrame alf, String format, String suffix) + + public String getAlignmentFrom(AlignFrame alf, String format, + String suffix) { try { boolean seqlimits = suffix.equalsIgnoreCase("true"); String reply = new AppletFormatAdapter().formatSequences(format, - alf.viewport.getAlignment(), seqlimits); + alf.viewport.getAlignment(), seqlimits); return reply; - } - catch (Exception ex) + } catch (Exception ex) { ex.printStackTrace(); return "Error retrieving alignment in " + format + " format. "; @@ -102,11 +192,11 @@ public class JalviewLite { loadAnnotationFrom(getDefaultTargetFrame(), annotation); } + public void loadAnnotationFrom(AlignFrame alf, String annotation) { - if (new AnnotationFile().readAnnotationFile( - alf.getAlignViewport().getAlignment(), annotation, - AppletFormatAdapter.PASTE)) + if (new AnnotationFile().readAnnotationFile(alf.getAlignViewport() + .getAlignment(), annotation, AppletFormatAdapter.PASTE)) { alf.alignPanel.fontChanged(); alf.alignPanel.setScrollValues(0, 0); @@ -121,22 +211,27 @@ public class JalviewLite { return getFeaturesFrom(getDefaultTargetFrame(), format); } + public String getFeaturesFrom(AlignFrame alf, String format) { return alf.outputFeatures(false, format); } + public String getAnnotation() { return getAnnotationFrom(getDefaultTargetFrame()); } + public String getAnnotationFrom(AlignFrame alf) { return alf.outputAnnotations(false); } + public AlignFrame newView() { return newViewFrom(getDefaultTargetFrame()); } + public AlignFrame newView(String name) { return newViewFrom(getDefaultTargetFrame(), name); @@ -146,65 +241,75 @@ public class JalviewLite { return alf.newView(null); } + public AlignFrame newViewFrom(AlignFrame alf, String name) { return alf.newView(name); } + /** * - * @param text alignment file as a string - * @param title window title + * @param text + * alignment file as a string + * @param 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); + + String format = new IdentifyFile().Identify(text, + AppletFormatAdapter.PASTE); try { al = new AppletFormatAdapter().readFile(text, - AppletFormatAdapter.PASTE, - format); + AppletFormatAdapter.PASTE, format); if (al.getHeight() > 0) { return new AlignFrame(al, this, title, false); } - } - catch (java.io.IOException ex) + } catch (java.io.IOException ex) { ex.printStackTrace(); } return null; } - //////////////////////////////////////////////// - //////////////////////////////////////////////// - - + // ////////////////////////////////////////////// + // ////////////////////////////////////////////// static int lastFrameX = 200; + static int lastFrameY = 200; + boolean fileFound = true; + String file = "No file"; + Button launcher = new Button("Start Jalview"); /** - * The currentAlignFrame is static, it will change - * if and when the user selects a new window. - * Note that it will *never* point back to the embedded AlignFrame - * if the applet is started as embedded on the page and then afterwards a new view is created. + * The currentAlignFrame is static, it will change if and when the user + * selects a new window. Note that it will *never* point back to the embedded + * AlignFrame if the applet is started as embedded on the page and then + * afterwards a new view is created. */ public static AlignFrame currentAlignFrame; - /** - * This is the first frame to be displayed, and does not change. - * API calls will default to this instance if currentAlignFrame is 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; 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 + public boolean jmolAvailable = false; + public static boolean debug; /** @@ -212,25 +317,40 @@ public class JalviewLite */ public void init() { + /** + * turn on extra applet debugging + */ String dbg = getParameter("debug"); - if (dbg!=null) + if (dbg != null) { debug = dbg.toLowerCase().equals("true"); } /** + * if true disable the check for jmol + */ + String chkforJmol = getParameter("nojmol"); + if (chkforJmol != null) + { + checkForJmol = !chkforJmol.equals("true"); + } + /** * get the separator parameter if present */ String sep = getParameter("separator"); - if (sep!=null) + if (sep != null) { - if (sep.length()>0) - { separator = sep; + if (sep.length() > 0) + { + separator = sep; if (debug) { - System.err.println("Separator set to '"+separator+"'"); + System.err.println("Separator set to '" + separator + "'"); } - } else { - throw new Error("Invalid separator parameter - must be non-zero length"); + } + else + { + throw new Error( + "Invalid separator parameter - must be non-zero length"); } } int r = 255; @@ -245,8 +365,7 @@ public class JalviewLite 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) + } catch (Exception ex) { r = 255; g = 255; @@ -266,10 +385,10 @@ public class JalviewLite if (file == null) { - //Maybe the sequences are added as parameters + // Maybe the sequences are added as parameters StringBuffer data = new StringBuffer("PASTE"); int i = 1; - while ( (file = getParameter("sequence" + i)) != null) + while ((file = getParameter("sequence" + i)) != null) { data.append(file.toString() + "\n"); i++; @@ -280,49 +399,61 @@ public class JalviewLite } } - LoadJmolThread jmolAvailable = new LoadJmolThread(); - jmolAvailable.start(); - final JalviewLite applet = this; if (getParameter("embedded") != null - && getParameter("embedded").equalsIgnoreCase("true")) + && getParameter("embedded").equalsIgnoreCase("true")) { + // Launch as embedded applet in page embedded = true; LoadingThread loader = new LoadingThread(file, applet); loader.start(); } else if (file != null) { - add(launcher); - - launcher.addActionListener(new java.awt.event.ActionListener() + if (getParameter("showbutton") == null + || !getParameter("showbutton").equalsIgnoreCase("false")) { - public void actionPerformed(ActionEvent e) + // Add the JalviewLite 'Button' to the page + add(launcher); + launcher.addActionListener(new java.awt.event.ActionListener() { - LoadingThread loader = new LoadingThread(file, - applet); - loader.start(); - } - }); + public void actionPerformed(ActionEvent e) + { + LoadingThread loader = new LoadingThread(file, applet); + loader.start(); + } + }); + } + else + { + // Open jalviewLite immediately. + LoadingThread loader = new LoadingThread(file, applet); + loader.start(); + } } else { + // jalview initialisation with no alignment. loadAlignment() method can + // still be called to open new alignments. file = "NO FILE"; fileFound = false; } } - /** * 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 + * + * @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; @@ -335,7 +466,7 @@ public class JalviewLite { if (frame instanceof AlignFrame) { - ( (AlignFrame) frame).closeMenuItem_actionPerformed(); + ((AlignFrame) frame).closeMenuItem_actionPerformed(); } if (currentAlignFrame == frame) { @@ -343,10 +474,14 @@ public class JalviewLite } lastFrameX -= 40; lastFrameY -= 40; + if (frame instanceof EmbmenuFrame) + { + ((EmbmenuFrame) frame).destroyMenus(); + } frame.setMenuBar(null); frame.dispose(); } - + public void windowActivated(WindowEvent e) { if (frame instanceof AlignFrame) @@ -354,39 +489,33 @@ public class JalviewLite currentAlignFrame = (AlignFrame) frame; if (debug) { - System.err.println("Activated window "+frame); + System.err.println("Activated window " + frame); } } // be good. super.windowActivated(e); } - /* Probably not necessary to do this - see TODO above. - * (non-Javadoc) + /* + * Probably not necessary to do this - see TODO above. (non-Javadoc) + * * @see java.awt.event.WindowAdapter#windowDeactivated(java.awt.event.WindowEvent) - * - public void windowDeactivated(WindowEvent e) - { - if (currentAlignFrame == frame) - { - currentAlignFrame = null; - if (debug) - { - System.err.println("Deactivated window "+frame); - } - } - super.windowDeactivated(e); - } + * + * public void windowDeactivated(WindowEvent e) { if (currentAlignFrame == + * frame) { currentAlignFrame = null; if (debug) { + * System.err.println("Deactivated window "+frame); } } + * super.windowDeactivated(e); } */ }); frame.setVisible(true); } /** - * This paints the background surrounding the "Launch Jalview button" + * This paints the background surrounding the "Launch Jalview button"
*
- *
If file given in parameter not found, displays error message - * - * @param g graphics context + * If file given in parameter not found, displays error message + * + * @param g + * graphics context */ public void paint(Graphics g) { @@ -408,43 +537,88 @@ public class JalviewLite } } - class LoadJmolThread extends Thread { + private boolean running=false; + public void run() { - try + if (running || checkedForJmol) { + return; + } + running=true; + if (checkForJmol) { - if (!System.getProperty("java.version").startsWith("1.1")) + try + { + if (!System.getProperty("java.version").startsWith("1.1")) + { + Class.forName("org.jmol.adapter.smarter.SmarterJmolAdapter"); + jmolAvailable = true; + } + if (!jmolAvailable) + { + System.out + .println("Jmol not available - Using MCview for structures"); + } + } catch (java.lang.ClassNotFoundException ex) { - Class.forName("org.jmol.adapter.smarter.SmarterJmolAdapter"); - jmolAvailable = true; } } - catch (java.lang.ClassNotFoundException ex) + else { - System.out.println("Jmol not available - Using MCview for structures"); + jmolAvailable = false; + if (debug) + { + System.err + .println("Skipping Jmol check. Will use MCView (probably)"); + } } + checkedForJmol=true; + running=false; } - } + public boolean notFinished() + { + return running || !checkedForJmol; + } + } - class LoadingThread - extends Thread + class LoadingThread extends Thread { + /** + * State variable: File source + */ String file; + + /** + * State variable: protocol for access to file source + */ String protocol; + + /** + * State variable: format of file source + */ String format; + String _file; JalviewLite applet; - - public LoadingThread(String _file, - JalviewLite _applet) + private void dbgMsg(String msg) { if (applet.debug) { - System.err.println("Loading thread started with:\n>>file\n"+_file+">>endfile"); + System.err.println(msg); } - file = _file; + } + + /** + * update the protocol state variable for accessing the datasource located + * by file. + * + * @param file + * @return possibly updated datasource string + */ + public String setProtocolState(String file) + { if (file.startsWith("PASTE")) { file = file.substring(5); @@ -459,50 +633,64 @@ public class JalviewLite file = addProtocol(file); protocol = AppletFormatAdapter.URL; } - if (applet.debug) - { - System.err.println("Protocol identified as '"+protocol+"'"); - } - format = new jalview.io.IdentifyFile().Identify(file, protocol); - if (applet.debug) - { - System.err.println("File identified as '"+format+"'"); - } + dbgMsg("Protocol identified as '" + protocol + "'"); + return file; + } + + public LoadingThread(String _file, JalviewLite _applet) + { + this._file=_file; applet = _applet; } public void run() { + LoadJmolThread jmolchecker = new LoadJmolThread(); + jmolchecker.start(); + while (jmolchecker.notFinished()) + { + // wait around until the Jmol check is complete. + 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 { - al = new AppletFormatAdapter().readFile(file, protocol, - format); - } - catch (java.io.IOException ex) + al = new AppletFormatAdapter().readFile(file, protocol, format); + } catch (java.io.IOException ex) { + dbgMsg("File load exception."); ex.printStackTrace(); } - if ( (al != null) && (al.getHeight() > 0)) + if ((al != null) && (al.getHeight() > 0)) { - initialAlignFrame = new AlignFrame(al, - applet, - file, - embedded); + dbgMsg("Successfully loaded file."); + 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) @@ -514,27 +702,27 @@ public class JalviewLite { try { - if (inArchive(treeFile)) - { - protocol = AppletFormatAdapter.CLASSLOADER; - } - else - { - protocol = AppletFormatAdapter.URL; - treeFile = addProtocol(treeFile); - } - + treeFile = setProtocolState(treeFile); + /* + * if (inArchive(treeFile)) { protocol = + * AppletFormatAdapter.CLASSLOADER; } else { protocol = + * AppletFormatAdapter.URL; treeFile = addProtocol(treeFile); } + */ jalview.io.NewickFile fin = new jalview.io.NewickFile(treeFile, - protocol); + protocol); fin.parse(); if (fin.getTree() != null) { - currentAlignFrame.loadTree(fin, treeFile); + newAlignFrame.loadTree(fin, treeFile); + dbgMsg("Successfuly imported tree."); } - } - catch (Exception ex) + else + { + dbgMsg("Tree parameter did not resolve to a valid tree."); + } + } catch (Exception ex) { ex.printStackTrace(); } @@ -543,36 +731,36 @@ public class JalviewLite String param = getParameter("features"); if (param != null) { - if (!inArchive(param)) - { - param = addProtocol(param); - } + 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"); if (param != null) { - if (!inArchive(param)) + param = setProtocolState(param); + + if (new AnnotationFile().readAnnotationFile( + newAlignFrame.viewport.getAlignment(), param, + protocol)) { - param = addProtocol(param); + newAlignFrame.alignPanel.fontChanged(); + newAlignFrame.alignPanel.setScrollValues(0, 0); + } + else + { + System.err + .println("Annotations were not added from annotation file '" + + param + "'"); } - - new AnnotationFile().readAnnotationFile( - currentAlignFrame.viewport.getAlignment(), - param, - protocol); - - currentAlignFrame.alignPanel.fontChanged(); - currentAlignFrame.alignPanel.setScrollValues(0, 0); } @@ -581,41 +769,38 @@ public class JalviewLite { try { - if (inArchive(param)) - { - protocol = AppletFormatAdapter.CLASSLOADER; - } - else - { - protocol = AppletFormatAdapter.URL; - param = addProtocol(param); - } - + param = setProtocolState(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) + param, protocol); + JnetAnnotationMaker.add_annotation(predictions, + newAlignFrame.viewport.getAlignment(), 0, false); // false==do + // not + // add + // sequence + // profile + // from + // concise + // output + newAlignFrame.alignPanel.fontChanged(); + newAlignFrame.alignPanel.setScrollValues(0, 0); + } catch (Exception ex) { ex.printStackTrace(); } } /* - - - - - - */ - + * + * + * + * + * + */ int pdbFileCount = 0; - do{ + do + { if (pdbFileCount > 0) param = getParameter("PDBFILE" + pdbFileCount); else @@ -627,7 +812,7 @@ public class JalviewLite String seqstring; SequenceI[] seqs = null; - String [] chains = null; + String[] chains = null; StringTokenizer st = new StringTokenizer(param, " "); @@ -636,10 +821,8 @@ public class JalviewLite String sequence = applet.getParameter("PDBSEQ"); if (sequence != null) seqs = new SequenceI[] - { - (Sequence) currentAlignFrame. - getAlignViewport().getAlignment(). - findName(sequence)}; + { (Sequence) newAlignFrame.getAlignViewport() + .getAlignment().findName(sequence) }; } else @@ -651,83 +834,94 @@ public class JalviewLite while (st.hasMoreTokens()) { seqstring = st.nextToken(); - StringTokenizer st2 = new StringTokenizer(seqstring,"="); - if(st2.countTokens()>1) + StringTokenizer st2 = new StringTokenizer(seqstring, "="); + if (st2.countTokens() > 1) { - //This is the chain + // This is the chain 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()]; tmp.copyInto(seqs); - if(tmp2.size()==tmp.size()) + if (tmp2.size() == tmp.size()) { chains = new String[tmp2.size()]; tmp2.copyInto(chains); } } + param = setProtocolState(param); - if (inArchive(param) && !jmolAvailable) - { - protocol = AppletFormatAdapter.CLASSLOADER; - } - else + if (// !jmolAvailable + // && + protocol == AppletFormatAdapter.CLASSLOADER) { - protocol = AppletFormatAdapter.URL; - param = addProtocol(param); + // TODO: verify this Re: + // https://mantis.lifesci.dundee.ac.uk/view.php?id=36605 + // This exception preserves the current behaviour where, even if + // the local pdb file was identified in the class loader + protocol = AppletFormatAdapter.URL; // this is probably NOT + // CORRECT! + param = addProtocol(param); // } pdb.setFile(param); - if(seqs!=null) + if (seqs != null) { for (int i = 0; i < seqs.length; i++) { - ( (Sequence) seqs[i]).addPDBId(pdb); + if (seqs[i] != null) + { + ((Sequence) seqs[i]).addPDBId(pdb); + } + else + { + if (JalviewLite.debug) + { + // this may not really be a problem but we give a warning + // anyway + System.err + .println("Warning: Possible input parsing error: Null sequence for attachment of PDB (sequence " + + i + ")"); + } + } } if (jmolAvailable) { - new jalview.appletgui.AppletJmol(pdb, - seqs, - chains, - currentAlignFrame.alignPanel, - protocol); + new jalview.appletgui.AppletJmol(pdb, seqs, chains, + newAlignFrame.alignPanel, protocol); lastFrameX += 40; - lastFrameY+=40; + lastFrameY += 40; } else - new MCview.AppletPDBViewer(pdb, - seqs, - chains, - currentAlignFrame.alignPanel, - protocol); + new MCview.AppletPDBViewer(pdb, seqs, chains, + newAlignFrame.alignPanel, protocol); } } pdbFileCount++; - } - while(pdbFileCount < 10); - - ///////////////////////////// + } while (pdbFileCount < 10); + + // /////////////////////////// // modify display of features // // hide specific groups 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 @@ -740,20 +934,28 @@ public class JalviewLite /** * Discovers whether the given file is in the Applet Archive - * @param file String + * + * @param file + * String * @return boolean */ boolean inArchive(String file) { - //This might throw a security exception in certain browsers - //Netscape Communicator for instance. + // This might throw a security exception in certain browsers + // Netscape Communicator for instance. try { - return (getClass().getResourceAsStream("/" + file) != null); - } - catch (Exception ex) + boolean rtn = (getClass().getResourceAsStream("/" + file) != null); + if (debug) + { + System.err.println("Resource '" + file + "' was " + + (rtn ? "" : "not") + " located by classloader."); + } + return rtn; + } catch (Exception ex) { - System.out.println("Exception checking resources: " + file + " " + ex); + System.out.println("Exception checking resources: " + file + " " + + ex); return false; } } @@ -763,121 +965,146 @@ public class JalviewLite if (file.indexOf("://") == -1) { file = getCodeBase() + file; + if (debug) + { + System.err.println("Prepended codebase for resource: '" + file + + "'"); + } } return file; } } + /** - * @return the default alignFrame acted on by the public applet methods. - * May return null with an error message on System.err indicating the fact. + * @return the default alignFrame acted on by the public applet methods. May + * return null with an error message on System.err indicating the + * fact. */ protected AlignFrame getDefaultTargetFrame() { - if (currentAlignFrame!=null) + if (currentAlignFrame != null) { return currentAlignFrame; } - if (initialAlignFrame!=null) + if (initialAlignFrame != null) { return initialAlignFrame; } - System.err.println("Implementation error: Jalview Applet API cannot work out which AlignFrame to use."); + System.err + .println("Implementation error: Jalview Applet API cannot work out which AlignFrame to use."); return null; } + /** * separator used for separatorList */ - protected String separator = "|"; // this is a safe(ish) separator - tabs don't work for firefox + protected String separator = "|"; // this is a safe(ish) separator - tabs + + // don't work for firefox + /** * parse the string into a list + * * @param list * @return elements separated by separator */ public String[] separatorListToArray(String list) { int seplen = separator.length(); - if (list==null || list.equals("")) + if (list == null || list.equals("")) return null; java.util.Vector jv = new Vector(); - int cp=0,pos; - while ((pos=list.indexOf(separator,cp))>cp) + int cp = 0, pos; + while ((pos = list.indexOf(separator, cp)) > cp) { - jv.addElement(list.substring(cp,pos)); - cp = pos+seplen; + jv.addElement(list.substring(cp, pos)); + cp = pos + seplen; } - if (cp0) - { String[] v = new String[jv.size()]; - for (int i=0; i 0) + { + String[] v = new String[jv.size()]; + for (int i = 0; i < v.length; i++) { v[i] = (String) jv.elementAt(i); } jv.removeAllElements(); if (debug) { - System.err.println("Array from '"+separator+"' separated List:\n"+v.length); - for (int i=0; i