Merge branch 'develop' into bug/JAL-2255_seq-fetcher-broken-on-linux
[jalview.git] / src / jalview / schemes / TCoffeeColourScheme.java
index 2be51c2..13d1d55 100644 (file)
@@ -31,6 +31,7 @@ import jalview.io.TCoffeeScoreFile;
 import java.awt.Color;
 import java.util.ArrayList;
 import java.util.IdentityHashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -44,20 +45,15 @@ import java.util.Map;
  */
 public class TCoffeeColourScheme extends ResidueColourScheme
 {
+  IdentityHashMap<SequenceI, Color[]> seqMap;
 
-  static final Color[] colors = { new Color(102, 102, 255), // #6666FF
-      new Color(0, 255, 0), // #00FF00
-      new Color(102, 255, 0), // #66FF00
-      new Color(204, 255, 0), // #CCFF00
-      new Color(255, 255, 0), // #FFFF00
-      new Color(255, 204, 0), // #FFCC00
-      new Color(255, 153, 0), // #FF9900
-      new Color(255, 102, 0), // #FF6600
-      new Color(255, 51, 0), // #FF3300
-      new Color(255, 34, 0) // #FF2000
-  };
+  /**
+   * Default constructor (required for Class.newInstance())
+   */
+  public TCoffeeColourScheme()
+  {
 
-  IdentityHashMap<SequenceI, Color[]> seqMap;
+  }
 
   /**
    * the color scheme needs to look at the alignment to get and cache T-COFFEE
@@ -71,6 +67,13 @@ public class TCoffeeColourScheme extends ResidueColourScheme
     alignmentChanged(alignment, null);
   }
 
+  /**
+   * Finds the TCoffeeScore annotation (if any) for each sequence and notes the
+   * annotation colour for each column position. The colours are fixed for
+   * scores 0-9 and are set when annotation is parsed.
+   * 
+   * @see TCoffeeScoreFile#annotateAlignment(AlignmentI, boolean)
+   */
   @Override
   public void alignmentChanged(AnnotatedCollectionI alignment,
           Map<SequenceI, SequenceCollectionI> hiddenReps)
@@ -80,7 +83,7 @@ public class TCoffeeColourScheme extends ResidueColourScheme
 
     // assume only one set of TCOFFEE scores - but could have more than one
     // potentially.
-    ArrayList<AlignmentAnnotation> annots = new ArrayList<AlignmentAnnotation>();
+    List<AlignmentAnnotation> annots = new ArrayList<AlignmentAnnotation>();
     // Search alignment to get all tcoffee annotation and pick one set of
     // annotation to use to colour seqs.
     seqMap = new IdentityHashMap<SequenceI, Color[]>();
@@ -119,9 +122,12 @@ public class TCoffeeColourScheme extends ResidueColourScheme
   @Override
   public Color findColour(char c, int j, SequenceI seq)
   {
-    Color[] cols;
-
-    if (seqMap == null || (cols = seqMap.get(seq)) == null)
+    if (seqMap == null)
+    {
+      return Color.WHITE;
+    }
+    Color[] cols = seqMap.get(seq);
+    if (cols == null)
     {
       // see above TODO about computing a colour for each residue in each
       // column: cc = _rcols[i][indexFor[c]];
@@ -136,9 +142,38 @@ public class TCoffeeColourScheme extends ResidueColourScheme
   }
 
   @Override
-  public ColourSchemeI applyTo(AnnotatedCollectionI sg,
+  public ColourSchemeI getInstance(AnnotatedCollectionI sg,
           Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
   {
     return new TCoffeeColourScheme(sg);
   }
+
+  /**
+   * Answers true if the data has TCoffee score annotation
+   */
+  @Override
+  public boolean isApplicableTo(AnnotatedCollectionI ac)
+  {
+    AnnotatedCollectionI alcontext = ac instanceof AlignmentI ? ac : ac
+            .getContext();
+    if (alcontext == null)
+    {
+      return false;
+    }
+    Iterable<AlignmentAnnotation> anns = alcontext
+            .findAnnotation(TCoffeeScoreFile.TCOFFEE_SCORE);
+    return anns.iterator().hasNext();
+  }
+
+  @Override
+  public String getSchemeName()
+  {
+    return JalviewColourScheme.TCoffee.toString();
+  }
+
+  @Override
+  public boolean isSimple()
+  {
+    return false;
+  }
 }