JAL-3210 Improvements to eclipse detection. New src tree and SwingJS updated from...
[jalview.git] / src / jalview / javascript / JalviewLiteJsApi.java
index 1231d18..3ce2c9f 100644 (file)
@@ -1,29 +1,32 @@
-/*******************************************************************************
- * 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
- *
+/*
+ * 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.
- *
+ * 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/>.
- *******************************************************************************/
+ * 
+ * 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.
@@ -32,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();
 
@@ -53,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
@@ -70,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);
 
   /**
    * 
@@ -95,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);
 
   /**
@@ -117,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
@@ -128,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);
 
   /**
@@ -140,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
@@ -173,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);
 
@@ -213,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
@@ -227,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
    */
@@ -241,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
@@ -256,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);
+
+  /**
+   * 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)
+   * 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);
 
   /**
    * 
@@ -343,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. 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 
+   * 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);
 
   /**
@@ -398,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.
@@ -413,52 +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 make the given location the top left hand corner for the given 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(AlignFrame alf, String topRow);
+  public abstract void scrollViewToRowIn(AlignFrameI alf, String topRow);
+
   /**
-   * adjust horizontal scroll to make the given column the left one in the given view
+   * adjust horizontal scroll to make the given column the left one in the given
+   * view
    * 
    * @param alf
    * @param leftHandColumn
    */
-  public abstract void scrollViewToColumnIn(AlignFrame alf, String 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);
 
@@ -467,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);
 
   /**
@@ -477,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);
 
@@ -502,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;
+
+}