JAL-3567 report mapped location for virtual features in tooltip etc
[jalview.git] / src / jalview / viewmodel / seqfeatures / FeatureRendererModel.java
index 9a8a086..0a667aa 100644 (file)
  */
 package jalview.viewmodel.seqfeatures;
 
+import java.awt.Color;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
 import jalview.api.AlignViewportI;
 import jalview.api.FeatureColourI;
 import jalview.api.FeaturesDisplayedI;
@@ -38,20 +52,6 @@ import jalview.renderer.seqfeatures.FeatureRenderer;
 import jalview.schemes.FeatureColour;
 import jalview.util.ColorUtils;
 
-import java.awt.Color;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
 public abstract class FeatureRendererModel
         implements jalview.api.FeatureRenderer
 {
@@ -1162,8 +1162,8 @@ public abstract class FeatureRendererModel
   }
 
   @Override
-  public MappedFeatures findComplementFeaturesAtResidue(SequenceI sequence,
-          int pos)
+  public MappedFeatures findComplementFeaturesAtResidue(
+          final SequenceI sequence, final int pos)
   {
     SequenceI ds = sequence.getDatasetSequence();
     if (ds == null)
@@ -1232,9 +1232,12 @@ public abstract class FeatureRendererModel
     }
 
     /*
-     * sort by renderorder, inefficiently
+     * sort by renderorder (inefficiently but ok for small scale);
+     * NB this sorts 'on top' feature to end, for rendering
      */
     List<SequenceFeature> result = new ArrayList<>();
+    final int toAdd = found.size();
+    int added = 0;
     for (String type : renderOrder)
     {
       for (SequenceFeature sf : found)
@@ -1242,11 +1245,15 @@ public abstract class FeatureRendererModel
         if (type.equals(sf.getType()))
         {
           result.add(sf);
-          if (result.size() == found.size())
-          {
-            return new MappedFeatures(mapping, mapFrom, pos, residue,
-                    result);
-          }
+          added++;
+        }
+        if (added == toAdd)
+        {
+          break;
+        }
+        if (added == toAdd)
+        {
+          break;
         }
       }
     }