added a more general DBRef search interface
[jalview.git] / src / jalview / datamodel / Sequence.java
index 0e72690..65857ce 100755 (executable)
@@ -86,6 +86,11 @@ public class Sequence
 
   void parseId()
   {
+    if (name==null)
+    {
+      System.err.println("POSSIBLE IMPLEMENTATION ERROR: null sequence name passed to constructor.");
+      name = "";
+    }
     // Does sequence have the /start-end signiature?
     if (limitrx.search(name))
     {
@@ -760,8 +765,16 @@ public class Sequence
 
     for(i=0; i<iSize; i++)
     {
-      if(dbrefs[i].equals(entry))
+      if(dbrefs[i].equalRef(entry))
       {
+        if (entry.getMap()!=null)
+        {
+          if (dbrefs[i].getMap()==null)
+          {
+            // overwrite with 'superior' entry that contains a mapping.
+            dbrefs[i] = entry;
+          }
+        }
         return;
       }
     }
@@ -869,6 +882,29 @@ public class Sequence
     }
     return seq;
   }
+
+  /* (non-Javadoc)
+   * @see jalview.datamodel.SequenceI#createDatasetSequence()
+   */
+  public SequenceI createDatasetSequence()
+  {
+    if (datasetSequence==null)
+    {
+      datasetSequence = new Sequence(getName(),
+              AlignSeq.extractGaps(
+                jalview.util.Comparison.GapChars,
+                getSequenceAsString()),
+            getStart(),
+            getEnd());
+      datasetSequence.setSequenceFeatures(getSequenceFeatures());
+      datasetSequence.setDescription(getDescription());
+      setSequenceFeatures(null);
+      // move database references onto dataset sequence
+      datasetSequence.setDBRef(getDBRef());
+      setDBRef(null);
+    }
+    return datasetSequence;
+  }
   /* (non-Javadoc)
    * @see jalview.datamodel.SequenceI#setAlignmentAnnotation(AlignmmentAnnotation[] annotations)
    */