JAL-1665 refactored Sequence.getSequenceFeatures
[jalview.git] / src / jalview / renderer / seqfeatures / FeatureRenderer.java
index 5e6ac29..362ef5e 100644 (file)
@@ -20,28 +20,6 @@ public class FeatureRenderer extends
 
   boolean offscreenRender = false;
 
-  /**
-   * DOCUMENT ME!
-   * 
-   * @param g
-   *          DOCUMENT ME!
-   * @param seq
-   *          DOCUMENT ME!
-   * @param sg
-   *          DOCUMENT ME!
-   * @param start
-   *          DOCUMENT ME!
-   * @param end
-   *          DOCUMENT ME!
-   * @param x1
-   *          DOCUMENT ME!
-   * @param y1
-   *          DOCUMENT ME!
-   * @param width
-   *          DOCUMENT ME!
-   * @param height
-   *          DOCUMENT ME!
-   */
   protected SequenceI lastSeq;
 
   char s;
@@ -188,30 +166,29 @@ public class FeatureRenderer extends
       return initialCol;
     }
 
-    final SequenceI aseq = (seq.getDatasetSequence() != null) ? seq
-            .getDatasetSequence() : seq;
+    SequenceFeature[] sequenceFeatures = seq.getSequenceFeatures();
     if (seq != lastSeq)
     {
       lastSeq = seq;
-      sequenceFeatures = aseq.getSequenceFeatures();
-      if (sequenceFeatures != null)
+      lastSequenceFeatures = sequenceFeatures;
+      if (lastSequenceFeatures != null)
       {
-        sfSize = sequenceFeatures.length;
+        sfSize = lastSequenceFeatures.length;
       }
     }
     else
     {
-      if (sequenceFeatures != aseq.getSequenceFeatures())
+      if (lastSequenceFeatures != sequenceFeatures)
       {
-        sequenceFeatures = aseq.getSequenceFeatures();
-        if (sequenceFeatures != null)
+        lastSequenceFeatures = sequenceFeatures;
+        if (lastSequenceFeatures != null)
         {
-          sfSize = sequenceFeatures.length;
+          sfSize = lastSequenceFeatures.length;
         }
       }
     }
 
-    if (sequenceFeatures == null || sfSize == 0)
+    if (lastSequenceFeatures == null || sfSize == 0)
     {
       return initialCol;
     }
@@ -255,7 +232,7 @@ public class FeatureRenderer extends
 
   }
 
-  private volatile SequenceFeature[] sequenceFeatures;
+  private volatile SequenceFeature[] lastSequenceFeatures;
 
   int sfSize;
 
@@ -268,10 +245,8 @@ public class FeatureRenderer extends
   public synchronized void drawSequence(Graphics g, final SequenceI seq,
           int start, int end, int y1)
   {
-    final SequenceI aseq = (seq.getDatasetSequence() != null) ? seq
-            .getDatasetSequence() : seq;
-    if (aseq.getSequenceFeatures() == null
-            || aseq.getSequenceFeatures().length == 0)
+    SequenceFeature[] sequenceFeatures = seq.getSequenceFeatures();
+    if (sequenceFeatures == null || sequenceFeatures.length == 0)
     {
       return;
     }
@@ -284,10 +259,10 @@ public class FeatureRenderer extends
     updateFeatures();
 
     if (lastSeq == null || seq != lastSeq
-            || aseq.getSequenceFeatures() != sequenceFeatures)
+            || sequenceFeatures != lastSequenceFeatures)
     {
       lastSeq = seq;
-      sequenceFeatures = aseq.getSequenceFeatures();
+      lastSequenceFeatures = sequenceFeatures;
     }
 
     if (transparency != 1 && g != null)
@@ -303,7 +278,7 @@ public class FeatureRenderer extends
       epos = lastSeq.findPosition(end);
     }
 
