JAL-853 use service action attribute to index services in webservices menu and hardwi...
[jalview.git] / src / jalview / bin / JalviewLite.java
index a4bebef..25c907d 100644 (file)
@@ -36,6 +36,7 @@ import jalview.io.FileParse;
 import jalview.io.IdentifyFile;\r
 import jalview.io.JnetAnnotationMaker;\r
 import jalview.javascript.JSFunctionExec;\r
+import jalview.javascript.JalviewLiteJsApi;\r
 import jalview.javascript.JsCallBack;\r
 import jalview.structure.SelectionListener;\r
 import jalview.structure.StructureSelectionManager;\r
@@ -52,6 +53,7 @@ import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;\r
 import java.io.BufferedReader;\r
 import java.io.InputStreamReader;\r
+import java.net.URL;\r
 import java.util.Hashtable;\r
 import java.util.StringTokenizer;\r
 import java.util.Vector;\r
@@ -64,53 +66,42 @@ import netscape.javascript.JSObject;
  * @author $author$\r
  * @version $Revision: 1.92 $\r
  */\r
-public class JalviewLite extends Applet implements StructureSelectionManagerProvider\r
+public class JalviewLite extends Applet implements StructureSelectionManagerProvider, JalviewLiteJsApi\r
 {\r
 \r
+  public StructureSelectionManager getStructureSelectionManager()\r
+  {\r
+    return StructureSelectionManager.getStructureSelectionManager(this);\r
+  }\r
   // /////////////////////////////////////////\r
   // The following public methods maybe called\r
   // externally, eg via javascript in HTML page\r
-  /**\r
-   * @return String list of selected sequence IDs, each terminated by the\r
-   *         'boolean not' character (""+0x00AC) or (¬)\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getSelectedSequences()\r
    */\r
   public String getSelectedSequences()\r
   {\r
     return getSelectedSequencesFrom(getDefaultTargetFrame());\r
   }\r
 \r
-  /**\r
-   * @param sep\r
-   *          separator string or null for default\r
-   * @return String list of selected sequence IDs, each terminated by given\r
-   *         separator string\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getSelectedSequences(java.lang.String)\r
    */\r
   public String getSelectedSequences(String sep)\r
   {\r
     return getSelectedSequencesFrom(getDefaultTargetFrame(), sep);\r
   }\r
 \r
-  /**\r
-   * @param alf\r
-   *          alignframe containing selection\r
-   * @return String list of selected sequence IDs, each terminated by current\r
-   *         default separator sequence\r
-   * \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getSelectedSequencesFrom(jalview.appletgui.AlignFrame)\r
    */\r
   public String getSelectedSequencesFrom(AlignFrame alf)\r
   {\r
     return getSelectedSequencesFrom(alf, separator); // ""+0x00AC);\r
   }\r
 \r
-  /**\r
-   * get list of selected sequence IDs separated by given separator\r
-   * \r
-   * @param alf\r
-   *          window containing selection\r
-   * @param sep\r
-   *          separator string to use - default is 'boolean not'\r
-   * @return String list of selected sequence IDs, each terminated by the given\r
-   *         separator\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getSelectedSequencesFrom(jalview.appletgui.AlignFrame, java.lang.String)\r
    */\r
   public String getSelectedSequencesFrom(AlignFrame alf, String sep)\r
   {\r
@@ -134,15 +125,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     return result.toString();\r
   }\r
 \r
-  /**\r
-   * \r
-   * @param sequenceId\r
-   *          id of sequence to highlight\r
-   * @param position\r
-   *          integer position [ tobe implemented or range ] on sequence\r
-   * @param alignedPosition\r
-   *          true/false/empty string - indicate if position is an alignment\r
-   *          column or unaligned sequence position\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#highlight(java.lang.String, java.lang.String, java.lang.String)\r
    */\r
   public void highlight(String sequenceId, String position,\r
           String alignedPosition)\r
@@ -151,15 +135,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
             alignedPosition);\r
   }\r
 \r
-  /**\r
-   * \r
-   * @param sequenceId\r
-   *          id of sequence to highlight\r
-   * @param position\r
-   *          integer position [ tobe implemented or range ] on sequence\r
-   * @param alignedPosition\r
-   *          false, blank or something else - indicate if position is an\r
-   *          alignment column or unaligned sequence position\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#highlightIn(jalview.appletgui.AlignFrame, java.lang.String, java.lang.String, java.lang.String)\r
    */\r
   public void highlightIn(AlignFrame alf, String sequenceId,\r
           String position, String alignedPosition)\r
