datasetSequence derive method and some checks
authorjprocter <Jim Procter>
Fri, 19 Jan 2007 15:57:42 +0000 (15:57 +0000)
committerjprocter <Jim Procter>
Fri, 19 Jan 2007 15:57:42 +0000 (15:57 +0000)
src/jalview/datamodel/Sequence.java
src/jalview/datamodel/SequenceI.java

index ff7ec32..39d6880 100755 (executable)
@@ -30,6 +30,7 @@ import java.util.*;
  */
 public class Sequence implements SequenceI
 {
+  
   SequenceI datasetSequence;
   String name;
   private char [] sequence;
@@ -415,7 +416,10 @@ public class Sequence implements SequenceI
     // JBPNote - this is an incomplete copy.
     SequenceI nseq = new Sequence(this.getName(), seq, nstart, nend);
     nseq.setDescription(description);
-    nseq.setDatasetSequence(getDatasetSequence());
+    if (datasetSequence!=null)
+        nseq.setDatasetSequence(datasetSequence);
+    else
+        nseq.setDatasetSequence(this);
     return nseq;
   }
 
@@ -708,6 +712,34 @@ public class Sequence implements SequenceI
       hiddenSequences = null;
     }
   }
+  /**
+   * test if this is a valid candidate for another
+   * sequence's dataset sequence. 
+   * 
+   */
+  private boolean isValidDatasetSequence() {
+      if (datasetSequence!=null)
+          return false;
+      for (int i=0;i<sequence.length; i++)
+          if (jalview.util.Comparison.isGap(sequence[i]))
+              return false;
+      return true;
+  }
+  /* (non-Javadoc)
+   * @see jalview.datamodel.SequenceI#deriveSequence()
+   */
+  public SequenceI deriveSequence() {
+      SequenceI seq = new Sequence(name, sequence, start, end);
+      seq.setDescription(description);
+      if (datasetSequence!=null) {
+          seq.setDatasetSequence(datasetSequence);
+      } else {
+          if (isValidDatasetSequence())
+              seq.setDatasetSequence(this);
+      }
+      return seq;
+  }
+
 }
 
 
index bb5e799..c5fdbda 100755 (executable)
@@ -264,5 +264,11 @@ public interface SequenceI
     public void addHiddenSequence(SequenceI seq);
 
     public void showHiddenSequence(SequenceI seq);
+    
+    /**
+     * Derive a sequence (using this one's dataset or as the dataset)
+     * @return duplicate sequence with valid dataset sequence
+     */
+    public SequenceI deriveSequence();
 
 }