-    sfSize = sequenceFeatures.length;
+    sfSize = lastSequenceFeatures.length;
     String type;
     for (int renderIndex = 0; renderIndex < renderOrder.length; renderIndex++)
     {
@@ -318,25 +293,26 @@ public class FeatureRenderer extends
       // current feature to render
       for (sfindex = 0; sfindex < sfSize; sfindex++)
       {
-        if (!sequenceFeatures[sfindex].type.equals(type))
+        if (!lastSequenceFeatures[sfindex].type.equals(type))
         {
           continue;
         }
 
         if (featureGroups != null
-                && sequenceFeatures[sfindex].featureGroup != null
-                && sequenceFeatures[sfindex].featureGroup.length() != 0
+                && lastSequenceFeatures[sfindex].featureGroup != null
+                && lastSequenceFeatures[sfindex].featureGroup.length() != 0
                 && featureGroups
-                        .containsKey(sequenceFeatures[sfindex].featureGroup)
+                        .containsKey(lastSequenceFeatures[sfindex].featureGroup)
                 && !featureGroups
-                        .get(sequenceFeatures[sfindex].featureGroup)
+.get(
+                        lastSequenceFeatures[sfindex].featureGroup)
                         .booleanValue())
         {
           continue;
         }
 
         if (!offscreenRender
-                && (sequenceFeatures[sfindex].getBegin() > epos || sequenceFeatures[sfindex]
+                && (lastSequenceFeatures[sfindex].getBegin() > epos || lastSequenceFeatures[sfindex]
                         .getEnd() < spos))
         {
           continue;
@@ -344,56 +320,59 @@ public class FeatureRenderer extends
 
         if (offscreenRender && offscreenImage == null)
         {
-          if (sequenceFeatures[sfindex].begin <= start
-                  && sequenceFeatures[sfindex].end >= start)
+          if (lastSequenceFeatures[sfindex].begin <= start
+                  && lastSequenceFeatures[sfindex].end >= start)
           {
             // this is passed out to the overview and other sequence renderers
             // (e.g. molecule viewer) to get displayed colour for rendered
             // sequence
             currentColour = new Integer(
-                    getColour(sequenceFeatures[sfindex]).getRGB());
+getColour(
+                    lastSequenceFeatures[sfindex]).getRGB());
             // used to be retreived from av.featuresDisplayed
             // currentColour = av.featuresDisplayed
             // .get(sequenceFeatures[sfindex].type);
 
           }
         }
-        else if (sequenceFeatures[sfindex].type.equals("disulfide bond"))
+        else if (lastSequenceFeatures[sfindex].type
+                .equals("disulfide bond"))
         {
 
           renderFeature(g, seq,
-                  seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
-                  seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
-                  getColour(sequenceFeatures[sfindex])
+                  seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
+                  seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
+                  getColour(lastSequenceFeatures[sfindex])
                   // new Color(((Integer) av.featuresDisplayed
                   // .get(sequenceFeatures[sfindex].type)).intValue())
                   , start, end, y1);
           renderFeature(g, seq,
-                  seq.findIndex(sequenceFeatures[sfindex].end) - 1,
-                  seq.findIndex(sequenceFeatures[sfindex].end) - 1,
-                  getColour(sequenceFeatures[sfindex])
+                  seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
+                  seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
+                  getColour(lastSequenceFeatures[sfindex])
                   // new Color(((Integer) av.featuresDisplayed
                   // .get(sequenceFeatures[sfindex].type)).intValue())
                   , start, end, y1);
 
         }
-        else if (showFeature(sequenceFeatures[sfindex]))
+        else if (showFeature(lastSequenceFeatures[sfindex]))
         {
           if (av_isShowSeqFeatureHeight
-                  && sequenceFeatures[sfindex].score != Float.NaN)
+                  && lastSequenceFeatures[sfindex].score != Float.NaN)
           {
             renderScoreFeature(g, seq,
-                    seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
-                    seq.findIndex(sequenceFeatures[sfindex].end) - 1,
-                    getColour(sequenceFeatures[sfindex]), start, end, y1,
-                    normaliseScore(sequenceFeatures[sfindex]));
+                    seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
+                    seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
+                    getColour(lastSequenceFeatures[sfindex]), start, end,
+                    y1, normaliseScore(lastSequenceFeatures[sfindex]));
           }
           else
           {
             renderFeature(g, seq,
-                    seq.findIndex(sequenceFeatures[sfindex].begin) - 1,
-                    seq.findIndex(sequenceFeatures[sfindex].end) - 1,
-                    getColour(sequenceFeatures[sfindex]), start, end, y1);
+                    seq.findIndex(lastSequenceFeatures[sfindex].begin) - 1,
+                    seq.findIndex(lastSequenceFeatures[sfindex].end) - 1,
+                    getColour(lastSequenceFeatures[sfindex]), start, end,
+                    y1);
           }
         }