JAL-3210 Improvements to eclipse detection. New src tree and SwingJS updated from...
[jalview.git] / src / jalview / javascript / JalviewLiteJsApi.java
index 02da9d4..3ce2c9f 100644 (file)
@@ -1,12 +1,32 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$);
+ * Copyright (C); $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option); any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.javascript;
 
-import jalview.appletgui.AlignFrame;
+import jalview.api.AlignFrameI;
 
 /**
  * The following public methods may be called
  * externally, eg via javascript in an HTML page.
  * 
- * <br><em>TODO: introduce abstract interface for jalview.appletgui.AlignFrame</em><br>
+ * <br><em>TODO: introduce abstract interface for jalview.appletgui.AlignFrameI</em><br>
  * 
  * Most function arguments are strings, which contain serialised versions of lists.
  * Lists of things are separated by a separator character - either the default or a user supplied one.
@@ -15,14 +35,14 @@ import jalview.appletgui.AlignFrame;
 
 /**
  * @author jimp
- *
+ * 
  */
 public interface JalviewLiteJsApi
 {
 
   /**
    * @return String list of selected sequence IDs, each terminated by the
-   *         'boolean not' character (""+0x00AC) or (&#172;)
+   *         'boolean not' character (""+0x00AC); or (&#172;);
    */
   public abstract String getSelectedSequences();
 
@@ -36,12 +56,12 @@ public interface JalviewLiteJsApi
 
   /**
    * @param alf
-   *          alignframe containing selection
+   *          AlignFrameI containing selection
    * @return String list of selected sequence IDs, each terminated by current
    *         default separator sequence
    * 
    */
-  public abstract String getSelectedSequencesFrom(AlignFrame alf);
+  public abstract String getSelectedSequencesFrom(AlignFrameI alf);
 
   /**
    * get list of selected sequence IDs separated by given separator
@@ -53,7 +73,8 @@ public interface JalviewLiteJsApi
    * @return String list of selected sequence IDs, each terminated by the given
    *         separator
    */
-  public abstract String getSelectedSequencesFrom(AlignFrame alf, String sep);
+  public abstract String getSelectedSequencesFrom(AlignFrameI alf,
+          String sep);
 
   /**
    * 
@@ -78,7 +99,7 @@ public interface JalviewLiteJsApi
    *          false, blank or something else - indicate if position is an
    *          alignment column or unaligned sequence position
    */
-  public abstract void highlightIn(AlignFrame alf, String sequenceId,
+  public abstract void highlightIn(AlignFrameI alf, String sequenceId,
           String position, String alignedPosition);
 
   /**
@@ -100,7 +121,8 @@ public interface JalviewLiteJsApi
    * @param sep
    *          separator between toselect fields
    */
-  public abstract void select(String sequenceIds, String columns, String sep);
+  public abstract void select(String sequenceIds, String columns,
+          String sep);
 
   /**
    * select regions of the given alignment frame
@@ -111,7 +133,7 @@ public interface JalviewLiteJsApi
    * @param sep
    *          separator between toselect fields
    */
-  public abstract void selectIn(AlignFrame alf, String sequenceIds,
+  public abstract void selectIn(AlignFrameI alf, String sequenceIds,
           String columns);
 
   /**
@@ -123,11 +145,11 @@ public interface JalviewLiteJsApi
    * @param sep
    *          separator between toselect fields
    */
-  public abstract void selectIn(AlignFrame alf, String sequenceIds,
+  public abstract void selectIn(AlignFrameI alf, String sequenceIds,
           String columns, String sep);
 
   /**
-   * get sequences selected in current alignFrame and return their alignment in
+   * get sequences selected in current AlignFrameI and return their alignment in
    * format 'format' either with or without suffix
    * 
    * @param alf
@@ -156,34 +178,47 @@ public interface JalviewLiteJsApi
    *         current selection
    */
   public abstract String getSelectedSequencesAsAlignmentFrom(
-          AlignFrame alf, String format, String suffix);
+          AlignFrameI alf,
+          String format, String suffix);
 
   /**
-   * get a separator separated list of sequence IDs reflecting the order of the current alignment 
+   * get a separator separated list of sequence IDs reflecting the order of the
+   * current alignment
+   * 
    * @return
    */
   public abstract String getAlignmentOrder();
+
   /**
-   * get a separator separated list of sequence IDs reflecting the order of the alignment in alf 
-   *
+   * get a separator separated list of sequence IDs reflecting the order of the
+   * alignment in alf
+   * 
    * @param alf
    * @return
    */
-  public abstract String getAlignmentOrderFrom(AlignFrame alf);
+  public abstract String getAlignmentOrderFrom(AlignFrameI alf);
 
   /**
-   * get a sep separated list of sequence IDs reflecting the order of the alignment in alf 
+   * get a sep separated list of sequence IDs reflecting the order of the
+   * alignment in alf
    * 
    * @param alf
-   * @param sep - separator to use
+   * @param sep
+   *          - separator to use
    * @return
    */
-  public abstract String getAlignmentOrderFrom(AlignFrame alf, String sep);
+  public abstract String getAlignmentOrderFrom(AlignFrameI alf,
+          String sep);
+
   /**
    * re-order the current alignment using the given list of sequence IDs
-   * @param order - sep separated list
-   * @param undoName - string to use when referring to ordering action in undo buffer
-   * @return 'true' if alignment was actually reordered. empty string if alignment did not contain sequences.
+   * 
+   * @param order
+   *          - sep separated list
+   * @param undoName
+   *          - string to use when referring to ordering action in undo buffer
+   * @return 'true' if alignment was actually reordered. empty string if
+   *         alignment did not contain sequences.
    */
   public abstract String orderBy(String order, String undoName);
 
@@ -196,13 +231,15 @@ public interface JalviewLiteJsApi
    * @param undoName
    *          - string to use when referring to ordering action in undo buffer
    * @param sep
-   * @return 'true' if alignment was actually reordered. empty string if alignment did not contain sequences.
+   * @return 'true' if alignment was actually reordered. empty string if
+   *         alignment did not contain sequences.
    */
-  public abstract String orderBy(String order, String undoName, String sep);
+  public abstract String orderBy(String order, String undoName,
+          String sep);
 
   /**
-   * re-order the given alignment using the given list of sequence IDs
-   * separated by sep
+   * re-order the given alignment using the given list of sequence IDs separated
+   * by sep
    * 
    * @param alf
    * @param order
@@ -210,13 +247,16 @@ public interface JalviewLiteJsApi
    * @param undoName
    *          - string to use when referring to ordering action in undo buffer
    * @param sep
-   * @return 'true' if alignment was actually reordered. empty string if alignment did not contain sequences.
+   * @return 'true' if alignment was actually reordered. empty string if
+   *         alignment did not contain sequences.
    */
-  public abstract String orderAlignmentBy(AlignFrame alf, String order,
+  public abstract String orderAlignmentBy(AlignFrameI alf, String order,
           String undoName, String sep);
 
   /**
-   * get alignment as format (format names FASTA, BLC, CLUSTAL, MSF, PILEUP, PFAM - see jalview.io.AppletFormatAdapter for full list)
+   * get alignment as format (format names FASTA, BLC, CLUSTAL, MSF, PILEUP,
+   * PFAM - see jalview.io.AppletFormatAdapter for full list);
+   * 
    * @param format
    * @return
    */
@@ -224,14 +264,16 @@ public interface JalviewLiteJsApi
 
   /**
    * get alignment displayed in alf as format
+   * 
    * @param alf
    * @param format
    * @return
    */
-  public abstract String getAlignmentFrom(AlignFrame alf, String format);
+  public abstract String getAlignmentFrom(AlignFrameI alf, String format);
 
   /**
    * get alignment as format with jalview start-end sequence suffix appended
+   * 
    * @param format
    * @param suffix
    * @return
@@ -239,84 +281,124 @@ public interface JalviewLiteJsApi
   public abstract String getAlignment(String format, String suffix);
 
   /**
-   * get alignment displayed in alf as format 
-   *  with or without the jalview start-end sequence suffix appended
+   * get alignment displayed in alf as format with or without the jalview
+   * start-end sequence suffix appended
+   * 
    * @param alf
    * @param format
    * @param suffix
    * @return
    */
-  public abstract String getAlignmentFrom(AlignFrame alf, String format,
+  public abstract String getAlignmentFrom(AlignFrameI alf, String format,
           String suffix);
 
   /**
    * add the given features or annotation to the current alignment
+   * 
    * @param annotation
    */
   public abstract void loadAnnotation(String annotation);
 
   /**
    * add the given features or annotation to the given alignment view
+   * 
    * @param alf
    * @param annotation
    */
-  public abstract void loadAnnotationFrom(AlignFrame alf, String annotation);
+  public abstract void loadAnnotationFrom(AlignFrameI alf,
+          String annotation);
 
   /**
-   * get the sequence features in the given format (Jalview or GFF)
+   * parse the given string as a jalview feature or GFF annotation file and
+   * optionally enable feature display on the current AlignFrameI
+   * 
+   * @param features
+   *          - gff or features file
+   * @param autoenabledisplay
+   *          - when true, feature display will be enabled if any features can
+   *          be parsed from the string.
+   */
+  public abstract void loadFeatures(String features,
+          boolean autoenabledisplay);
+
+  /**
+   * parse the given string as a jalview feature or GFF annotation file and
+   * optionally enable feature display on the given AlignFrameI.
+   * 
+   * @param alf
+   * @param features
+   *          - gff or features file
+   * @param autoenabledisplay
+   *          - when true, feature display will be enabled if any features can
+   *          be parsed from the string.
+   * @return true if data parsed as features
+   */
+  public abstract boolean loadFeaturesFrom(AlignFrameI alf, String features,
+          boolean autoenabledisplay);
+
+  /**
+   * get the sequence features in the given format (Jalview or GFF);
+   * 
    * @param format
    * @return
    */
   public abstract String getFeatures(String format);
 
   /**
-   * get the sequence features in alf in the given format (Jalview or GFF)
+   * get the sequence features in alf in the given format (Jalview or GFF);
+   * 
    * @param alf
    * @param format
    * @return
    */
-  public abstract String getFeaturesFrom(AlignFrame alf, String format);
+  public abstract String getFeaturesFrom(AlignFrameI alf, String format);
 
   /**
    * get current alignment's annotation as an annotation file
+   * 
    * @return
    */
   public abstract String getAnnotation();
 
   /**
    * get alignment view alf's annotation as an annotation file
+   * 
    * @param alf
    * @return
    */
-  public abstract String getAnnotationFrom(AlignFrame alf);
+  public abstract String getAnnotationFrom(AlignFrameI alf);
 
   /**
-   * create a new view and return the alignFrame instance
+   * create a new view and return the AlignFrameI instance
+   * 
    * @return
    */
-  public abstract AlignFrame newView();
+  public abstract AlignFrameI newView();
 
   /**
-   * create a new view named name and return the alignFrame instance
+   * create a new view named name and return the AlignFrameI instance
+   * 
    * @param name
    * @return
    */
-  public abstract AlignFrame newView(String name);
+  public abstract AlignFrameI newView(String name);
 
   /**
-   * create a new view on alf and return the alignFrame instance
+   * create a new view on alf and return the AlignFrameI instance
+   * 
    * @param alf
    * @return
    */
-  public abstract AlignFrame newViewFrom(AlignFrame alf);
+  public abstract AlignFrameI newViewFrom(AlignFrameI alf);
 
   /**
    * create a new view named name on alf
+   * 
    * @param alf
    * @param name
    * @return
    */
-  public abstract AlignFrame newViewFrom(AlignFrame alf, String name);
+  public abstract AlignFrameI newViewFrom(AlignFrameI alf, String name);
 
   /**
    * 
@@ -326,47 +408,73 @@ public interface JalviewLiteJsApi
    *          window title
    * @return null or new alignment frame
    */
-  public abstract AlignFrame loadAlignment(String text, String title);
+  public abstract AlignFrameI loadAlignment(String text, String title);
 
   /**
    * register a javascript function to handle any alignment mouseover events
-   * @param listener name of javascript function  (called with arguments [jalview.appletgui.AlignFrame,String(sequence id),String(column in alignment), String(position in sequence)]
+   * 
+   * @param listener
+   *          name of javascript function (called with arguments
+   *          [jalview.appletgui.AlignFrameI,String(sequence id);,String(column
+   *          in alignment);, String(position in sequence);]
    */
   public abstract void setMouseoverListener(String listener);
 
   /**
    * register a javascript function to handle mouseover events
-   * @param af (null or specific alignframe for which events are to be listened for)
-   * @param listener name of javascript function 
+   * 
+   * @param af
+   *          (null or specific AlignFrameI for which events are to be listened
+   *          for);
+   * @param listener
+   *          name of javascript function
    */
-  public abstract void setMouseoverListener(AlignFrame af, String listener);
+  public abstract void setMouseoverListener(AlignFrameI af,
+          String listener);
 
   /**
-   * register a javascript function to handle any alignment selection events. Events are generated when the user completes a selection event, or when the user deselects all selected regions.
-   * @param listener name of javascript function  (called with arguments [jalview.appletgui.AlignFrame, String(sequence set id), String(separator separated list of sequences which were selected), String(separator separated list of column ranges (i.e. single number or hyphenated range) that were selected)]
+   * register a javascript function to handle any alignment selection events.
+   * Events are generated when the user completes a selection event, or when the
+   * user deselects all selected regions.
+   * 
+   * @param listener
+   *          name of javascript function (called with arguments
+   *          [jalview.appletgui.AlignFrameI, String(sequence set id);,
+   *          String(separator separated list of sequences which were
+   *          selected);, String(separator separated list of column ranges (i.e.
+   *          single number or hyphenated range); that were selected);]
    */
   public abstract void setSelectionListener(String listener);
 
-  public abstract void setSelectionListener(AlignFrame af, String listener);
+  public abstract void setSelectionListener(AlignFrameI af,
+          String listener);
 
   /**
-   * register a javascript function to handle events normally routed to a Jmol structure viewer.
-   * @param listener - javascript function (arguments are variable, see jalview.javascript.MouseOverStructureListener for full details)
-   * @param modelSet - separator separated list of PDB file URIs that this viewer is handling. 
-     @see jalview.javascript.MouseOverStructureListener 
+   * register a javascript function to handle events normally routed to a Jmol
+   * structure viewer.
+   * 
+   * @param listener
+   *          - javascript function (arguments are variable, see
+   *          jalview.javascript.MouseOverStructureListener for full details);
+   * @param modelSet
+   *          - separator separated list of PDB file URIs that this viewer is
+   *          handling. These files must be in the same order they appear in
+   *          Jmol (e.g. first one is frame 1, second is frame 2, etc);.
+   * @see jalview.javascript.MouseOverStructureListener
    */
-  public abstract void setStructureListener(String listener, String modelSet);
+  public abstract void setStructureListener(String listener,
+          String modelSet);
 
   /**
    * remove any callback using the given listener function and associated with
-   * the given alignFrame (or null for all callbacks)
+   * the given AlignFrameI (or null for all callbacks);
    * 
    * @param af
-   *          (may be null)
+   *          (may be null);
    * @param listener
-   *          (may be null)
+   *          (may be null);
    */
-  public abstract void removeJavascriptListener(AlignFrame af,
+  public abstract void removeJavascriptListener(AlignFrameI af,
           String listener);
 
   /**
@@ -381,10 +489,10 @@ public interface JalviewLiteJsApi
           String pdbfile);
 
   /**
-   * bind a pdb file to a sequence in the given alignFrame.
+   * bind a pdb file to a sequence in the given AlignFrameI.
    * 
    * @param alFrame
-   *          - null or specific alignFrame. This specifies the dataset that
+   *          - null or specific AlignFrameI. This specifies the dataset that
    *          will be searched for a seuqence called sequenceId
    * @param sequenceId
    *          - sequenceId within the dataset.
@@ -396,38 +504,57 @@ public interface JalviewLiteJsApi
    *         structure for indicating when PDB parsing or sequenceId location
    *         fails.
    */
-  public abstract boolean addPdbFile(AlignFrame alFrame, String sequenceId,
+  public abstract boolean addPdbFile(AlignFrameI alFrame, String sequenceId,
           String pdbEntryString, String pdbFile);
 
   /**
-   * adjust horizontal/vertical scroll to the make the given location the top left hand corner for given current view
+   * adjust horizontal/vertical scroll to make the given location the top left
+   * hand corner for the given view
    * 
    * @param alf
    * @param topRow
    * @param leftHandColumn
    */
-  public abstract void scrollViewToIn(AlignFrame alf, String topRow,
+  public abstract void scrollViewToIn(AlignFrameI alf, String topRow,
+          String leftHandColumn);
+
+  /**
+   * adjust vertical scroll to make the given row the top one for given view
+   * 
+   * @param alf
+   * @param topRow
+   */
+  public abstract void scrollViewToRowIn(AlignFrameI alf, String topRow);
+
+  /**
+   * adjust horizontal scroll to make the given column the left one in the given
+   * view
+   * 
+   * @param alf
+   * @param leftHandColumn
+   */
+  public abstract void scrollViewToColumnIn(AlignFrameI alf,
           String leftHandColumn);
 
   /**
    * 
    * @return
-   * @see jalview.appletgui.AlignFrame#getFeatureGroups()
+   * @see jalview.appletgui.AlignFrameI#getFeatureGroups();
    */
   public abstract String getFeatureGroups();
 
   /**
    * @param alf
-   *          alignframe to get feature groups on
+   *          AlignFrameI to get feature groups on
    * @return
-   * @see jalview.appletgui.AlignFrame#getFeatureGroups()
+   * @see jalview.appletgui.AlignFrameI#getFeatureGroups();
    */
-  public abstract String getFeatureGroupsOn(AlignFrame alf);
+  public abstract String getFeatureGroupsOn(AlignFrameI alf);
 
   /**
    * @param visible
    * @return
-   * @see jalview.appletgui.AlignFrame#getFeatureGroupsOfState(boolean)
+   * @see jalview.appletgui.AlignFrameI#getFeatureGroupsOfState(boolean);
    */
   public abstract String getFeatureGroupsOfState(boolean visible);
 
@@ -436,9 +563,9 @@ public interface JalviewLiteJsApi
    *          align frame to get groups of state visible
    * @param visible
    * @return
-   * @see jalview.appletgui.AlignFrame#getFeatureGroupsOfState(boolean)
+   * @see jalview.appletgui.AlignFrameI#getFeatureGroupsOfState(boolean);
    */
-  public abstract String getFeatureGroupsOfStateOn(AlignFrame alf,
+  public abstract String getFeatureGroupsOfStateOn(AlignFrameI alf,
           boolean visible);
 
   /**
@@ -446,11 +573,12 @@ public interface JalviewLiteJsApi
    *          tab separated list of group names
    * @param state
    *          true or false
-   * @see jalview.appletgui.AlignFrame#setFeatureGroupState(java.lang.String[],
-   *      boolean)
+   * @see jalview.appletgui.AlignFrameI#setFeatureGroupState(java.lang.String[],
+   *      boolean);
    */
-  public abstract void setFeatureGroupStateOn(AlignFrame alf,
-          String groups, boolean state);
+  public abstract void setFeatureGroupStateOn(AlignFrameI alf,
+          String groups,
+          boolean state);
 
   public abstract void setFeatureGroupState(String groups, boolean state);
 
@@ -471,10 +599,31 @@ public interface JalviewLiteJsApi
 
   /**
    * Retrieve fragments of a large packet of data made available by JalviewLite.
+   * 
    * @param messageclass
    * @param viewId
    * @return next chunk of message
    */
   public abstract String getJsMessage(String messageclass, String viewId);
 
-}
\ No newline at end of file
+  /// in http://www.jalview.org/examples/jalviewLiteJs.html but missing here
+
+  // get selected sequences as alignment as format with or without start-end
+  // suffix
+  public String getSelectedSequencesAsAlignment(String format,
+          boolean suffix);
+
+  // get selected sequences as alignment from given view as format with or
+  // without start-end suffix
+  public String getSelectedSequencesAsAlignmentFrom(AlignFrameI alf,
+          String format, boolean suffix);
+
+  public String arrayToSeparatorList(String[] array);
+
+  // get a string array from a list
+  public String[] separatorListToArray(String list);
+
+  // debug flag - controls output to standard out
+  public static boolean debug = false;
+
+}