JAL-2360 refactoring for JalviewColourScheme enum,
[jalview.git] / src / jalview / schemes / ResidueColourScheme.java
index e675a27..c1eeafa 100755 (executable)
@@ -21,6 +21,7 @@
 package jalview.schemes;
 
 import jalview.analysis.Conservation;
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.ProfileI;
 import jalview.datamodel.ProfilesI;
@@ -38,6 +39,8 @@ import java.util.Map;
  */
 public class ResidueColourScheme implements ColourSchemeI
 {
+  public static final String NONE = "None";
+
   final int[] symbolIndex;
 
   boolean conservationColouring = false;
@@ -101,6 +104,16 @@ public class ResidueColourScheme implements ColourSchemeI
   }
 
   /**
+   * Returns the colour for symbol 'A'. Intended for use in a 'fixed colour'
+   * colour scheme (for example a feature colour).
+   */
+  @Override
+  public Color findColour()
+  {
+    return findColour('A');
+  }
+
+  /**
    * Find a colour without an index in a sequence
    */
   @Override
@@ -340,4 +353,76 @@ public class ResidueColourScheme implements ColourSchemeI
               new String[] { getClass().getName() }), q);
     }
   }
+
+  /**
+   * Answers false if the colour scheme is nucleotide or peptide specific, and
+   * the data does not match, else false. Override to modify or extend this test
+   * as required.
+   */
+  @Override
+  public boolean isApplicableTo(AnnotatedCollectionI ac)
+  {
+    if (!isPeptideSpecific() && !isNucleotideSpecific())
+    {
+      return true;
+    }
+
+    /*
+     * inspect the data context (alignment dataset) for residue type
+     */
+    boolean nucleotide = false;
+    AnnotatedCollectionI context = ac.getContext();
+    if (context != null)
+    {
+      if (context instanceof AlignmentI)
+      {
+        nucleotide = ((AlignmentI) context).isNucleotide();
+      }
+      else
+      {
+        // not sure what's going on, play safe
+        return true;
+      }
+    }
+    else if (ac instanceof AlignmentI)
+    {
+      nucleotide = ((AlignmentI) ac).isNucleotide();
+    }
+    else
+    {
+      return true;
+    }
+
+    /*
+     * does data type match colour scheme type?
+     */
+    return (nucleotide && isNucleotideSpecific())
+            || (!nucleotide && isPeptideSpecific());
+  }
+
+  /**
+   * Answers true if the colour scheme is normally only for peptide data
+   * 
+   * @return
+   */
+  public boolean isPeptideSpecific()
+  {
+    return false;
+  }
+
+  /**
+   * Answers true if the colour scheme is normally only for nucleotide data
+   * 
+   * @return
+   */
+  public boolean isNucleotideSpecific()
+  {
+    return false;
+  }
+
+  @Override
+  public String getSchemeName()
+  {
+    return "Residue";
+  }
 }