JAL-3383 JAL-3397 JAL-3253-applet IntervalStore options
[jalview.git] / src / jalview / datamodel / features / SequenceFeatures.java
index 0baeb19..5c6b4a7 100644 (file)
@@ -53,7 +53,28 @@ public class SequenceFeatures implements SequenceFeaturesI
    */
   private Map<String, FeatureStoreI> featureStore;
 
-  private static boolean useIntervalStore = !Platform.isJS();
+  /**
+   * original NCList-based IntervalStore
+   */
+  private final static int INTERVAL_STORE_NCLIST = 0;
+
+  /**
+   * linked-list deferred-sort IntervalStore
+   */
+  private final static int INTERVAL_STORE_NOCLKIST = 1;
+
+  /**
+   * no-IntervalStore option for JavaScript
+   */
+  private final static int INTERVAL_STORE_NONE_JS = -1;
+
+  private final int INTERVAL_STORE_MODE = (
+  // can be set differently for testing, but default is
+  // NONE_JS for JalviewJS and NCLIST for Java
+  Platform.isJS() ? //
+          INTERVAL_STORE_NONE_JS //
+          : INTERVAL_STORE_NCLIST//
+  );
 
   /**
    * Constructor
@@ -106,8 +127,16 @@ public class SequenceFeatures implements SequenceFeaturesI
 
   private FeatureStoreI newFeatureStore()
   {
-    // TODO Auto-generated method stub
-    return (useIntervalStore ? new FeatureStoreImpl() : new FeatureStoreJS());
+    switch (INTERVAL_STORE_MODE)
+    {
+    default:
+    case INTERVAL_STORE_NCLIST:
+      return new FeatureStoreImpl(true);
+    case INTERVAL_STORE_NOCLKIST:
+      return new FeatureStoreImpl(false);
+    case INTERVAL_STORE_NONE_JS:
+      return new FeatureStoreJS();
+    }
   }
 
   /**
@@ -120,10 +149,10 @@ public class SequenceFeatures implements SequenceFeaturesI
     List<SequenceFeature> result = new ArrayList<>();
     for (FeatureStoreI featureSet : varargToTypes(type))
     {
-//      System.err.println("SF findFeature " + System.currentTimeMillis()
-//              + " " + from + " " + to + " "
-//              + featureSet.getPositionalFeatures().get(0).type);
-//
+      // System.err.println("SF findFeature " + System.currentTimeMillis()
+      // + " " + from + " " + to + " "
+      // + featureSet.getPositionalFeatures().get(0).type);
+      //
       result.addAll(featureSet.findOverlappingFeatures(from, to, null));
     }
     return result;
@@ -164,8 +193,8 @@ public class SequenceFeatures implements SequenceFeaturesI
       return new ArrayList<>();
     }
 
-    return getAllFeatures(featureTypes.toArray(new String[featureTypes
-            .size()]));
+    return getAllFeatures(
+            featureTypes.toArray(new String[featureTypes.size()]));
   }
 
   /**
@@ -230,7 +259,6 @@ public class SequenceFeatures implements SequenceFeaturesI
       return featureStore.values();
     }
 
-
     List<FeatureStoreI> types = new ArrayList<>();
     List<String> args = Arrays.asList(type);
     for (Entry<String, FeatureStoreI> featureType : featureStore.entrySet())
@@ -333,8 +361,8 @@ public class SequenceFeatures implements SequenceFeaturesI
 
     for (Entry<String, FeatureStoreI> featureType : featureStore.entrySet())
     {
-      Set<String> featureGroups = featureType.getValue().getFeatureGroups(
-              positionalFeatures);
+      Set<String> featureGroups = featureType.getValue()
+              .getFeatureGroups(positionalFeatures);
       for (String group : groups)
       {
         if (featureGroups.contains(group))
@@ -402,8 +430,9 @@ public class SequenceFeatures implements SequenceFeaturesI
   @Override
   public float getMinimumScore(String type, boolean positional)
   {
-    return featureStore.containsKey(type) ? featureStore.get(type)
-            .getMinimumScore(positional) : Float.NaN;
+    return featureStore.containsKey(type)
+            ? featureStore.get(type).getMinimumScore(positional)
+            : Float.NaN;
   }
 
   /**
@@ -412,8 +441,9 @@ public class SequenceFeatures implements SequenceFeaturesI
   @Override
   public float getMaximumScore(String type, boolean positional)
   {
-    return featureStore.containsKey(type) ? featureStore.get(type)
-            .getMaximumScore(positional) : Float.NaN;
+    return featureStore.containsKey(type)
+            ? featureStore.get(type).getMaximumScore(positional)
+            : Float.NaN;
   }
 
   /**
@@ -527,8 +557,6 @@ public class SequenceFeatures implements SequenceFeaturesI
   // Platform: timer mark 52.355 0.185 overviewrender 16000 pixels row:14
   // Platform: timer mark 53.829 0.186 overviewrender 16000 pixels row:14
 
-
-
   /**
    * @author Bob Hanson 2019.08.01
    */