@@ -196,55 +173,32 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     }\r
   }\r
 \r
-  /**\r
-   * select regions of the currrent alignment frame\r
-   * \r
-   * @param sequenceIds\r
-   *          String separated list of sequence ids or empty string\r
-   * @param columns\r
-   *          String separated list { column range or column, ..} or empty\r
-   *          string\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#select(java.lang.String, java.lang.String)\r
    */\r
   public void select(String sequenceIds, String columns)\r
   {\r
     selectIn(getDefaultTargetFrame(), sequenceIds, columns, separator);\r
   }\r
 \r
-  /**\r
-   * select regions of the currrent alignment frame\r
-   * \r
-   * @param toselect\r
-   *          String separated list { column range, seq1...seqn sequence ids }\r
-   * @param sep\r
-   *          separator between toselect fields\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#select(java.lang.String, java.lang.String, java.lang.String)\r
    */\r
   public void select(String sequenceIds, String columns, String sep)\r
   {\r
     selectIn(getDefaultTargetFrame(), sequenceIds, columns, sep);\r
   }\r
 \r
-  /**\r
-   * select regions of the given alignment frame\r
-   * \r
-   * @param alf\r
-   * @param toselect\r
-   *          String separated list { column range, seq1...seqn sequence ids }\r
-   * @param sep\r
-   *          separator between toselect fields\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#selectIn(jalview.appletgui.AlignFrame, java.lang.String, java.lang.String)\r
    */\r
   public void selectIn(AlignFrame alf, String sequenceIds, String columns)\r
   {\r
     selectIn(alf, sequenceIds, columns, separator);\r
   }\r
 \r
-  /**\r
-   * select regions of the given alignment frame\r
-   * \r
-   * @param alf\r
-   * @param toselect\r
-   *          String separated list { column range, seq1...seqn sequence ids }\r
-   * @param sep\r
-   *          separator between toselect fields\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#selectIn(jalview.appletgui.AlignFrame, java.lang.String, java.lang.String, java.lang.String)\r
    */\r
   public void selectIn(AlignFrame alf, String sequenceIds, String columns,\r
           String sep)\r
@@ -455,18 +409,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     }\r
   }\r
 \r
-  /**\r
-   * get sequences selected in current alignFrame and return their alignment in\r
-   * format 'format' either with or without suffix\r
-   * \r
-   * @param alf\r
-   *          - where selection is\r
-   * @param format\r
-   *          - format of alignment file\r
-   * @param suffix\r
-   *          - "true" to append /start-end string to each sequence ID\r
-   * @return selected sequences as flat file or empty string if there was no\r
-   *         current selection\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getSelectedSequencesAsAlignment(java.lang.String, java.lang.String)\r
    */\r
   public String getSelectedSequencesAsAlignment(String format, String suffix)\r
   {\r
@@ -474,18 +418,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
             format, suffix);\r
   }\r
 \r
-  /**\r
-   * get sequences selected in alf and return their alignment in format 'format'\r
-   * either with or without suffix\r
-   * \r
-   * @param alf\r
-   *          - where selection is\r
-   * @param format\r
-   *          - format of alignment file\r
-   * @param suffix\r
-   *          - "true" to append /start-end string to each sequence ID\r
-   * @return selected sequences as flat file or empty string if there was no\r
-   *         current selection\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getSelectedSequencesAsAlignmentFrom(jalview.appletgui.AlignFrame, java.lang.String, java.lang.String)\r
    */\r
   public String getSelectedSequencesAsAlignmentFrom(AlignFrame alf,\r
           String format, String suffix)\r
