X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fbin%2FJalviewLite.java;h=311e48d7953c8c60845ed917a3bf3cf6bcff8b2f;hb=e9aa1cee679000405c5549829ee08e1c08b2ffd5;hp=a4bebeffe02ea6bd53b397f9af5806cd5561f57d;hpb=362f2db1b01f3562784864a1d6ac5f7b9be0a18a;p=jalview.git diff --git a/src/jalview/bin/JalviewLite.java b/src/jalview/bin/JalviewLite.java index a4bebef..311e48d 100644 --- a/src/jalview/bin/JalviewLite.java +++ b/src/jalview/bin/JalviewLite.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle * * This file is part of Jalview. * @@ -36,6 +36,7 @@ import jalview.io.FileParse; import jalview.io.IdentifyFile; import jalview.io.JnetAnnotationMaker; import jalview.javascript.JSFunctionExec; +import jalview.javascript.JalviewLiteJsApi; import jalview.javascript.JsCallBack; import jalview.structure.SelectionListener; import jalview.structure.StructureSelectionManager; @@ -44,6 +45,7 @@ import java.applet.Applet; import java.awt.Button; import java.awt.Color; import java.awt.Component; +import java.awt.EventQueue; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; @@ -52,6 +54,7 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.InputStreamReader; +import java.net.URL; import java.util.Hashtable; import java.util.StringTokenizer; import java.util.Vector; @@ -64,53 +67,56 @@ import netscape.javascript.JSObject; * @author $author$ * @version $Revision: 1.92 $ */ -public class JalviewLite extends Applet implements StructureSelectionManagerProvider +public class JalviewLite extends Applet implements + StructureSelectionManagerProvider, JalviewLiteJsApi { + public StructureSelectionManager getStructureSelectionManager() + { + return StructureSelectionManager.getStructureSelectionManager(this); + } + // ///////////////////////////////////////// // The following public methods maybe called // externally, eg via javascript in HTML page - /** - * @return String list of selected sequence IDs, each terminated by the - * 'boolean not' character (""+0x00AC) or (¬) + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#getSelectedSequences() */ public String getSelectedSequences() { return getSelectedSequencesFrom(getDefaultTargetFrame()); } - /** - * @param sep - * separator string or null for default - * @return String list of selected sequence IDs, each terminated by given - * separator string + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#getSelectedSequences(java.lang.String) */ public String getSelectedSequences(String sep) { return getSelectedSequencesFrom(getDefaultTargetFrame(), sep); } - /** - * @param alf - * alignframe containing selection - * @return String list of selected sequence IDs, each terminated by current - * default separator sequence + /* + * (non-Javadoc) * + * @see + * jalview.bin.JalviewLiteJsApi#getSelectedSequencesFrom(jalview.appletgui + * .AlignFrame) */ public String getSelectedSequencesFrom(AlignFrame alf) { return getSelectedSequencesFrom(alf, separator); // ""+0x00AC); } - /** - * get list of selected sequence IDs separated by given separator + /* + * (non-Javadoc) * - * @param alf - * window containing selection - * @param sep - * separator string to use - default is 'boolean not' - * @return String list of selected sequence IDs, each terminated by the given - * separator + * @see + * jalview.bin.JalviewLiteJsApi#getSelectedSequencesFrom(jalview.appletgui + * .AlignFrame, java.lang.String) */ public String getSelectedSequencesFrom(AlignFrame alf, String sep) { @@ -134,15 +140,11 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv return result.toString(); } - /** + /* + * (non-Javadoc) * - * @param sequenceId - * id of sequence to highlight - * @param position - * integer position [ tobe implemented or range ] on sequence - * @param alignedPosition - * true/false/empty string - indicate if position is an alignment - * column or unaligned sequence position + * @see jalview.bin.JalviewLiteJsApi#highlight(java.lang.String, + * java.lang.String, java.lang.String) */ public void highlight(String sequenceId, String position, String alignedPosition) @@ -151,26 +153,22 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv alignedPosition); } - /** + /* + * (non-Javadoc) * - * @param sequenceId - * id of sequence to highlight - * @param position - * integer position [ tobe implemented or range ] on sequence - * @param alignedPosition - * false, blank or something else - indicate if position is an - * alignment column or unaligned sequence position + * @see jalview.bin.JalviewLiteJsApi#highlightIn(jalview.appletgui.AlignFrame, + * java.lang.String, java.lang.String, java.lang.String) */ - public void highlightIn(AlignFrame alf, String sequenceId, - String position, String alignedPosition) + public void highlightIn(final AlignFrame alf, final String sequenceId, + final String position, final String alignedPosition) { // TODO: could try to highlight in all alignments if alf==null jalview.analysis.SequenceIdMatcher matcher = new jalview.analysis.SequenceIdMatcher( alf.viewport.getAlignment().getSequencesArray()); - SequenceI sq = matcher.findIdMatch(sequenceId); + final SequenceI sq = matcher.findIdMatch(sequenceId); if (sq != null) { - int pos, apos = -1; + int apos = -1; try { apos = new Integer(position).intValue(); @@ -179,75 +177,79 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv { return; } + final StructureSelectionManagerProvider me = this; + final int pos = apos; // use vamsas listener to broadcast to all listeners in scope if (alignedPosition != null && (alignedPosition.trim().length() == 0 || alignedPosition .toLowerCase().indexOf("false") > -1)) { - StructureSelectionManager.getStructureSelectionManager(this) - .mouseOverVamsasSequence(sq, sq.findIndex(apos), null); + java.awt.EventQueue.invokeLater(new Runnable() + { + @Override + public void run() + { + StructureSelectionManager.getStructureSelectionManager(me) + .mouseOverVamsasSequence(sq, sq.findIndex(pos), null); + } + }); } else { - StructureSelectionManager.getStructureSelectionManager(this) - .mouseOverVamsasSequence(sq, apos, null); + java.awt.EventQueue.invokeLater(new Runnable() + { + @Override + public void run() + { + StructureSelectionManager.getStructureSelectionManager(me) + .mouseOverVamsasSequence(sq, pos, null); + } + }); } - } } - /** - * select regions of the currrent alignment frame + /* + * (non-Javadoc) * - * @param sequenceIds - * String separated list of sequence ids or empty string - * @param columns - * String separated list { column range or column, ..} or empty - * string + * @see jalview.bin.JalviewLiteJsApi#select(java.lang.String, + * java.lang.String) */ public void select(String sequenceIds, String columns) { selectIn(getDefaultTargetFrame(), sequenceIds, columns, separator); } - /** - * select regions of the currrent alignment frame + /* + * (non-Javadoc) * - * @param toselect - * String separated list { column range, seq1...seqn sequence ids } - * @param sep - * separator between toselect fields + * @see jalview.bin.JalviewLiteJsApi#select(java.lang.String, + * java.lang.String, java.lang.String) */ public void select(String sequenceIds, String columns, String sep) { selectIn(getDefaultTargetFrame(), sequenceIds, columns, sep); } - /** - * select regions of the given alignment frame + /* + * (non-Javadoc) * - * @param alf - * @param toselect - * String separated list { column range, seq1...seqn sequence ids } - * @param sep - * separator between toselect fields + * @see jalview.bin.JalviewLiteJsApi#selectIn(jalview.appletgui.AlignFrame, + * java.lang.String, java.lang.String) */ public void selectIn(AlignFrame alf, String sequenceIds, String columns) { selectIn(alf, sequenceIds, columns, separator); } - /** - * select regions of the given alignment frame + /* + * (non-Javadoc) * - * @param alf - * @param toselect - * String separated list { column range, seq1...seqn sequence ids } - * @param sep - * separator between toselect fields + * @see jalview.bin.JalviewLiteJsApi#selectIn(jalview.appletgui.AlignFrame, + * java.lang.String, java.lang.String, java.lang.String) */ - public void selectIn(AlignFrame alf, String sequenceIds, String columns, - String sep) + public void selectIn(final AlignFrame alf, String sequenceIds, + String columns, String sep) { if (sep == null || sep.length() == 0) { @@ -264,8 +266,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv // deparse fields String[] ids = separatorListToArray(sequenceIds, sep); String[] cols = separatorListToArray(columns, sep); - SequenceGroup sel = new SequenceGroup(); - ColumnSelection csel = new ColumnSelection(); + final SequenceGroup sel = new SequenceGroup(); + final ColumnSelection csel = new ColumnSelection(); AlignmentI al = alf.viewport.getAlignment(); jalview.analysis.SequenceIdMatcher matcher = new jalview.analysis.SequenceIdMatcher( alf.viewport.getAlignment().getSequencesArray()); @@ -451,22 +453,23 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv } sel.setStartRes(start); sel.setEndRes(end); - alf.select(sel, csel); + EventQueue.invokeLater(new Runnable() + { + @Override + public void run() + { + alf.select(sel, csel); + } + }); } } - /** - * 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 + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getSelectedSequencesAsAlignment(java.lang. + * String, java.lang.String) */ public String getSelectedSequencesAsAlignment(String format, String suffix) { @@ -474,18 +477,12 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv 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 + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getSelectedSequencesAsAlignmentFrom(jalview + * .appletgui.AlignFrame, java.lang.String, java.lang.String) */ public String getSelectedSequencesAsAlignmentFrom(AlignFrame alf, String format, String suffix) @@ -495,6 +492,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv boolean seqlimits = suffix.equalsIgnoreCase("true"); if (alf.viewport.getSelectionGroup() != null) { + // JBPNote: getSelectionAsNewSequence behaviour has changed - this method now returns a full copy of sequence data + // TODO consider using getSequenceSelection instead here String reply = new AppletFormatAdapter().formatSequences(format, new Alignment(alf.viewport.getSelectionAsNewSequence()), seqlimits); @@ -508,16 +507,35 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv return ""; } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#getAlignmentOrder() + */ public String getAlignmentOrder() { return getAlignmentOrderFrom(getDefaultTargetFrame()); } + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getAlignmentOrderFrom(jalview.appletgui.AlignFrame + * ) + */ public String getAlignmentOrderFrom(AlignFrame alf) { return getAlignmentOrderFrom(alf, separator); } + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getAlignmentOrderFrom(jalview.appletgui.AlignFrame + * , java.lang.String) + */ public String getAlignmentOrderFrom(AlignFrame alf, String sep) { AlignmentI alorder = alf.getAlignViewport().getAlignment(); @@ -529,16 +547,35 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv return arrayToSeparatorList(order); } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#orderBy(java.lang.String, + * java.lang.String) + */ public String orderBy(String order, String undoName) { return orderBy(order, undoName, separator); } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#orderBy(java.lang.String, + * java.lang.String, java.lang.String) + */ public String orderBy(String order, String undoName, String sep) { return orderAlignmentBy(getDefaultTargetFrame(), order, undoName, sep); } + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#orderAlignmentBy(jalview.appletgui.AlignFrame, + * java.lang.String, java.lang.String, java.lang.String) + */ public String orderAlignmentBy(AlignFrame alf, String order, String undoName, String sep) { @@ -578,31 +615,58 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv return ""; } ; - AlignmentOrder aorder = new AlignmentOrder(sqs); + final AlignmentOrder aorder = new AlignmentOrder(sqs); if (undoName != null && undoName.trim().length() == 0) { undoName = null; } - - return alf.sortBy(aorder, undoName) ? "true" : ""; + final String _undoName = undoName; + // TODO: deal with synchronization here: cannot raise any events until after + // this has returned. + return alf.sortBy(aorder, _undoName) ? "true" : ""; } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#getAlignment(java.lang.String) + */ public String getAlignment(String format) { return getAlignmentFrom(getDefaultTargetFrame(), format, "true"); } + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getAlignmentFrom(jalview.appletgui.AlignFrame, + * java.lang.String) + */ public String getAlignmentFrom(AlignFrame alf, String format) { return getAlignmentFrom(alf, format, "true"); } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#getAlignment(java.lang.String, + * java.lang.String) + */ public String getAlignment(String format, String suffix) { return getAlignmentFrom(getDefaultTargetFrame(), format, suffix); } + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getAlignmentFrom(jalview.appletgui.AlignFrame, + * java.lang.String, java.lang.String) + */ public String getAlignmentFrom(AlignFrame alf, String format, String suffix) { @@ -620,11 +684,23 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv } } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#loadAnnotation(java.lang.String) + */ public void loadAnnotation(String annotation) { loadAnnotationFrom(getDefaultTargetFrame(), annotation); } + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#loadAnnotationFrom(jalview.appletgui.AlignFrame + * , java.lang.String) + */ public void loadAnnotationFrom(AlignFrame alf, String annotation) { if (new AnnotationFile().readAnnotationFile(alf.getAlignViewport() @@ -639,53 +715,119 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv } } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#loadAnnotation(java.lang.String) + */ + public void loadFeatures(String features, boolean autoenabledisplay) + { + loadFeaturesFrom(getDefaultTargetFrame(), features, autoenabledisplay); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#loadAnnotationFrom(jalview.appletgui.AlignFrame + * , java.lang.String) + */ + public void loadFeaturesFrom(AlignFrame alf, String features, boolean autoenabledisplay) + { + alf.parseFeaturesFile(features, AppletFormatAdapter.PASTE, autoenabledisplay); + } + + + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#getFeatures(java.lang.String) + */ public String getFeatures(String format) { return getFeaturesFrom(getDefaultTargetFrame(), format); } + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getFeaturesFrom(jalview.appletgui.AlignFrame, + * java.lang.String) + */ public String getFeaturesFrom(AlignFrame alf, String format) { return alf.outputFeatures(false, format); } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#getAnnotation() + */ public String getAnnotation() { return getAnnotationFrom(getDefaultTargetFrame()); } + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getAnnotationFrom(jalview.appletgui.AlignFrame + * ) + */ public String getAnnotationFrom(AlignFrame alf) { return alf.outputAnnotations(false); } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#newView() + */ public AlignFrame newView() { return newViewFrom(getDefaultTargetFrame()); } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#newView(java.lang.String) + */ public AlignFrame newView(String name) { return newViewFrom(getDefaultTargetFrame(), name); } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#newViewFrom(jalview.appletgui.AlignFrame) + */ public AlignFrame newViewFrom(AlignFrame alf) { return alf.newView(null); } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#newViewFrom(jalview.appletgui.AlignFrame, + * java.lang.String) + */ public AlignFrame newViewFrom(AlignFrame alf, String name) { return alf.newView(name); } - /** + /* + * (non-Javadoc) * - * @param text - * alignment file as a string - * @param title - * window title - * @return null or new alignment frame + * @see jalview.bin.JalviewLiteJsApi#loadAlignment(java.lang.String, + * java.lang.String) */ public AlignFrame loadAlignment(String text, String title) { @@ -708,6 +850,11 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv return null; } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#setMouseoverListener(java.lang.String) + */ public void setMouseoverListener(String listener) { setMouseoverListener(currentAlignFrame, listener); @@ -715,6 +862,13 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv private Vector javascriptListeners = new Vector(); + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#setMouseoverListener(jalview.appletgui.AlignFrame + * , java.lang.String) + */ public void setMouseoverListener(AlignFrame af, String listener) { if (listener != null) @@ -742,11 +896,23 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv } } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#setSelectionListener(java.lang.String) + */ public void setSelectionListener(String listener) { setSelectionListener(null, listener); } + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#setSelectionListener(jalview.appletgui.AlignFrame + * , java.lang.String) + */ public void setSelectionListener(AlignFrame af, String listener) { if (listener != null) @@ -774,6 +940,12 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv } } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#setStructureListener(java.lang.String, + * java.lang.String) + */ public void setStructureListener(String listener, String modelSet) { if (listener != null) @@ -800,14 +972,12 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv } } - /** - * remove any callback using the given listener function and associated with - * the given alignFrame (or null for all callbacks) + /* + * (non-Javadoc) * - * @param af - * (may be null) - * @param listener - * (may be null) + * @see + * jalview.bin.JalviewLiteJsApi#removeJavascriptListener(jalview.appletgui + * .AlignFrame, java.lang.String) */ public void removeJavascriptListener(AlignFrame af, String listener) { @@ -860,30 +1030,33 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv public void stop() { - System.err.println("Applet "+getName()+" stop()."); + System.err.println("Applet " + getName() + " stop()."); tidyUp(); } + public void destroy() { - System.err.println("Applet "+getName()+" destroy()."); + System.err.println("Applet " + getName() + " destroy()."); tidyUp(); } + private void tidyUp() { removeAll(); - if (currentAlignFrame!=null && currentAlignFrame.viewport!=null - && currentAlignFrame.viewport.applet!=null) + if (currentAlignFrame != null && currentAlignFrame.viewport != null + && currentAlignFrame.viewport.applet != null) { AlignViewport av = currentAlignFrame.viewport; currentAlignFrame.closeMenuItem_actionPerformed(); - av.applet=null; - currentAlignFrame=null; + av.applet = null; + currentAlignFrame = null; } if (javascriptListeners != null) { while (javascriptListeners.size() > 0) { - jalview.javascript.JSFunctionExec mol = javascriptListeners.elementAt(0); + jalview.javascript.JSFunctionExec mol = javascriptListeners + .elementAt(0); javascriptListeners.removeElement(mol); if (mol instanceof SelectionListener) { @@ -895,63 +1068,151 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv StructureSelectionManager.getStructureSelectionManager(this) .removeStructureViewerListener(mol, null); } - mol.jvlite=null; + mol.jvlite = null; } } - if (jsFunctionExec!=null) { + if (jsFunctionExec != null) + { jsFunctionExec.stopQueue(); - jsFunctionExec.jvlite=null; + jsFunctionExec.jvlite = null; } - initialAlignFrame=null; + initialAlignFrame = null; jsFunctionExec = null; - javascriptListeners=null; + javascriptListeners = null; StructureSelectionManager.release(this); } + private jalview.javascript.JSFunctionExec jsFunctionExec; - /** - * send a mouseover message to all the alignment windows associated with the - * given residue in the pdbfile + + /* + * (non-Javadoc) * - * @param pdbResNum - * @param chain - * @param pdbfile + * @see jalview.bin.JalviewLiteJsApi#mouseOverStructure(java.lang.String, + * java.lang.String, java.lang.String) */ - public void mouseOverStructure(String pdbResNum, String chain, - String pdbfile) + public void mouseOverStructure(final String pdbResNum, + final String chain, final String pdbfile) { - try + final StructureSelectionManagerProvider me = this; + java.awt.EventQueue.invokeLater(new Runnable() { - StructureSelectionManager.getStructureSelectionManager(this) - .mouseOverStructure(new Integer(pdbResNum).intValue(), chain, - pdbfile); - if (debug) + @Override + public void run() { - System.err.println("mouseOver for '" + pdbResNum + "' in chain '" - + chain + "' in structure '" + pdbfile + "'"); + try + { + StructureSelectionManager.getStructureSelectionManager(me) + .mouseOverStructure(new Integer(pdbResNum).intValue(), + chain, pdbfile); + if (debug) + { + System.err.println("mouseOver for '" + pdbResNum + + "' in chain '" + chain + "' in structure '" + pdbfile + + "'"); + } + } catch (NumberFormatException e) + { + System.err.println("Ignoring invalid residue number string '" + + pdbResNum + "'"); + } + } - } catch (NumberFormatException e) + }); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#scrollViewToIn(jalview.appletgui.AlignFrame, + * java.lang.String, java.lang.String) + */ + public void scrollViewToIn(final AlignFrame alf, final String topRow, + final String leftHandColumn) + { + java.awt.EventQueue.invokeLater(new Runnable() { - System.err.println("Ignoring invalid residue number string '" - + pdbResNum + "'"); - } + @Override + public void run() + { + try + { + alf.scrollTo(new Integer(topRow).intValue(), new Integer( + leftHandColumn).intValue()); + + } catch (Exception ex) + { + System.err.println("Couldn't parse integer arguments (topRow='" + + topRow + "' and leftHandColumn='" + leftHandColumn + + "')"); + ex.printStackTrace(); + } + } + }); } - /** - * adjust horizontal/vertical scroll to the make the given location the top left hand corner for given current view + + /* + * (non-Javadoc) * - * @param alf - * @param topRow - * @param leftHandColumn + * @see + * jalview.javascript.JalviewLiteJsApi#scrollViewToRowIn(jalview.appletgui + * .AlignFrame, java.lang.String) */ - public void scrollViewToIn(AlignFrame alf, String topRow, String leftHandColumn) + @Override + public void scrollViewToRowIn(final AlignFrame alf, final String topRow) { - try { - alf.scrollTo(new Integer(topRow).intValue(), new Integer(leftHandColumn).intValue()); - - } catch (Exception ex) + + java.awt.EventQueue.invokeLater(new Runnable() { - System.err.println("Couldn't parse integer arguments (topRow='"+topRow+"' and leftHandColumn='"+leftHandColumn+"'"); - ex.printStackTrace(); - } + @Override + public void run() + { + try + { + alf.scrollToRow(new Integer(topRow).intValue()); + + } catch (Exception ex) + { + System.err.println("Couldn't parse integer arguments (topRow='" + + topRow + "')"); + ex.printStackTrace(); + } + + } + }); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.javascript.JalviewLiteJsApi#scrollViewToColumnIn(jalview.appletgui + * .AlignFrame, java.lang.String) + */ + @Override + public void scrollViewToColumnIn(final AlignFrame alf, + final String leftHandColumn) + { + java.awt.EventQueue.invokeLater(new Runnable() + { + + @Override + public void run() + { + try + { + alf.scrollToColumn(new Integer(leftHandColumn).intValue()); + + } catch (Exception ex) + { + System.err + .println("Couldn't parse integer arguments (leftHandColumn='" + + leftHandColumn + "')"); + ex.printStackTrace(); + } + } + }); + } // ////////////////////////////////////////////// @@ -1288,9 +1549,9 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv { vp.applet.currentAlignFrame = null; } - vp.applet=null; - vp=null; - + vp.applet = null; + vp = null; + } lastFrameX -= 40; lastFrameY -= 40; @@ -1604,7 +1865,27 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv } } - String param = applet.getParameter("features"); + // /////////////////////////// + // modify display of features + // we do this before any features have been loaded, ensuring any hidden groups are hidden when features first displayed + // + // hide specific groups + // + String param = applet.getParameter("hidefeaturegroups"); + if (param != null) + { + newAlignFrame.setFeatureGroupState(separatorListToArray(param), false); +// applet.setFeatureGroupStateOn(newAlignFrame, param, false); + } + // show specific groups + param = applet.getParameter("showfeaturegroups"); + if (param != null) + { + newAlignFrame.setFeatureGroupState(separatorListToArray(param), true); +// applet.setFeatureGroupStateOn(newAlignFrame, param, true); + } + // and now load features + param = applet.getParameter("features"); if (param != null) { param = setProtocolState(param); @@ -1823,21 +2104,6 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv protocols); } - // /////////////////////////// - // modify display of features - // - // hide specific groups - param = applet.getParameter("hidefeaturegroups"); - if (param != null) - { - applet.setFeatureGroupStateOn(newAlignFrame, param, false); - } - // show specific groups - param = applet.getParameter("showfeaturegroups"); - if (param != null) - { - applet.setFeatureGroupStateOn(newAlignFrame, param, true); - } } else { @@ -1880,7 +2146,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv { if (file.indexOf("://") == -1) { - String fl = applet.getDocumentBase() + file; + String fl = applet.resolveUrlForLocalOrAbsolute(file, + getDocumentBase()); try { if (new java.net.URL(fl).openStream() != null) @@ -1896,20 +2163,17 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv { } ; - fl = applet.getCodeBase() + file; + fl = applet.resolveUrlForLocalOrAbsolute(file, getCodeBase()); try { if (new java.net.URL(fl).openStream() != null) { if (debug) { - if (debug) - { - System.err.println("Prepended codebase for resource: '" - + file + "'"); - } - return fl; + System.err.println("Prepended codebase for resource: '" + + file + "'"); } + return fl; } } catch (Exception x) { @@ -1950,9 +2214,9 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv // IDS include pipes. /** - * set to enable the URL based javascript execution mechanism + * set to enable the URL based javascript execution mechanism */ - public boolean jsfallbackEnabled=false; + public boolean jsfallbackEnabled = false; /** * parse the string into a list @@ -2070,9 +2334,10 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv return "" + separator; } - /** - * @return - * @see jalview.appletgui.AlignFrame#getFeatureGroups() + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#getFeatureGroups() */ public String getFeatureGroups() { @@ -2081,11 +2346,12 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv return lst; } - /** - * @param alf - * alignframe to get feature groups on - * @return - * @see jalview.appletgui.AlignFrame#getFeatureGroups() + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getFeatureGroupsOn(jalview.appletgui.AlignFrame + * ) */ public String getFeatureGroupsOn(AlignFrame alf) { @@ -2093,10 +2359,10 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv return lst; } - /** - * @param visible - * @return - * @see jalview.appletgui.AlignFrame#getFeatureGroupsOfState(boolean) + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#getFeatureGroupsOfState(boolean) */ public String getFeatureGroupsOfState(boolean visible) { @@ -2104,54 +2370,64 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv .getFeatureGroupsOfState(visible)); } - /** - * @param alf - * align frame to get groups of state visible - * @param visible - * @return - * @see jalview.appletgui.AlignFrame#getFeatureGroupsOfState(boolean) + /* + * (non-Javadoc) + * + * @see + * jalview.bin.JalviewLiteJsApi#getFeatureGroupsOfStateOn(jalview.appletgui + * .AlignFrame, boolean) */ public String getFeatureGroupsOfStateOn(AlignFrame alf, boolean visible) { return arrayToSeparatorList(alf.getFeatureGroupsOfState(visible)); } - /** - * @param groups - * tab separated list of group names - * @param state - * true or false - * @see jalview.appletgui.AlignFrame#setFeatureGroupState(java.lang.String[], - * boolean) + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#setFeatureGroupStateOn(jalview.appletgui. + * AlignFrame, java.lang.String, boolean) */ - public void setFeatureGroupStateOn(AlignFrame alf, String groups, - boolean state) + public void setFeatureGroupStateOn(final AlignFrame alf, + final String groups, boolean state) { - boolean st = state;// !(state==null || state.equals("") || + final boolean st = state;// !(state==null || state.equals("") || // state.toLowerCase().equals("false")); - alf.setFeatureGroupState(separatorListToArray(groups), st); + java.awt.EventQueue.invokeLater(new Runnable() + { + @Override + public void run() + { + alf.setFeatureGroupState(separatorListToArray(groups), st); + } + }); } + /* + * (non-Javadoc) + * + * @see jalview.bin.JalviewLiteJsApi#setFeatureGroupState(java.lang.String, + * boolean) + */ public void setFeatureGroupState(String groups, boolean state) { setFeatureGroupStateOn(getDefaultTargetFrame(), groups, state); } - /** - * List separator string + /* + * (non-Javadoc) * - * @return the separator + * @see jalview.bin.JalviewLiteJsApi#getSeparator() */ public String getSeparator() { return separator; } - /** - * List separator string + /* + * (non-Javadoc) * - * @param separator - * the separator to set. empty string will reset separator to default + * @see jalview.bin.JalviewLiteJsApi#setSeparator(java.lang.String) */ public void setSeparator(String separator) { @@ -2191,21 +2467,11 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv return false; } - /** - * bind a pdb file to a sequence in the given alignFrame. + /* + * (non-Javadoc) * - * @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 sequenceId location - * fails. + * @see jalview.bin.JalviewLiteJsApi#addPdbFile(jalview.appletgui.AlignFrame, + * java.lang.String, java.lang.String, java.lang.String) */ public boolean addPdbFile(AlignFrame alFrame, String sequenceId, String pdbEntryString, String pdbFile) @@ -2225,36 +2491,51 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv public void start() { -// callInitCallback(); + // callInitCallback(); } - private Hashtable jshashes=new Hashtable(); - private Hashtable> jsmessages=new Hashtable>(); + + private Hashtable jshashes = new Hashtable(); + + private Hashtable> jsmessages = new Hashtable>(); + public void setJsMessageSet(String messageclass, String viewId, String[] colcommands) { - Hashtable msgset = jsmessages.get(messageclass); - if (msgset==null) + Hashtable msgset = jsmessages.get(messageclass); + if (msgset == null) { - msgset=new Hashtable(); + msgset = new Hashtable(); jsmessages.put(messageclass, msgset); } msgset.put(viewId, colcommands); long[] l = new long[colcommands.length]; - for (int i=0;i msgset = jsmessages.get(messageclass); - if (msgset!=null) + Hashtable msgset = jsmessages.get(messageclass); + if (msgset != null) { String[] msgs = msgset.get(viewId); - if (msgs!=null) + if (msgs != null) { - for (int i=0;i