JAL-1115 List rather than vector for sequence groups (minimal additional synchronized...
[jalview.git] / src / jalview / datamodel / AlignmentView.java
index efb7c4a..2d234fe 100644 (file)
@@ -24,7 +24,7 @@ import jalview.util.MessageManager;
 import jalview.util.ShiftList;
 
 import java.io.PrintStream;
-import java.util.Enumeration;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Vector;
 
@@ -47,7 +47,7 @@ public class AlignmentView
    * one or more ScGroup objects, which are referenced by each seqCigar's group
    * membership
    */
-  private Vector scGroups;
+  private List<ScGroup> scGroups=null;
 
   private boolean isNa = false;
 
@@ -133,27 +133,24 @@ public class AlignmentView
       selseqs = alignment.getSequencesArray();
     }
 
+    List<List<SequenceI>> seqsets=new ArrayList<List<SequenceI>>();
     // get the alignment's group list and make a copy
-    Vector grps = new Vector();
+    List<SequenceGroup> grps = new ArrayList<SequenceGroup>();
     List<SequenceGroup> gg = alignment.getGroups();
     grps.addAll(gg);
     ScGroup[] sgrps = null;
     boolean addedgps[] = null;
     if (grps != null)
     {
-      SequenceGroup sg;
       if (selection != null && selectedRegionOnly)
       {
         // trim annotation to the region being stored.
         // strip out any groups that do not actually intersect with the
         // visible and selected region
         int ssel = selection.getStartRes(), esel = selection.getEndRes();
-        Vector isg = new Vector();
-        Enumeration en = grps.elements();
-        while (en.hasMoreElements())
+        List<SequenceGroup> isg = new ArrayList<SequenceGroup>();
+        for (SequenceGroup sg : grps)
         {
-          sg = (SequenceGroup) en.nextElement();
-
           if (!(sg.getStartRes() > esel || sg.getEndRes() < ssel))
           {
             // adjust bounds of new group, if necessary.
@@ -168,7 +165,7 @@ public class AlignmentView
             sg.setStartRes(sg.getStartRes() - ssel + 1);
             sg.setEndRes(sg.getEndRes() - ssel + 1);
 
-            isg.addElement(sg);
+            isg.add(sg);
           }
         }
         grps = isg;
@@ -178,13 +175,13 @@ public class AlignmentView
       addedgps = new boolean[grps.size()];
       for (int g = 0; g < sgrps.length; g++)
       {
-        sg = (SequenceGroup) grps.elementAt(g);
+        SequenceGroup sg = grps.get(g);
         sgrps[g] = new ScGroup();
         sgrps[g].sg = new SequenceGroup(sg);
         addedgps[g] = false;
-        grps.setElementAt(sg.getSequences(null), g);
+        seqsets.set(g, sg.getSequences(null));
       }
-      // grps now contains vectors (should be sets) for each group, so we can
+      // seqsets now contains vectors (should be sets) for each group, so we can
       // track when we've done with the group
     }
     int csi = 0;
@@ -198,11 +195,11 @@ public class AlignmentView
           sequences[csi].setGroupMembership(selected);
           selected.addElement(sequences[csi]);
         }
-        if (grps != null)
+        if (seqsets != null)
         {
           for (int sg = 0; sg < sgrps.length; sg++)
           {
-            if (((Vector) grps.elementAt(sg)).contains(selseqs[i]))
+            if ((seqsets.get(sg)).contains(selseqs[i]))
             {
               sequences[csi].setGroupMembership(sgrps[sg]);
               sgrps[sg].sg.deleteSequence(selseqs[i], false);
@@ -211,10 +208,10 @@ public class AlignmentView
               {
                 if (scGroups == null)
                 {
-                  scGroups = new Vector();
+                  scGroups = new ArrayList<ScGroup>();
                 }
                 addedgps[sg] = true;
-                scGroups.addElement(sgrps[sg]);
+                scGroups.add(sgrps[sg]);
               }
             }
           }
@@ -356,7 +353,7 @@ public class AlignmentView
           SequenceGroup[] nsg = new SequenceGroup[nvg];
           for (int g = 0; g < nvg; g++)
           {
-            SequenceGroup sg = ((ScGroup) scGroups.elementAt(g)).sg;
+            SequenceGroup sg = scGroups.get(g).sg;
             if (r)
             {
               if (sg.getStartRes() > gend || sg.getEndRes() < gstart)
@@ -442,7 +439,7 @@ public class AlignmentView
             for (int g = 0; g < nvg; g++)
             {
               if (nsg[g] != null
-                      && sequences[nsq].isMemberOf(scGroups.elementAt(g)))
+                      && sequences[nsq].isMemberOf(scGroups.get(g)))
               {
                 nsg[g].addSequence(aln[nsq], false);
               }
@@ -1038,7 +1035,7 @@ public class AlignmentView
               + " groups defined on the view.");
       for (int g = 0; g < view.scGroups.size(); g++)
       {
-        ScGroup sgr = (ScGroup) view.scGroups.elementAt(g);
+        ScGroup sgr = view.scGroups.get(g);
         os.println("Group " + g + ": Name = " + sgr.sg.getName()
                 + " Contains " + sgr.seqs.size() + " Seqs.");
         os.println("This group runs from " + sgr.sg.getStartRes() + " to "