@@ -508,16 +442,25 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     return "";\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getAlignmentOrder()\r
+   */\r
   public String getAlignmentOrder()\r
   {\r
     return getAlignmentOrderFrom(getDefaultTargetFrame());\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getAlignmentOrderFrom(jalview.appletgui.AlignFrame)\r
+   */\r
   public String getAlignmentOrderFrom(AlignFrame alf)\r
   {\r
     return getAlignmentOrderFrom(alf, separator);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getAlignmentOrderFrom(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
   public String getAlignmentOrderFrom(AlignFrame alf, String sep)\r
   {\r
     AlignmentI alorder = alf.getAlignViewport().getAlignment();\r
@@ -529,16 +472,25 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     return arrayToSeparatorList(order);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#orderBy(java.lang.String, java.lang.String)\r
+   */\r
   public String orderBy(String order, String undoName)\r
   {\r
     return orderBy(order, undoName, separator);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#orderBy(java.lang.String, java.lang.String, java.lang.String)\r
+   */\r
   public String orderBy(String order, String undoName, String sep)\r
   {\r
     return orderAlignmentBy(getDefaultTargetFrame(), order, undoName, sep);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#orderAlignmentBy(jalview.appletgui.AlignFrame, java.lang.String, java.lang.String, java.lang.String)\r
+   */\r
   public String orderAlignmentBy(AlignFrame alf, String order,\r
           String undoName, String sep)\r
   {\r
@@ -588,21 +540,33 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     return alf.sortBy(aorder, undoName) ? "true" : "";\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getAlignment(java.lang.String)\r
+   */\r
   public String getAlignment(String format)\r
   {\r
     return getAlignmentFrom(getDefaultTargetFrame(), format, "true");\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getAlignmentFrom(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
   public String getAlignmentFrom(AlignFrame alf, String format)\r
   {\r
     return getAlignmentFrom(alf, format, "true");\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getAlignment(java.lang.String, java.lang.String)\r
+   */\r
   public String getAlignment(String format, String suffix)\r
   {\r
     return getAlignmentFrom(getDefaultTargetFrame(), format, suffix);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getAlignmentFrom(jalview.appletgui.AlignFrame, java.lang.String, java.lang.String)\r
+   */\r
   public String getAlignmentFrom(AlignFrame alf, String format,\r
           String suffix)\r
   {\r
@@ -620,11 +584,17 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     }\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#loadAnnotation(java.lang.String)\r
+   */\r
   public void loadAnnotation(String annotation)\r
   {\r
     loadAnnotationFrom(getDefaultTargetFrame(), annotation);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#loadAnnotationFrom(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
   public void loadAnnotationFrom(AlignFrame alf, String annotation)\r
   {\r
     if (new AnnotationFile().readAnnotationFile(alf.getAlignViewport()\r
@@ -639,53 +609,72 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     }\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getFeatures(java.lang.String)\r
+   */\r
   public String getFeatures(String format)\r
   {\r
     return getFeaturesFrom(getDefaultTargetFrame(), format);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getFeaturesFrom(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
   public String getFeaturesFrom(AlignFrame alf, String format)\r
   {\r
     return alf.outputFeatures(false, format);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getAnnotation()\r
+   */\r
   public String getAnnotation()\r
   {\r
     return getAnnotationFrom(getDefaultTargetFrame());\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getAnnotationFrom(jalview.appletgui.AlignFrame)\r
+   */\r
   public String getAnnotationFrom(AlignFrame alf)\r
   {\r
     return alf.outputAnnotations(false);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#newView()\r
+   */\r
   public AlignFrame newView()\r
   {\r
     return newViewFrom(getDefaultTargetFrame());\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#newView(java.lang.String)\r
+   */\r
   public AlignFrame newView(String name)\r
   {\r
     return newViewFrom(getDefaultTargetFrame(), name);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#newViewFrom(jalview.appletgui.AlignFrame)\r
+   */\r
   public AlignFrame newViewFrom(AlignFrame alf)\r
   {\r
     return alf.newView(null);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#newViewFrom(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
   public AlignFrame newViewFrom(AlignFrame alf, String name)\r
   {\r
     return alf.newView(name);\r
   }\r
 \r
-  /**\r
-   * \r
-   * @param text\r
-   *          alignment file as a string\r
-   * @param title\r
-   *          window title\r
-   * @return null or new alignment frame\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#loadAlignment(java.lang.String, java.lang.String)\r
    */\r
   public AlignFrame loadAlignment(String text, String title)\r
   {\r
@@ -708,6 +697,9 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     return null;\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#setMouseoverListener(java.lang.String)\r
+   */\r
   public void setMouseoverListener(String listener)\r
   {\r
     setMouseoverListener(currentAlignFrame, listener);\r
@@ -715,6 +707,9 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
 \r
   private Vector<jalview.javascript.JSFunctionExec> javascriptListeners = new Vector<jalview.javascript.JSFunctionExec>();\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#setMouseoverListener(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
   public void setMouseoverListener(AlignFrame af, String listener)\r
   {\r
     if (listener != null)\r
@@ -742,11 +737,17 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     }\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#setSelectionListener(java.lang.String)\r
+   */\r
   public void setSelectionListener(String listener)\r
   {\r
     setSelectionListener(null, listener);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#setSelectionListener(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
   public void setSelectionListener(AlignFrame af, String listener)\r
   {\r
     if (listener != null)\r
@@ -774,6 +775,9 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     }\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#setStructureListener(java.lang.String, java.lang.String)\r
+   */\r
   public void setStructureListener(String listener, String modelSet)\r
   {\r
     if (listener != null)\r
@@ -800,14 +804,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     }\r
   }\r
 \r
-  /**\r
-   * remove any callback using the given listener function and associated with\r
-   * the given alignFrame (or null for all callbacks)\r
-   * \r
-   * @param af\r
-   *          (may be null)\r
-   * @param listener\r
-   *          (may be null)\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#removeJavascriptListener(jalview.appletgui.AlignFrame, java.lang.String)\r
    */\r
   public void removeJavascriptListener(AlignFrame af, String listener)\r
   {\r
@@ -908,13 +906,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     StructureSelectionManager.release(this);\r
   }\r
   private jalview.javascript.JSFunctionExec jsFunctionExec;\r
-  /**\r
-   * send a mouseover message to all the alignment windows associated with the\r
-   * given residue in the pdbfile\r
-   * \r
-   * @param pdbResNum\r
-   * @param chain\r
-   * @param pdbfile\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#mouseOverStructure(java.lang.String, java.lang.String, java.lang.String)\r
    */\r
   public void mouseOverStructure(String pdbResNum, String chain,\r
           String pdbfile)\r
@@ -935,12 +928,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
               + pdbResNum + "'");\r
     }\r
   }\r
-  /**\r
-   * adjust horizontal/vertical scroll to the make the given location the top left hand corner for given current view\r
-   * \r
-   * @param alf\r
-   * @param topRow\r
-   * @param leftHandColumn\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#scrollViewToIn(jalview.appletgui.AlignFrame, java.lang.String, java.lang.String)\r
    */\r
   public void scrollViewToIn(AlignFrame alf, String topRow, String leftHandColumn)\r
   {\r
@@ -949,11 +938,44 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
       \r
     } catch (Exception ex)\r
     {\r
-      System.err.println("Couldn't parse integer arguments (topRow='"+topRow+"' and leftHandColumn='"+leftHandColumn+"'");\r
+      System.err.println("Couldn't parse integer arguments (topRow='"+topRow+"' and leftHandColumn='"+leftHandColumn+"')");\r
       ex.printStackTrace();\r
     }\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.javascript.JalviewLiteJsApi#scrollViewToRowIn(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
+  @Override\r
+  public void scrollViewToRowIn(AlignFrame alf, String topRow)\r
+  {\r
+    try {\r
+      alf.scrollToRow(new Integer(topRow).intValue());\r
+      \r
+    } catch (Exception ex)\r
+    {\r
+      System.err.println("Couldn't parse integer arguments (topRow='"+topRow+"')");\r
+      ex.printStackTrace();\r
+    }\r
+  }\r
+\r
+  /* (non-Javadoc)\r
+   * @see jalview.javascript.JalviewLiteJsApi#scrollViewToColumnIn(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
+  @Override\r
+  public void scrollViewToColumnIn(AlignFrame alf, String leftHandColumn)\r
+  {\r
+\r
+    try {\r
+      alf.scrollToColumn(new Integer(leftHandColumn).intValue());\r
+      \r
+    } catch (Exception ex)\r
+    {\r
+      System.err.println("Couldn't parse integer arguments (leftHandColumn='"+leftHandColumn+"')");\r
+      ex.printStackTrace();\r
+    } \r
+  }\r
+\r
   // //////////////////////////////////////////////\r
   // //////////////////////////////////////////////\r
 \r
@@ -1880,7 +1902,7 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     {\r
       if (file.indexOf("://") == -1)\r
       {\r
-        String fl = applet.getDocumentBase() + file;\r
+        String fl = applet.resolveUrlForLocalOrAbsolute(file, getDocumentBase());\r
         try\r
         {\r
           if (new java.net.URL(fl).openStream() != null)\r
@@ -1896,20 +1918,17 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
         {\r
         }\r
         ;\r
-        fl = applet.getCodeBase() + file;\r
+        fl = applet.resolveUrlForLocalOrAbsolute(file, getCodeBase());\r
         try\r
         {\r
           if (new java.net.URL(fl).openStream() != null)\r
           {\r
             if (debug)\r
             {\r
-              if (debug)\r
-              {\r
-                System.err.println("Prepended codebase for resource: '"\r
-                        + file + "'");\r
-              }\r
-              return fl;\r
+              System.err.println("Prepended codebase for resource: '"\r
+                      + file + "'");\r
             }\r
+            return fl;\r
           }\r
         } catch (Exception x)\r
         {\r
@@ -2070,9 +2089,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     return "" + separator;\r
   }\r
 \r
-  /**\r
-   * @return\r
-   * @see jalview.appletgui.AlignFrame#getFeatureGroups()\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getFeatureGroups()\r
    */\r
   public String getFeatureGroups()\r
   {\r
@@ -2081,11 +2099,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     return lst;\r
   }\r
 \r
-  /**\r
-   * @param alf\r
-   *          alignframe to get feature groups on\r
-   * @return\r
-   * @see jalview.appletgui.AlignFrame#getFeatureGroups()\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getFeatureGroupsOn(jalview.appletgui.AlignFrame)\r
    */\r
   public String getFeatureGroupsOn(AlignFrame alf)\r
   {\r
@@ -2093,10 +2108,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     return lst;\r
   }\r
 \r
-  /**\r
-   * @param visible\r
-   * @return\r
-   * @see jalview.appletgui.AlignFrame#getFeatureGroupsOfState(boolean)\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getFeatureGroupsOfState(boolean)\r
    */\r
   public String getFeatureGroupsOfState(boolean visible)\r
   {\r
@@ -2104,25 +2117,16 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
             .getFeatureGroupsOfState(visible));\r
   }\r
 \r
-  /**\r
-   * @param alf\r
-   *          align frame to get groups of state visible\r
-   * @param visible\r
-   * @return\r
-   * @see jalview.appletgui.AlignFrame#getFeatureGroupsOfState(boolean)\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getFeatureGroupsOfStateOn(jalview.appletgui.AlignFrame, boolean)\r
    */\r
   public String getFeatureGroupsOfStateOn(AlignFrame alf, boolean visible)\r
   {\r
     return arrayToSeparatorList(alf.getFeatureGroupsOfState(visible));\r
   }\r
 \r
-  /**\r
-   * @param groups\r
-   *          tab separated list of group names\r
-   * @param state\r
-   *          true or false\r
-   * @see jalview.appletgui.AlignFrame#setFeatureGroupState(java.lang.String[],\r
-   *      boolean)\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#setFeatureGroupStateOn(jalview.appletgui.AlignFrame, java.lang.String, boolean)\r
    */\r
   public void setFeatureGroupStateOn(AlignFrame alf, String groups,\r
           boolean state)\r
@@ -2132,26 +2136,24 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     alf.setFeatureGroupState(separatorListToArray(groups), st);\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#setFeatureGroupState(java.lang.String, boolean)\r
+   */\r
   public void setFeatureGroupState(String groups, boolean state)\r
   {\r
     setFeatureGroupStateOn(getDefaultTargetFrame(), groups, state);\r
   }\r
 \r
-  /**\r
-   * List separator string\r
-   * \r
-   * @return the separator\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getSeparator()\r
    */\r
   public String getSeparator()\r
   {\r
     return separator;\r
   }\r
 \r
-  /**\r
-   * List separator string\r
-   * \r
-   * @param separator\r
-   *          the separator to set. empty string will reset separator to default\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#setSeparator(java.lang.String)\r
    */\r
   public void setSeparator(String separator)\r
   {\r
@@ -2191,21 +2193,8 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     return false;\r
   }\r
 \r
-  /**\r
-   * bind a pdb file to a sequence in the given alignFrame.\r
-   * \r
-   * @param alFrame\r
-   *          - null or specific alignFrame. This specifies the dataset that\r
-   *          will be searched for a seuqence called sequenceId\r
-   * @param sequenceId\r
-   *          - sequenceId within the dataset.\r
-   * @param pdbEntryString\r
-   *          - the short name for the PDB file\r
-   * @param pdbFile\r
-   *          - pdb file - either a URL or a valid PDB file.\r
-   * @return true if binding was as success TODO: consider making an exception\r
-   *         structure for indicating when PDB parsing or sequenceId location\r
-   *         fails.\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#addPdbFile(jalview.appletgui.AlignFrame, java.lang.String, java.lang.String, java.lang.String)\r
    */\r
   public boolean addPdbFile(AlignFrame alFrame, String sequenceId,\r
           String pdbEntryString, String pdbFile)\r
@@ -2243,6 +2232,9 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     for (int i=0;i<colcommands.length;i++) { l[i] = colcommands[i].hashCode();}\r
     jshashes.put(messageclass+"|"+viewId,l);\r
   }\r
+  /* (non-Javadoc)\r
+   * @see jalview.bin.JalviewLiteJsApi#getJsMessage(java.lang.String, java.lang.String)\r
+   */\r
   public String getJsMessage(String messageclass, String viewId)\r
   {\r
     Hashtable<String,String[]> msgset = jsmessages.get(messageclass);\r
@@ -2287,6 +2279,109 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
   }\r
 \r
   /**\r
+   * return the given colour value parameter or the given default if parameter not given\r
+   * @param colparam\r
+   * @param defcolour\r
+   * @return\r
+   */\r
+  public Color getDefaultColourParameter(String colparam, Color defcolour)\r
+  {\r
+    String colprop = getParameter(colparam);\r
+    if (colprop==null || colprop.trim().length()==0)\r
+    {\r
+      return defcolour;\r
+    }\r
+    Color col = jalview.schemes.ColourSchemeProperty.getAWTColorFromName(colprop);\r
+    if (col==null)\r
+    {\r
+      try {\r
+        col = new jalview.schemes.UserColourScheme(colprop).findColour('A');\r
+      } catch (Exception ex)\r
+      {\r
+        System.err.println("Couldn't parse '"+colprop+"' as a colour for "+colparam);\r
+        col=null;\r
+      }\r
+    }\r
+    return (col==null) ? defcolour: col;\r
+\r
+  }\r
+\r
+  public void openJalviewHelpUrl()\r
+  {\r
+    String helpUrl=getParameter("jalviewhelpurl");\r
+    if (helpUrl==null || helpUrl.trim().length()<5)\r
+    {\r
+      helpUrl="http://www.jalview.org/help.html";\r
+    }\r
+    showURL(helpUrl, "HELP");    \r
+  }\r
+  \r
+  /**\r
+   * form a complete URL given a path to a resource and a reference location on the same server\r
+   * @param url - an absolute path on the same server as localref or a document located relative to localref\r
+   * @param localref - a URL on the same server as url\r
+   * @return a complete URL for the resource located by url\r
+   */\r
+  private String resolveUrlForLocalOrAbsolute(String url, URL localref)\r
+  {\r
+    String codebase = localref.toString();\r
+    if (url.indexOf("/") == 0)\r
+    {\r
+      url = codebase.substring(0, codebase.length()\r
+              - localref.getFile().length())\r
+              + url;\r
+    }\r
+    else\r
+    {\r
+      url = localref + url;\r
+    }\r
+    return url;\r
+  }\r
+\r
+  /**\r
+   * open a URL in the browser - resolving it according to relative refs and coping with javascript: protocol if necessary.\r
+   * @param url\r
+   * @param target\r
+   */\r
+  public void showURL(String url, String target)\r
+  {\r
+    try\r
+    {\r
+      if (url.indexOf(":") == -1)\r
+      {\r
+        // TODO: verify (Bas Vroling bug) prepend codebase or server URL to\r
+        // form valid URL\r
+        // Should really use docbase, not codebase.\r
+        URL prepend;\r
+        url = resolveUrlForLocalOrAbsolute(url, prepend=getDefaultParameter("resolvetocodebase", false) ? getDocumentBase() : getCodeBase());\r
+        if (debug) {\r
+          System.err.println("Show url (prepended "+prepend+" - toggle resolvetocodebase if code/docbase resolution is wrong): " + url);\r
+        }\r
+      }\r
+      else\r
+      {\r
+        if (debug) {\r
+          System.err.println("Show url: " + url);\r
+        }\r
+      }\r
+      if (url.indexOf("javascript:") == 0)\r
+      {\r
+        // no target for the javascript context\r
+        getAppletContext().showDocument(\r
+                new java.net.URL(url));\r
+      }\r
+      else\r
+      {\r
+        getAppletContext().showDocument(\r
+                new java.net.URL(url), target);\r
+      }\r
+    } catch (Exception ex)\r
+    {\r
+      ex.printStackTrace();\r
+    }\r
+  }\r
+\r
+  /**\r
    * bind structures in a viewer to any matching sequences in an alignFrame (use\r
    * sequenceIds to limit scope of search to specific sequences)\r
    * \r