JAL-3253-applet JAL-3397
[jalview.git] / src / jalview / analysis / CrossRef.java
index 4f01cea..ed87f05 100644 (file)
@@ -31,8 +31,7 @@ import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
 import jalview.util.DBRefUtils;
 import jalview.util.MapList;
-import jalview.ws.SequenceFetcherFactory;
-import jalview.ws.seqfetcher.ASequenceFetcher;
+import jalview.ws.SequenceFetcher;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -402,7 +401,6 @@ public class CrossRef
   private void retrieveCrossRef(List<DBRefEntry> sourceRefs, SequenceI seq,
           List<DBRefEntry> xrfs, boolean fromDna, AlignedCodonFrame cf)
   {
-    ASequenceFetcher sftch = SequenceFetcherFactory.getSequenceFetcher();
     SequenceI[] retrieved = null;
     SequenceI dss = seq.getDatasetSequence() == null ? seq
             : seq.getDatasetSequence();
@@ -418,7 +416,8 @@ public class CrossRef
     }
     try
     {
-      retrieved = sftch.getSequences(sourceRefs, !fromDna);
+      retrieved = SequenceFetcher.getInstance()
+              .getSequences(sourceRefs, !fromDna);
     } catch (Exception e)
     {
       System.err.println(
@@ -483,9 +482,9 @@ public class CrossRef
   private void removeAlreadyRetrievedSeqs(List<DBRefEntry> sourceRefs,
           boolean fromDna)
   {
-    List<DBRefEntry> dbrSourceSet = new ArrayList<DBRefEntry>(sourceRefs);
+    List<DBRefEntry> dbrSourceSet = new ArrayList<>(sourceRefs);
     List<SequenceI> dsSeqs = dataset.getSequences();
-    for (int ids = dsSeqs.size(); --ids >= 0;)
+    for (int ids = 0, nds = dsSeqs.size(); ids < nds; ids++)
     {
       SequenceI sq = dsSeqs.get(ids);
       boolean dupeFound = false;
@@ -494,11 +493,11 @@ public class CrossRef
       if (sq.isProtein() == fromDna)
       {
        List<DBRefEntry> sqdbrefs = sq.getPrimaryDBRefs();
-        for (int idb = sqdbrefs.size(); --idb >= 0;)
+        for (int idb = 0, ndb = sqdbrefs.size(); idb < ndb; idb++)
         {
           DBRefEntry dbr = sqdbrefs.get(idb);  
           List<DBRefEntry> searchrefs = DBRefUtils.searchRefs(dbrSourceSet, dbr, DBRefUtils.SEARCH_MODE_FULL);
-          for (int isr = searchrefs.size(); --isr >= 0;)
+          for (int isr = 0, nsr = searchrefs.size(); isr < nsr; isr++)
           {
             sourceRefs.remove(searchrefs.get(isr));
             dupeFound = true;
@@ -638,10 +637,22 @@ public class CrossRef
                    */
                   SequenceFeature newFeature = new SequenceFeature(feat)
                   {
+                    // BH 2019.08.15 We must override equalsInterval, not
+                    // equals, because that is part of the IntervalI interface,
+                    // and IntervalStore may need that for proper, faster
+                    // processing.
+                    // But SequenceFeature changes were reverted...
                     @Override
                     public boolean equals(Object o)
                     {
-                      return super.equals(o, true);
+                      return o instanceof SequenceFeature
+                              && equalsWithParent((SequenceFeature) o);
+                    }
+
+                    @Override
+                    public boolean equalsWithParent(SequenceFeature sf)
+                    {
+                      return sf != null && equals(sf, true);
                     }
                   };
                   matched.addSequenceFeature(newFeature);