JAL-1691 avoid NPE when original split frame has been closed before the alignment...
[jalview.git] / src / jalview / io / AlignFile.java
index 2962cb2..3b46760 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.io;
 
-import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.util.MessageManager;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Vector;
 
 /**
@@ -51,7 +54,12 @@ public abstract class AlignFile extends FileParse
   /**
    * annotation to be added to generated alignment object
    */
-  protected Vector annotations;
+  protected Vector<AlignmentAnnotation> annotations;
+
+  /**
+   * SequenceGroups to be added to the alignment object
+   */
+  protected List<SequenceGroup> seqGroups;
 
   /**
    * Properties to be added to generated alignment object
@@ -165,6 +173,11 @@ public abstract class AlignFile extends FileParse
     return seqs;
   }
 
+  public List<SequenceGroup> getSeqGroups()
+  {
+    return seqGroups;
+  }
+
   /**
    * Return the Sequences in the seqs Vector as an array of Sequences
    */
@@ -174,7 +187,7 @@ public abstract class AlignFile extends FileParse
 
     for (int i = 0; i < seqs.size(); i++)
     {
-      s[i] = (SequenceI) seqs.elementAt(i);
+      s[i] = seqs.elementAt(i);
     }
 
     return s;
@@ -186,7 +199,7 @@ public abstract class AlignFile extends FileParse
    * 
    * @param al
    */
-  public void addAnnotations(Alignment al)
+  public void addAnnotations(AlignmentI al)
   {
     addProperties(al);
     for (int i = 0; i < annotations.size(); i++)
@@ -198,7 +211,7 @@ public abstract class AlignFile extends FileParse
        * Rna.GetBasePairsFromAlignmentAnnotation(annotations.elementAt(i));
        * Rna.HelixMap(pairArray);
        */
-      AlignmentAnnotation an = (AlignmentAnnotation) annotations
+      AlignmentAnnotation an = annotations
               .elementAt(i);
       an.validateRangeAndDisplay();
       al.addAnnotation(an);
@@ -207,13 +220,24 @@ public abstract class AlignFile extends FileParse
   }
 
   /**
+   * register sequence groups on the alignment for **output**
+   * 
+   * @param al
+   */
+  public void addSeqGroups(AlignmentI al)
+  {
+    this.seqGroups = al.getGroups();
+
+  }
+
+  /**
    * Add any additional information extracted from the file to the alignment
    * properties.
    * 
    * @note implicitly called by addAnnotations()
    * @param al
    */
-  public void addProperties(Alignment al)
+  public void addProperties(AlignmentI al)
   {
     if (properties != null && properties.size() > 0)
     {
@@ -267,8 +291,9 @@ public abstract class AlignFile extends FileParse
    */
   protected void initData()
   {
-    seqs = new Vector();
-    annotations = new Vector();
+    seqs = new Vector<SequenceI>();
+    annotations = new Vector<AlignmentAnnotation>();
+    seqGroups = new ArrayList<SequenceGroup>();
     parseCalled=false;
   }
 
@@ -280,7 +305,7 @@ public abstract class AlignFile extends FileParse
    */
   protected void setSeqs(SequenceI[] s)
   {
-    seqs = new Vector();
+    seqs = new Vector<SequenceI>();
 
     for (int i = 0; i < s.length; i++)
     {
@@ -340,13 +365,13 @@ public abstract class AlignFile extends FileParse
   /**
    * vector of String[] treeName, newickString pairs
    */
-  Vector newickStrings = null;
+  Vector<String[]> newickStrings = null;
 
   protected void addNewickTree(String treeName, String newickString)
   {
     if (newickStrings == null)
     {
-      newickStrings = new Vector();
+      newickStrings = new Vector<String[]>();
     }
     newickStrings.addElement(new String[]
     { treeName, newickString });
@@ -354,11 +379,16 @@ public abstract class AlignFile extends FileParse
 
   protected int getTreeCount()
   {
-    if (newickStrings == null)
+    return newickStrings == null ? 0 : newickStrings.size();
+  }
+
+  public void addGroups(AlignmentI al)
+  {
+
+    for (SequenceGroup sg : getSeqGroups())
     {
-      return 0;
+      al.addGroup(sg);
     }
-    return newickStrings.size();
   }
 
 }