JAL-3253 temporary branch SwingJS upgrade with testNG fixes Java 8
[jalview.git] / src / jalview / datamodel / features / SequenceFeatures.java
index d283aaa..2101a2f 100644 (file)
@@ -23,6 +23,7 @@ package jalview.datamodel.features;
 import jalview.datamodel.SequenceFeature;
 import jalview.io.gff.SequenceOntologyFactory;
 import jalview.io.gff.SequenceOntologyI;
+import jalview.util.Platform;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -111,7 +112,7 @@ public class SequenceFeatures implements SequenceFeaturesI
     List<SequenceFeature> result = new ArrayList<>();
     for (FeatureStore featureSet : varargToTypes(type))
     {
-      featureSet.findOverlappingFeatures(from, to, result);
+      featureSet.findFeatures(from, to, result);
     }
     return result;
   }
@@ -298,7 +299,9 @@ public class SequenceFeatures implements SequenceFeaturesI
   public Set<String> getFeatureGroups(boolean positionalFeatures,
           String... type)
   {
-    Set<String> groups = new HashSet<>();
+    // BH 2020.03.21 This is the set that orders the list of groups
+    // at the top of the FeatureSettings panel.
+    Set<String> groups = Platform.getJavaOrderedHashSet();
 
     for (FeatureStore featureSet : varargToTypes(type))
     {
@@ -315,7 +318,10 @@ public class SequenceFeatures implements SequenceFeaturesI
   public Set<String> getFeatureTypesForGroups(boolean positionalFeatures,
           String... groups)
   {
-    Set<String> result = new HashSet<>();
+    // BH 2020.03.21 This set is the one that sets the initial ordering for
+    // feature rendering. We set it to new HashSet<>(16,0.75) to force it to
+    // be backed by a Java hash-ordered HashMap instead of a JavaScript Map.
+    Set<String> result = Platform.getJavaOrderedHashSet();
 
     for (Entry<String, FeatureStore> featureType : featureStore.entrySet())
     {
@@ -343,7 +349,7 @@ public class SequenceFeatures implements SequenceFeaturesI
   @Override
   public Set<String> getFeatureTypes(String... soTerm)
   {
-    Set<String> types = new HashSet<>();
+    Set<String> types = new HashSet<>(15, 0.75f);
     for (Entry<String, FeatureStore> entry : featureStore.entrySet())
     {
       String type = entry.getKey();
@@ -477,13 +483,14 @@ public class SequenceFeatures implements SequenceFeaturesI
     {
       return list == null ? new ArrayList<>() : list;
     }
-    return fs.findOverlappingFeatures(pos, pos, list);
+    return fs.findFeatures(pos, pos, list);
   }
 
   @Override
   public boolean hasFeatures(String type)
   {
-    return featureStore.containsKey(type);
+    return featureStore.containsKey(type)
+            && !featureStore.get(type).isEmpty();
   }
 
 }