equals operation used for canonicalisation of DBRefList (rather than explict 'equals...
[jalview.git] / src / jalview / datamodel / Sequence.java
index 39d6880..92c8dff 100755 (executable)
@@ -1,6 +1,6 @@
 /*
 * Jalview - A Sequence Alignment Editor and Viewer
-* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
@@ -21,6 +21,7 @@ package jalview.datamodel;
 
 import java.util.*;
 
+import jalview.analysis.*;
 
 /**
  * DOCUMENT ME!
@@ -28,9 +29,9 @@ import java.util.*;
  * @author $author$
  * @version $Revision$
  */
-public class Sequence implements SequenceI
+public class Sequence
+    implements SequenceI
 {
-  
   SequenceI datasetSequence;
   String name;
   private char [] sequence;
@@ -48,10 +49,6 @@ public class Sequence implements SequenceI
   /** DOCUMENT ME!! */
   public SequenceFeature[] sequenceFeatures;
 
-  /** This array holds hidden sequences
-   * of which this sequence is the representitive member of a group
-   */
-  SequenceGroup hiddenSequences;
 
   /**
    * Creates a new Sequence object.
@@ -182,7 +179,9 @@ public class Sequence implements SequenceI
   public void deleteFeature(SequenceFeature sf)
   {
     if(sequenceFeatures==null)
+    {
       return;
+    }
 
     int index=0;
     for (index = 0; index < sequenceFeatures.length; index++)
@@ -195,7 +194,9 @@ public class Sequence implements SequenceI
 
 
     if(index==sequenceFeatures.length)
+    {
       return;
+    }
 
     int sfLength = sequenceFeatures.length;
     if(sfLength<2)
@@ -208,10 +209,12 @@ public class Sequence implements SequenceI
       System.arraycopy(sequenceFeatures, 0, temp, 0, index);
 
       if(index<sfLength)
+      {
         System.arraycopy(sequenceFeatures,
                          index + 1,
                          temp,
                          index, sequenceFeatures.length - index -1);
+      }
 
       sequenceFeatures = temp;
     }
@@ -230,7 +233,9 @@ public class Sequence implements SequenceI
   public void addPDBId(PDBEntry entry)
   {
     if (pdbIds == null)
+    {
       pdbIds = new Vector();
+    }
 
     pdbIds.addElement(entry);
   }
@@ -407,19 +412,27 @@ public class Sequence implements SequenceI
   public SequenceI getSubSequence(int start, int end)
   {
     if (start < 0)
+    {
       start = 0;
+    }
     char [] seq = getSequence(start, end);
     if (seq.length == 0)
+    {
       return null;
+    }
     int nstart = findPosition(start);
     int nend = findPosition(end) - 1;
     // JBPNote - this is an incomplete copy.
     SequenceI nseq = new Sequence(this.getName(), seq, nstart, nend);
     nseq.setDescription(description);
     if (datasetSequence!=null)
+    {
         nseq.setDatasetSequence(datasetSequence);
+    }
     else
+    {
         nseq.setDatasetSequence(this);
+    }
     return nseq;
   }
 
@@ -573,9 +586,31 @@ public class Sequence implements SequenceI
       System.arraycopy(sequence,j,tmp,i,sequence.length-j);
     }
 
+    if (this.datasetSequence != null)
+    {
+      for (int s = i; s < j; s++)
+      {
+        if (jalview.schemes.ResidueProperties.aaIndex[sequence[s]] != 23)
+        {
+
+          Sequence ds = new Sequence(name,
+                                     AlignSeq.extractGaps(
+                                         jalview.util.Comparison.GapChars,
+                                         this.getSequenceAsString()
+                                     ),
+                                     start,
+                                     end);
+          ds.setDescription(description);
+        }
+        break;
+      }
+    }
+
     sequence = tmp;
+
   }
 
+
   /**
    * DOCUMENT ME!
    *
@@ -641,17 +676,19 @@ public class Sequence implements SequenceI
   public void addDBRef(DBRefEntry entry)
   {
     if (dbrefs == null)
+    {
       dbrefs = new DBRefEntry[0];
+    }
 
     int i, iSize = dbrefs.length;
 
     for(i=0; i<iSize; i++)
-      if(dbrefs[i].getAccessionId().equals(entry.getAccessionId())
-      && dbrefs[i].getSource().equals(entry.getSource())
-      && dbrefs[i].getVersion().equals(entry.getVersion()))
+    {
+      if(dbrefs[i].equals(entry))
       {
         return;
       }
+    }
 
     DBRefEntry[] temp = new DBRefEntry[iSize + 1];
     System.arraycopy(dbrefs, 0, temp, 0, iSize);
@@ -673,11 +710,15 @@ public class Sequence implements SequenceI
   public AlignmentAnnotation[] getAnnotation()
   {
     if (annotation == null)
+    {
       return null;
+    }
 
     AlignmentAnnotation[] ret = new AlignmentAnnotation[annotation.size()];
     for (int r = 0; r < ret.length; r++)
+    {
       ret[r] = (AlignmentAnnotation) annotation.elementAt(r);
+    }
 
     return ret;
   }
@@ -685,58 +726,52 @@ public class Sequence implements SequenceI
   public void addAlignmentAnnotation(AlignmentAnnotation annotation)
   {
     if (this.annotation == null)
+    {
       this.annotation = new Vector();
+    }
 
     this.annotation.addElement(annotation);
   }
 
-  public SequenceGroup getHiddenSequences()
-  {
-    return hiddenSequences;
-  }
-
-  public void addHiddenSequence(SequenceI seq)
-  {
-    if (hiddenSequences == null)
-    {
-      hiddenSequences = new SequenceGroup();
-    }
-    hiddenSequences.addSequence(seq, false);
-  }
 
-  public void showHiddenSequence(SequenceI seq)
-  {
-    hiddenSequences.deleteSequence(seq, false);
-    if (hiddenSequences.getSize(false) < 1)
-    {
-      hiddenSequences = null;
-    }
-  }
   /**
    * test if this is a valid candidate for another
-   * sequence's dataset sequence. 
-   * 
+   * sequence's dataset sequence.
+   *
    */
-  private boolean isValidDatasetSequence() {
-      if (datasetSequence!=null)
+  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() {
+  public SequenceI deriveSequence()
+  {
       SequenceI seq = new Sequence(name, sequence, start, end);
       seq.setDescription(description);
-      if (datasetSequence!=null) {
+    if (datasetSequence != null)
+    {
           seq.setDatasetSequence(datasetSequence);
-      } else {
+    }
+    else
+    {
           if (isValidDatasetSequence())
+      {
               seq.setDatasetSequence(this);
       }
+    }
       return seq;
   }