JAL-2526 Sequence.findPositions to get residue positions for column
[jalview.git] / src / jalview / renderer / seqfeatures / FeatureRenderer.java
index f4648c4..5dce2b8 100644 (file)
@@ -21,6 +21,7 @@
 package jalview.renderer.seqfeatures;
 
 import jalview.api.AlignViewportI;
+import jalview.datamodel.Range;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.util.Comparison;
@@ -215,13 +216,6 @@ public class FeatureRenderer extends FeatureRendererModel
       return null;
     }
 
-    SequenceFeature[] sequenceFeatures = seq.getSequenceFeatures();
-
-    if (sequenceFeatures == null || sequenceFeatures.length == 0)
-    {
-      return null;
-    }
-
     if (Comparison.isGap(seq.getCharAt(column)))
     {
       return Color.white;
@@ -270,8 +264,7 @@ public class FeatureRenderer extends FeatureRendererModel
           final SequenceI seq, int start, int end, int y1,
           boolean colourOnly)
   {
-    SequenceFeature[] sequenceFeatures = seq.getSequenceFeatures();
-    if (sequenceFeatures == null || sequenceFeatures.length == 0)
+    if (!seq.getFeatures().hasFeatures())
     {
       return null;
     }
@@ -285,8 +278,14 @@ public class FeatureRenderer extends FeatureRendererModel
               transparency));
     }
 
-    int startPos = seq.findPosition(start);
-    int endPos = seq.findPosition(end);
+    /*
+     * get range of sequence positions within column range
+     */
+    Range seqRange = seq.findPositions(start, end);
+    if (seqRange == null)
+    {
+      return null;
+    }
 
     Color drawnColour = null;
 
@@ -301,8 +300,8 @@ public class FeatureRenderer extends FeatureRendererModel
         continue;
       }
 
-      List<SequenceFeature> overlaps = seq.findFeatures(startPos, endPos,
-              type);
+      List<SequenceFeature> overlaps = seq.findFeatures(seqRange.start,
+              seqRange.end, type);
       for (SequenceFeature sequenceFeature : overlaps)
       {
         /*
@@ -317,15 +316,18 @@ public class FeatureRenderer extends FeatureRendererModel
         Color featureColour = getColour(sequenceFeature);
         boolean isContactFeature = sequenceFeature.isContactFeature();
 
+        // todo overload findIndex using Location data
+        int featureStartCol = seq.findIndex(sequenceFeature.begin);
+        int featureEndCol = seq.findIndex(sequenceFeature.end);
         if (isContactFeature)
         {
           boolean drawn = renderFeature(g, seq,
-                  seq.findIndex(sequenceFeature.begin) - 1,
-                  seq.findIndex(sequenceFeature.begin) - 1, featureColour,
+                  featureStartCol - 1,
+                  featureStartCol - 1, featureColour,
                   start, end, y1, colourOnly);
           drawn |= renderFeature(g, seq,
-                  seq.findIndex(sequenceFeature.end) - 1,
-                  seq.findIndex(sequenceFeature.end) - 1, featureColour,
+                  featureEndCol - 1,
+                  featureEndCol - 1, featureColour,
                   start, end, y1, colourOnly);
           if (drawn)
           {
@@ -355,8 +357,8 @@ public class FeatureRenderer extends FeatureRendererModel
           {
           */
             boolean drawn = renderFeature(g, seq,
-                    seq.findIndex(sequenceFeature.begin) - 1,
-                    seq.findIndex(sequenceFeature.end) - 1, featureColour,
+                    featureStartCol - 1,
+                    featureEndCol - 1, featureColour,
                     start, end, y1, colourOnly);
             if (drawn)
             {