JAL-2490 findFeaturesAtRes with performant feature lookup
[jalview.git] / src / jalview / datamodel / Sequence.java
index fd60c03..c0549f2 100755 (executable)
@@ -23,6 +23,7 @@ package jalview.datamodel;
 import jalview.analysis.AlignSeq;
 import jalview.api.DBRefEntryI;
 import jalview.datamodel.features.SequenceFeatures;
+import jalview.datamodel.features.SequenceFeaturesI;
 import jalview.util.Comparison;
 import jalview.util.DBRefUtils;
 import jalview.util.MapList;
@@ -318,12 +319,11 @@ public class Sequence extends ASequence implements SequenceI
   }
 
   @Override
-  public synchronized void addSequenceFeature(SequenceFeature sf)
+  public synchronized boolean addSequenceFeature(SequenceFeature sf)
   {
     if (sequenceFeatures == null && datasetSequence != null)
     {
-      datasetSequence.addSequenceFeature(sf);
-      return;
+      return datasetSequence.addSequenceFeature(sf);
     }
     if (sequenceFeatures == null)
     {
@@ -334,7 +334,7 @@ public class Sequence extends ASequence implements SequenceI
     {
       if (sequenceFeatures[i].equals(sf))
       {
-        return;
+        return false;
       }
     }
 
@@ -345,6 +345,7 @@ public class Sequence extends ASequence implements SequenceI
     sequenceFeatures = temp;
 
     sequenceFeatureStore.add(sf);
+    return true;
   }
 
   @Override
@@ -359,6 +360,14 @@ public class Sequence extends ASequence implements SequenceI
       return;
     }
 
+    /*
+     * new way
+     */
+    sequenceFeatureStore.delete(sf);
+
+    /*
+     * old way - to be removed
+     */
     int index = 0;
     for (index = 0; index < sequenceFeatures.length; index++)
     {
@@ -418,6 +427,13 @@ public class Sequence extends ASequence implements SequenceI
   }
 
   @Override
+  public SequenceFeaturesI getFeatures()
+  {
+    return datasetSequence != null ? datasetSequence.getFeatures()
+            : sequenceFeatureStore;
+  }
+
+  @Override
   public boolean addPDBId(PDBEntry entry)
   {
     if (pdbIds == null)
@@ -1481,13 +1497,17 @@ public class Sequence extends ASequence implements SequenceI
     }
   }
 
+  /**
+   * {@inheritDoc}
+   */
   @Override
-  public List<SequenceFeature> findFeatures(String type, int from, int to)
+  public List<SequenceFeature> findFeatures(int from, int to,
+          String... types)
   {
     if (datasetSequence != null)
     {
-      return datasetSequence.findFeatures(type, from, to);
+      return datasetSequence.findFeatures(from, to, types);
     }
-    return sequenceFeatureStore.findFeatures(type, from, to);
+    return sequenceFeatureStore.findFeatures(from, to, types);
   }
 }