javadoc
[jalview.git] / src / jalview / datamodel / SequenceGroup.java
index bb075aa..49f270d 100755 (executable)
@@ -47,6 +47,11 @@ public class SequenceGroup
 
   boolean colourText = false;
   /**
+   * after Olivier's non-conserved only character display
+   */
+  boolean showUnconserved = false;
+  
+  /**
    * group members
    */
   private Vector sequences = new Vector();
@@ -110,6 +115,47 @@ public class SequenceGroup
     endRes = end;
     recalcConservation();
   }
+  /**
+   * copy constructor
+   * @param seqsel
+   */
+  public SequenceGroup(SequenceGroup seqsel)
+  {
+    if (seqsel!=null)
+    {
+      sequences=new Vector();
+      Enumeration sq = seqsel.sequences.elements();
+      while (sq.hasMoreElements()) { 
+        sequences.addElement(sq.nextElement()); 
+      };
+      if (seqsel.groupName!=null)
+      {
+        groupName = new String(seqsel.groupName);
+      }
+      displayBoxes = seqsel.displayBoxes;
+      displayText = seqsel.displayText;
+      colourText = seqsel.colourText;
+      startRes = seqsel.startRes;
+      endRes = seqsel.endRes;
+      cs =seqsel.cs;
+      if (seqsel.description!=null)
+        description = new String(seqsel.description);
+      hidecols = seqsel.hidecols;
+      hidereps = seqsel.hidereps;
+      idColour = seqsel.idColour;
+      outlineColour = seqsel.outlineColour;
+      seqrep = seqsel.seqrep;
+      textColour = seqsel.textColour;
+      textColour2 = seqsel.textColour2;
+      thresholdTextColour = seqsel.thresholdTextColour;
+      width = seqsel.width;
+      if (seqsel.conserve!=null)
+      {
+        recalcConservation(); // safer than 
+        // aaFrequency = (Vector) seqsel.aaFrequency.clone(); // ??
+      }
+    }
+  }
 
   public SequenceI[] getSelectionAsNewSequences(AlignmentI align)
   {
@@ -645,11 +691,12 @@ public class SequenceGroup
 
   /**
    * 
-   * returns the sequences in the group ordered by the ordering given by al
-   * 
+   * returns the sequences in the group ordered by the ordering given by al.
+   * this used to return an array with null entries regardless, new behaviour is below.
+   * TODO: verify that this does not affect use in applet or application
    * @param al
    *                Alignment
-   * @return SequenceI[]
+   * @return SequenceI[] intersection of sequences in group with al, ordered by al, or null if group does not intersect with al
    */
   public SequenceI[] getSequencesInOrder(AlignmentI al)
   {
@@ -666,7 +713,20 @@ public class SequenceGroup
         seqs[index++] = al.getSequenceAt(i);
       }
     }
-
+    if (index==0)
+    {
+      return null;
+    }
+    if (index<seqs.length)
+    {
+      SequenceI[] dummy = seqs;
+      seqs = new SequenceI[index];
+      while (--index>=0)
+      {
+        seqs[index] = dummy[index];
+        dummy[index] = null;
+      }
+    }
     return seqs;
   }
 
@@ -753,4 +813,49 @@ public class SequenceGroup
   {
     return hidecols;
   }
+  /**
+   * create a new sequence group from the intersection of this group
+   * with an alignment Hashtable of hidden representatives
+   * 
+   * @param alignment (may not be null)
+   * @param hashtable (may be null)
+   * @return new group containing sequences common to this group and alignment
+   */
+  public SequenceGroup intersect(AlignmentI alignment, Hashtable hashtable)
+  {
+    SequenceGroup sgroup = new SequenceGroup(this);
+    Enumeration en = getSequences(hashtable).elements();
+    while (en.hasMoreElements())
+    {
+      SequenceI elem = (SequenceI) en.nextElement();
+      if (alignment.getSequences().contains(elem))
+      {
+        sgroup.addSequence(elem, false);
+      }
+    }
+    return sgroup;
+  }
+
+  /**
+   * @return the showUnconserved
+   */
+  public boolean getShowunconserved()
+  {
+    return showUnconserved;
+  }
+
+  /**
+   * @param showUnconserved the showUnconserved to set
+   */
+  public void setShowunconserved(boolean displayNonconserved)
+  {
+    this.showUnconserved = displayNonconserved;
+  }
+
+  public AlignmentAnnotation getConsensus()
+  {
+    // TODO get or calculate and get consensus annotation row for this group
+    this.conserve.getConsSequence();
+    return null;
+  }
 }