JAL-3397 impl.IntervalStore and nonc.IntervalStore unified api
[jalview.git] / src / jalview / datamodel / Sequence.java
index 4c46522..47a7ead 100755 (executable)
@@ -28,7 +28,6 @@ import jalview.util.DBRefUtils;
 import jalview.util.MapList;
 import jalview.util.StringUtils;
 
-import java.awt.Color;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.BitSet;
@@ -119,6 +118,11 @@ public class Sequence extends ASequence implements SequenceI
    */
   private int changeCount;
 
+  /*
+   * cached rgb colours for each position of the aligned sequence (column)
+   */
+  private int[] argb;
+
   /**
    * Creates a new Sequence object.
    * 
@@ -1613,7 +1617,7 @@ public class Sequence extends ASequence implements SequenceI
       _isNa = Comparison.isNucleotide(this);
     }
     return !_isNa;
-  };
+  }
 
   /*
    * (non-Javadoc)
@@ -1968,15 +1972,6 @@ public class Sequence extends ASequence implements SequenceI
 
     List<SequenceFeature> result = getFeatures().findFeatures(startPos,
             endPos, types);
-    if (datasetSequence != null)
-    {
-      result = datasetSequence.getFeatures().findFeatures(startPos, endPos,
-              types);
-    }
-    else
-    {
-      result = sequenceFeatureStore.findFeatures(startPos, endPos, types);
-    }
 
     /*
      * if end column is gapped, endPos may be to the right, 
@@ -2027,6 +2022,7 @@ public class Sequence extends ASequence implements SequenceI
   @Override
   public void sequenceChanged()
   {
+    argb = null;
     changeCount++;
   }
 
@@ -2130,19 +2126,45 @@ public class Sequence extends ASequence implements SequenceI
   }
 
   @Override
-  public Color getColor(int i)
+  public int getColor(int i)
   {
-    return null;
+    return argb == null ? 0 : argb[i];
   }
 
   @Override
-  public Color setColor(int i, Color c)
+  public int setColor(int i, int rgb)
   {
-    return c;
+    if (argb == null)
+    {
+      argb = new int[this.sequence.length];
+    }
+    return (argb[i] = rgb);
   }
 
   @Override
   public void resetColors()
   {
+    argb = null;
+  }
+
+  /**
+   * Answers a (possibly empty) list of features of the specified type that
+   * overlap the specified column position. If parameter {@code result} is not
+   * null, features are appended to it and the (possibly extended) list is
+   * returned.
+   */
+  @Override
+  public List<SequenceFeature> findFeatures(int column, String type,
+          List<SequenceFeature> result)
+  {
+    return getFeatures().findFeatures(findPosition(column - 1), type,
+            result);
+  }
+
+  @Override
+  public boolean hasFeatures(String type)
+  {
+    return getFeatures().hasFeatures(type);
   }
+
 }