JAL-4307 View->Ligands submenu, implementation for Jmol and documentation
[jalview.git] / src / jalview / structure / StructureCommandsI.java
index 359eac6..8ba94b0 100644 (file)
@@ -1,9 +1,27 @@
+/*
+ * 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.structure;
 
-import jalview.api.AlignmentViewPanel;
-import jalview.datamodel.SequenceI;
-
 import java.awt.Color;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -17,47 +35,11 @@ import java.util.Map;
 public interface StructureCommandsI
 {
   /**
-   * Data bean class to simplify parameterisation in superposeStructures
-   */
-  public class SuperposeData
-  {
-    public String filename;
-
-    public String pdbId;
-
-    public String chain = "";
-
-    public boolean isRna;
-
-    /*
-     * The pdb residue number (if any) mapped to columns of the alignment
-     */
-    public int[] pdbResNo; // or use SparseIntArray?
-
-    public int modelNo;
-
-    /**
-     * Constructor
-     * 
-     * @param width
-     *          width of alignment (number of columns that may potentially
-     *          participate in superposition)
-     * @param model
-     *          structure viewer model number
-     */
-    public SuperposeData(int width, int model)
-    {
-      pdbResNo = new int[width];
-      modelNo = model;
-    }
-  }
-
-  /**
    * Returns the command to colour by chain
    * 
    * @return
    */
-  String colourByChain();
+  StructureCommandI colourByChain();
 
   /**
    * Returns the command to colour residues using a charge-based scheme:
@@ -70,7 +52,7 @@ public interface StructureCommandsI
    * 
    * @return
    */
-  String colourByCharge();
+  List<StructureCommandI> colourByCharge();
 
   /**
    * Returns the command to colour residues with the colours provided in the
@@ -79,7 +61,7 @@ public interface StructureCommandsI
    * @param colours
    * @return
    */
-  String colourByResidues(Map<String, Color> colours);
+  List<StructureCommandI> colourByResidues(Map<String, Color> colours);
 
   /**
    * Returns the command to set the background colour of the structure viewer
@@ -87,7 +69,7 @@ public interface StructureCommandsI
    * @param col
    * @return
    */
-  String setBackgroundColour(Color col);
+  StructureCommandI setBackgroundColour(Color col);
 
   /**
    * Returns commands to colour mapped residues of structures according to
@@ -98,49 +80,39 @@ public interface StructureCommandsI
    * @return
    */
 
-  String[] colourBySequence(Map<Object, AtomSpecModel> colourMap);
+  List<StructureCommandI> colourBySequence(
+          Map<Object, AtomSpecModel> colourMap);
 
   /**
    * Returns a command to centre the display in the structure viewer
    * 
    * @return
    */
-  String focusView();
+  StructureCommandI focusView();
 
   /**
    * Returns a command to show only the selected chains. The items in the input
-   * list should be formatted as "modelno:chainid".
+   * list should be formatted as "modelid:chainid".
    * 
    * @param toShow
    * @return
    */
-  String showChains(List<String> toShow);
-
-  /**
-   * Returns zero, one or more commands to set attributes on mapped residues in
-   * the structure viewer for any features present and displayed in Jalview
-   * 
-   * @param ssm
-   * @param files
-   * @param sequence
-   * @param avp
-   * @return
-   */
-  String[] setAttributesForFeatures(StructureSelectionManager ssm,
-          String[] files, SequenceI[][] sequence, AlignmentViewPanel avp);
+  List<StructureCommandI> showChains(List<String> toShow);
 
   /**
    * Returns a command to superpose structures by closest positioning of
-   * residues in {@code atomSpec} to the corresponding residues in {@ refAtoms}.
-   * If wanted, this may include commands to visually highlight the residues
-   * that were used for the superposition.
+   * residues in {@code atomSpec} to the corresponding residues in
+   * {@code refAtoms}. If wanted, this may include commands to visually
+   * highlight the residues that were used for the superposition.
    * 
    * @param refAtoms
    * @param atomSpec
+   * @param backbone
+   *          - superpose based on which kind of atomType
    * @return
    */
