JAL-2029 many-to-many EnsemblCDS-to-Uniprot mappings
[jalview.git] / src / jalview / analysis / CrossRef.java
index 7d09a3b..d48c14a 100644 (file)
@@ -361,6 +361,9 @@ public class CrossRef
             {
               updateDbrefMappings(dna, seq, xrfs, retrieved, cf);
 
+              SequenceIdMatcher matcher = new SequenceIdMatcher(
+                      dataset.getSequences());
+              matcher.addAll(addedPeers);
               List<SequenceFeature> copiedFeatures = new ArrayList<SequenceFeature>();
               CrossRef me = new CrossRef();
               for (int rs = 0; rs < retrieved.length; rs++)
@@ -378,8 +381,16 @@ public class CrossRef
                     {
                       if (map.getTo() != null && map.getMap() != null)
                       {
-                        // should search the local dataset to find any existing
-                        // candidates for To !
+                        SequenceI matched = matcher
+                                .findIdMatch(map.getTo());
+                        if (matched != null)
+                        {
+                          map.setTo(matched);
+                        }
+                        else
+                        {
+                          matcher.add(map.getTo());
+                        }
                         try
                         {
                           // compare ms with dss and replace with dss in mapping
@@ -433,7 +444,10 @@ public class CrossRef
                           }
                           else
                           {
-                            addedPeers.add(map.getTo());
+                            if (!addedPeers.contains(map.getTo()))
+                            {
+                              addedPeers.add(map.getTo());
+                            }
                             cf.addMap(retrieved[rs].getDatasetSequence(),
                                     map.getTo(), map.getMap());
                           }