-  String superposeStructures(AtomSpecModel refAtoms,
-          AtomSpecModel atomSpec);
+  List<StructureCommandI> superposeStructures(AtomSpecModel refAtoms,
+          AtomSpecModel atomSpec, AtomSpecType backbone);
 
   /**
    * Returns a command to open a file of commands at the given path
@@ -148,7 +120,7 @@ public interface StructureCommandsI
    * @param path
    * @return
    */
-  String openCommandFile(String path);
+  StructureCommandI openCommandFile(String path);
 
   /**
    * Returns a command to save the current viewer session state to the given
@@ -157,7 +129,12 @@ public interface StructureCommandsI
    * @param filepath
    * @return
    */
-  String saveSession(String filepath);
+  StructureCommandI saveSession(String filepath);
+
+  enum AtomSpecType
+  {
+    RESIDUE_ONLY, ALPHA, PHOSPHATE
+  };
 
   /**
    * Returns a representation of the atom set represented by the model, in
@@ -165,10 +142,10 @@ public interface StructureCommandsI
    * Alpha Carbon (peptide) or Phosphorous (rna) only
    * 
    * @param model
-   * @param alphaOnly
+   * @param specType
    * @return
    */
-  String getAtomSpec(AtomSpecModel model, boolean alphaOnly);
+  String getAtomSpec(AtomSpecModel model, AtomSpecType specType);
 
   /**
    * Returns the lowest model number used by the structure viewer (likely 0 or
@@ -181,9 +158,105 @@ public interface StructureCommandsI
   int getModelStartNo();
 
   /**
-   * Show only the backbone of the peptide (cartoons in Jmol, chain in Chimera)
+   * Returns command(s) to show only the backbone of the peptide (cartoons in
+   * Jmol, chain in Chimera)
+   * 
+   * @return
+   */
+  List<StructureCommandI> showBackbone();
+
+  /**
+   * Returns a command to open a file at the given path
+   * 
+   * @param file
+   * @return
+   */
+  // refactor if needed to distinguish loading data or session files
+  StructureCommandI loadFile(String file);
+
+  /**
+   * Returns commands to set atom attributes or properties, given a map of
+   * Jalview features as {featureType, {featureValue, AtomSpecModel}}. The
+   * assumption is that one command can be constructed for each feature type and
+   * value combination, to apply it to one or more residues.
+   * 
+   * @param featureValues
+   * @return
+   */
+  List<StructureCommandI> setAttributes(
+          Map<String, Map<Object, AtomSpecModel>> featureValues);
+
+  /**
+   * Returns command to open a saved structure viewer session file, or null if
+   * not supported
+   * 
+   * @param filepath
+   * @return
+   */
+  StructureCommandI openSession(String filepath);
+  
+  /**
+   * Returns command to restore a previously saved version of an existing structure viewer session file. 
+   * Default implementation calls 'openSession' 
+   * @param filePath
+   * @return
+   */
+  StructureCommandI restoreSession(String filePath);
+
+
+  /**
+   * Returns a command to ask the viewer to close down
+   * 
+   * @return
+   */
+  StructureCommandI closeViewer();
+
+  /**
+   * Returns one or more commands to ask the viewer to notify model or selection
+   * changes to the given uri. Returns null if this is not supported by the
+   * structure viewer.
    * 
+   * @param uri
    * @return
    */
-  String showBackbone();
+  List<StructureCommandI> startNotifications(String uri);
+
+  /**
+   * Returns one or more commands to ask the viewer to stop notifying model or
+   * selection changes. Returns null if this is not supported by the structure
+   * viewer.
+   * 
+   * @return
+   */
+  List<StructureCommandI> stopNotifications();
+
+  /**
+   * Returns a command to ask the viewer for its current residue selection, or
+   * null if no such command is supported
+   * 
+   * @return
+   */
+  StructureCommandI getSelectedResidues();
+
+  /**
+   * Returns a command to list the unique names of residue attributes, or null
+   * if no such command is supported
+   * 
+   * @return
+   */
+  StructureCommandI listResidueAttributes();
+
+  /**
+   * Returns a command to list residues with an attribute of the given name,
+   * with attribute value, or null if no such command is supported
+   * 
+   * @return
+   */
+  StructureCommandI getResidueAttributes(String attName);
+
+  List<StructureCommandI> centerViewOn(List<AtomSpecModel> residues);
+
+  default List<StructureCommandI> showHetatms(List<String> toShow) {
+    return Collections.EMPTY_LIST;
+  }
 }