JAL-1114 - refactor methods handling Vectors and Hashtables to Lists and Maps, and...
authorjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 30 May 2012 18:21:25 +0000 (19:21 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 30 May 2012 18:21:25 +0000 (19:21 +0100)
46 files changed:
src/jalview/analysis/AAFrequency.java
src/jalview/analysis/AlignmentSorter.java
src/jalview/analysis/Grouping.java
src/jalview/api/AlignViewportI.java
src/jalview/appletgui/APopupMenu.java
src/jalview/appletgui/AlignFrame.java
src/jalview/appletgui/AlignViewport.java
src/jalview/appletgui/AlignmentPanel.java
src/jalview/appletgui/AnnotationColourChooser.java
src/jalview/appletgui/IdCanvas.java
src/jalview/appletgui/IdPanel.java
src/jalview/appletgui/SeqCanvas.java
src/jalview/appletgui/SeqPanel.java
src/jalview/appletgui/SliderPanel.java
src/jalview/appletgui/TreeCanvas.java
src/jalview/datamodel/Alignment.java
src/jalview/datamodel/AlignmentI.java
src/jalview/datamodel/AlignmentView.java
src/jalview/datamodel/AnnotatedCollectionI.java
src/jalview/datamodel/HiddenSequences.java
src/jalview/datamodel/SequenceCollectionI.java [new file with mode: 0644]
src/jalview/datamodel/SequenceGroup.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/AlignViewport.java
src/jalview/gui/AlignmentPanel.java
src/jalview/gui/AnnotationColourChooser.java
src/jalview/gui/AnnotationExporter.java
src/jalview/gui/IdCanvas.java
src/jalview/gui/IdPanel.java
src/jalview/gui/Jalview2XML.java
src/jalview/gui/PopupMenu.java
src/jalview/gui/SeqCanvas.java
src/jalview/gui/SeqPanel.java
src/jalview/gui/SliderPanel.java
src/jalview/gui/TextColourChooser.java
src/jalview/gui/TreeCanvas.java
src/jalview/gui/VamsasApplication.java
src/jalview/io/AnnotationFile.java
src/jalview/schemes/ClustalxColourScheme.java
src/jalview/schemes/ColourSchemeI.java
src/jalview/schemes/ColourSchemeProperty.java
src/jalview/schemes/RNAHelicesColourChooser.java
src/jalview/schemes/ResidueColourScheme.java
src/jalview/schemes/TCoffeeColourScheme.java
src/jalview/viewmodel/AlignmentViewport.java
src/jalview/ws/rest/RestJobThread.java

index d56fb01..58531de 100755 (executable)
@@ -44,20 +44,21 @@ public class AAFrequency
 
   public static final String PROFILE = "P";
 
-  public static final Hashtable[] calculate(Vector sequences, int start,
+  public static final Hashtable[] calculate(List<SequenceI> list, int start,
           int end)
   {
-    return calculate(sequences, start, end, false);
+    return calculate(list, start, end, false);
   }
 
-  public static final Hashtable[] calculate(Vector sequences, int start,
+  public static final Hashtable[] calculate(List<SequenceI> sequences, int start,
           int end, boolean profile)
   {
     SequenceI[] seqs = new SequenceI[sequences.size()];
     int width = 0;
+    synchronized (sequences) {
     for (int i = 0; i < sequences.size(); i++)
     {
-      seqs[i] = (SequenceI) sequences.elementAt(i);
+      seqs[i] = sequences.get(i);
       if (seqs[i].getLength() > width)
       {
         width = seqs[i].getLength();
@@ -72,9 +73,9 @@ public class AAFrequency
     }
 
     calculate(seqs, start, end, reply, profile);
-
     return reply;
   }
+  }
 
   public static final void calculate(SequenceI[] sequences, int start,
           int end, Hashtable[] result)
index 25717d0..b84eeaf 100755 (executable)
@@ -290,10 +290,8 @@ public class AlignmentSorter
 
     // SORTS GROUPS BY SIZE
     // ////////////////////
-    for (int i = 0; i < align.getGroups().size(); i++)
+    for (SequenceGroup sg:align.getGroups())
     {
-      SequenceGroup sg = (SequenceGroup) align.getGroups().elementAt(i);
-
       for (int j = 0; j < groups.size(); j++)
       {
         SequenceGroup sg2 = (SequenceGroup) groups.elementAt(j);
index 95323e6..91fef84 100644 (file)
@@ -24,6 +24,7 @@ import jalview.datamodel.SequenceI;
 
 import java.util.Enumeration;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Vector;
 
 /**
@@ -42,25 +43,24 @@ public class Grouping
    * 
    * @param sequences
    * @param selectedChars
-   * @param exgroups
+   * @param list
    * @return
    */
   public static SequenceGroup[] makeGroupsFrom(SequenceI[] sequences,
-          String[] selectedChars, Vector exgroups)
+          String[] selectedChars, List<SequenceGroup> list)
   {
     // TODO: determine how to get/recover input data for group generation
     Hashtable gps = new Hashtable();
     int width = 0, i;
     Hashtable pgroup = new Hashtable();
-    if (exgroups != null)
+    if (list != null)
     {
-      SequenceGroup sg;
-      for (Enumeration g = exgroups.elements(); g.hasMoreElements();)
+      for (SequenceGroup sg:list)
       {
-        sg = (SequenceGroup) g.nextElement();
-        for (Enumeration sq = sg.getSequences(null).elements(); sq
-                .hasMoreElements();)
-          pgroup.put(sq.nextElement().toString(), sg);
+        for (SequenceI sq :sg.getSequences(null))
+        {
+          pgroup.put(sq.toString(), sg);
+        }
       }
     }
     for (i = 0; i < sequences.length; i++)
index 6688e27..ab9efb1 100644 (file)
@@ -4,10 +4,14 @@
 package jalview.api;
 
 import java.util.Hashtable;
+import java.util.Map;
 
 import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
+import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.SequenceCollectionI;
+import jalview.datamodel.SequenceI;
 import jalview.schemes.ColourSchemeI;
 import jalview.schemes.RNAHelicesColour;
 
@@ -100,4 +104,9 @@ public interface AlignViewportI
    */
   void setGlobalColourScheme(ColourSchemeI rhc);
 
+  Map<SequenceI, SequenceCollectionI> getHiddenRepSequences();
+
+  void setHiddenRepSequences(
+          Map<SequenceI, SequenceCollectionI> hiddenRepSequences);
+
 }
index b45fa6b..acdae46 100755 (executable)
@@ -799,8 +799,7 @@ public class APopupMenu extends java.awt.PopupMenu implements
   {
     SequenceGroup sg = getGroup();
     sg.cs = new ClustalxColourScheme(
-            sg.getSequences(ap.av.getHiddenRepSequences()),
-            ap.av.getAlignment().getWidth());
+            sg,ap.av.getHiddenRepSequences());
     refresh();
   }
 
index 834b904..6ce68c3 100644 (file)
@@ -87,6 +87,7 @@ import java.net.URL;
 import java.net.URLEncoder;\r
 import java.util.Enumeration;\r
 import java.util.Hashtable;\r
+import java.util.List;\r
 import java.util.StringTokenizer;\r
 import java.util.Vector;\r
 \r
@@ -956,9 +957,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
     else if (source == clustalColour)\r
     {\r
       abovePIDThreshold.setState(false);\r
-      changeColour(new ClustalxColourScheme(\r
-              viewport.getAlignment().getSequences(),\r
-              viewport.getAlignment().getWidth()));\r
+      changeColour(new ClustalxColourScheme(viewport.getAlignment(),null));\r
     }\r
     else if (source == zappoColour)\r
     {\r
@@ -1504,10 +1503,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
 \r
   synchronized void slideSequences(boolean right, int size)\r
   {\r
-    Vector sg = new Vector();\r
+    List<SequenceI>sg = new Vector<SequenceI>();\r
     if (viewport.cursorMode)\r
     {\r
-      sg.addElement(viewport.getAlignment()\r
+      sg.add(viewport.getAlignment()\r
               .getSequenceAt(alignPanel.seqPanel.seqCanvas.cursorY));\r
     }\r
     else if (viewport.getSelectionGroup() != null\r
@@ -1523,7 +1522,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
       return;\r
     }\r
 \r
-    Vector invertGroup = new Vector();\r
+    Vector<SequenceI> invertGroup = new Vector();\r
 \r
     for (int i = 0; i < viewport.getAlignment().getHeight(); i++)\r
     {\r
@@ -1531,11 +1530,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
         invertGroup.addElement(viewport.getAlignment().getSequenceAt(i));\r
     }\r
 \r
-    SequenceI[] seqs1 = new SequenceI[sg.size()];\r
-    for (int i = 0; i < sg.size(); i++)\r
-      seqs1[i] = (SequenceI) sg.elementAt(i);\r
+    SequenceI[] seqs1 = sg.toArray(new SequenceI[sg.size()]);\r
 \r
-    SequenceI[] seqs2 = new SequenceI[invertGroup.size()];\r
+    SequenceI[] seqs2 = invertGroup.toArray(new SequenceI[invertGroup.size()]);\r
     for (int i = 0; i < invertGroup.size(); i++)\r
       seqs2[i] = (SequenceI) invertGroup.elementAt(i);\r
 \r
@@ -1898,9 +1895,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
         Color col = new Color((int) (Math.random() * 255),\r
                 (int) (Math.random() * 255), (int) (Math.random() * 255));\r
         col = col.brighter();\r
-        for (Enumeration sq = gps[g].getSequences(null).elements(); sq\r
-                .hasMoreElements(); viewport.setSequenceColour(\r
-                (SequenceI) sq.nextElement(), col))\r
+        for (SequenceI sq : gps[g].getSequences(null))\r
+          viewport.setSequenceColour(\r
+                sq, col)\r
           ;\r
       }\r
       PaintRefresher.Refresh(this, viewport.getSequenceSetId());\r
@@ -2017,12 +2014,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,  ItemLis
 \r
       addHistoryItem(trimRegion);\r
 \r
-      Vector groups = viewport.getAlignment().getGroups();\r
 \r
-      for (int i = 0; i < groups.size(); i++)\r
-      {\r
-        SequenceGroup sg = (SequenceGroup) groups.elementAt(i);\r
 \r
+      for (SequenceGroup sg:viewport.getAlignment().getGroups())\r
+      {\r
         if ((trimLeft && !sg.adjustForRemoveLeft(column))\r
                 || (!trimLeft && !sg.adjustForRemoveRight(column)))\r
         {\r
index e094d7d..9258e3a 100644 (file)
@@ -662,16 +662,14 @@ public class AlignViewport extends AlignmentViewport implements AlignViewportI,
 
   public void updateSequenceIdColours()
   {
-    Vector groups = alignment.getGroups();
-    for (int ig = 0, igSize = groups.size(); ig < igSize; ig++)
+    
+    for (SequenceGroup sg:alignment.getGroups())
     {
-      SequenceGroup sg = (SequenceGroup) groups.elementAt(ig);
       if (sg.idColour != null)
       {
-        Vector sqs = sg.getSequences(getHiddenRepSequences());
-        for (int s = 0, sSize = sqs.size(); s < sSize; s++)
+        for (SequenceI s:sg.getSequences(getHiddenRepSequences()))
         {
-          this.setSequenceColour((SequenceI) sqs.elementAt(s), sg.idColour);
+          this.setSequenceColour(s, sg.idColour);
         }
       }
     }
index 99084ba..e9d418e 100644 (file)
@@ -919,7 +919,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, Alignme
     // remove old automatic annotation
     // add any new annotation
 
-    Vector gr = av.getAlignment().getGroups(); // OrderedBy(av.alignment.getSequencesArray());
+    ; // OrderedBy(av.alignment.getSequencesArray());
     // intersect alignment annotation with alignment groups
 
     AlignmentAnnotation[] aan = av.getAlignment().getAlignmentAnnotation();
@@ -936,13 +936,11 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, Alignme
         }
       }
     }
-    SequenceGroup sg;
-    if (gr != null)
+    if (av.getAlignment().getGroups()!= null)
     {
-      for (int g = 0; g < gr.size(); g++)
+      for (SequenceGroup sg:av.getAlignment().getGroups())
       {
         updateCalcs = false;
-        sg = (SequenceGroup) gr.elementAt(g);
         if (applyGlobalSettings || !oldrfs.containsKey(sg))
         {
           // set defaults for this group's conservation/consensus
index a3f9fa6..1a661be 100755 (executable)
@@ -58,11 +58,8 @@ public class AnnotationColourChooser extends Panel implements
     if (av.getAlignment().getGroups() != null)
     {
       oldgroupColours = new Hashtable();
-      Vector allGroups = ap.av.getAlignment().getGroups();
-      SequenceGroup sg;
-      for (int g = 0; g < allGroups.size(); g++)
+      for (SequenceGroup sg: ap.av.getAlignment().getGroups())
       {
-        sg = (SequenceGroup) allGroups.elementAt(g);
         if (sg.cs != null)
         {
           oldgroupColours.put(sg, sg.cs);
@@ -466,12 +463,9 @@ public class AnnotationColourChooser extends Panel implements
 
     if (av.getAlignment().getGroups() != null)
     {
-      Vector allGroups = ap.av.getAlignment().getGroups();
-      SequenceGroup sg;
-      for (int g = 0; g < allGroups.size(); g++)
+      for (SequenceGroup sg:ap.av.getAlignment().getGroups())
       {
-        sg = (SequenceGroup) allGroups.elementAt(g);
-
+     
         if (sg.cs == null)
         {
           continue;
@@ -501,11 +495,8 @@ public class AnnotationColourChooser extends Panel implements
     av.setGlobalColourScheme(oldcs);
     if (av.getAlignment().getGroups() != null)
     {
-      Vector allGroups = ap.av.getAlignment().getGroups();
-      SequenceGroup sg;
-      for (int g = 0; g < allGroups.size(); g++)
+      for (SequenceGroup sg:ap.av.getAlignment().getGroups())
       {
-        sg = (SequenceGroup) allGroups.elementAt(g);
         Object cs = oldgroupColours.get(sg);
         if (cs instanceof ColourSchemeI)
         {
index 67bba32..a3eac2d 100755 (executable)
@@ -18,6 +18,7 @@
 package jalview.appletgui;
 
 import java.awt.*;
+import java.util.List;
 
 import jalview.datamodel.*;
 
@@ -39,7 +40,7 @@ public class IdCanvas extends Panel
 
   boolean fastPaint = false;
 
-  java.util.Vector searchResults;
+  List<SequenceI> searchResults;
 
   public IdCanvas(AlignViewport av)
   {
@@ -296,9 +297,9 @@ public class IdCanvas extends Panel
     }
   }
 
-  public void setHighlighted(java.util.Vector found)
+  public void setHighlighted(List<SequenceI> list)
   {
-    searchResults = found;
+    searchResults = list;
     repaint();
   }
 
index a6bff67..0042856 100755 (executable)
@@ -19,6 +19,7 @@ package jalview.appletgui;
 
 import java.awt.*;
 import java.awt.event.*;
+import java.util.List;
 import java.util.Vector;
 
 import jalview.datamodel.*;
@@ -400,16 +401,16 @@ public class IdPanel extends Panel implements MouseListener,
     av.sendSelection();
   }
 
-  public void highlightSearchResults(java.util.Vector found)
+  public void highlightSearchResults(List<SequenceI> list)
   {
-    idCanvas.setHighlighted(found);
+    idCanvas.setHighlighted(list);
 
-    if (found == null)
+    if (list == null)
     {
       return;
     }
 
-    int index = av.getAlignment().findIndex((SequenceI) found.elementAt(0));
+    int index = av.getAlignment().findIndex(list.get(0));
 
     // do we need to scroll the panel?
     if (av.getStartSeq() > index || av.getEndSeq() < index)
index 2296ab1..c7a8232 100755 (executable)
@@ -643,7 +643,7 @@ public class SeqCanvas extends Panel
 
     if ((group == null) && (av.getAlignment().getGroups().size() > 0))
     {
-      group = (SequenceGroup) av.getAlignment().getGroups().elementAt(0);
+      group = (SequenceGroup) av.getAlignment().getGroups().get(0);
       groupIndex = 0;
     }
 
@@ -799,7 +799,7 @@ public class SeqCanvas extends Panel
           break;
         }
 
-        group = (SequenceGroup) av.getAlignment().getGroups().elementAt(
+        group = (SequenceGroup) av.getAlignment().getGroups().get(
                 groupIndex);
       } while (groupIndex < av.getAlignment().getGroups().size());
 
index f121d11..b9c5cf0 100644 (file)
@@ -287,7 +287,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
       else
       {
         // Now add any sequences between min and max
-        sg.getSequences(null).removeAllElements();
+        sg.clear();
         for (int i = min; i < max; i++)
         {
           sg.addSequence(av.getAlignment().getSequenceAt(i), false);
@@ -1036,13 +1036,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
 
     if (groupEditing)
     {
-      Vector vseqs = sg.getSequences(av.getHiddenRepSequences());
-      int g, groupSize = vseqs.size();
-      SequenceI[] groupSeqs = new SequenceI[groupSize];
-      for (g = 0; g < groupSeqs.length; g++)
-      {
-        groupSeqs[g] = (SequenceI) vseqs.elementAt(g);
-      }
+      SequenceI[] groupSeqs = sg.getSequences(av.getHiddenRepSequences()).toArray(new SequenceI[0]);
 
       // drag to right
       if (insertGap)
@@ -1064,11 +1058,11 @@ public class SeqPanel extends Panel implements MouseMotionListener,
         {
           blank = true;
 
-          for (g = 0; g < groupSize; g++)
+          for (SequenceI gs:groupSeqs)
           {
             for (int j = 0; j < startres - lastres; j++)
             {
-              if (!jalview.util.Comparison.isGap(groupSeqs[g]
+              if (!jalview.util.Comparison.isGap(gs
                       .getCharAt(fixedRight - j)))
               {
                 blank = false;
@@ -1121,16 +1115,16 @@ public class SeqPanel extends Panel implements MouseMotionListener,
         // / Are we able to delete?
         // ie are all columns blank?
 
-        for (g = 0; g < groupSize; g++)
+        for (SequenceI gs:groupSeqs)
         {
           for (int j = startres; j < lastres; j++)
           {
-            if (groupSeqs[g].getLength() <= j)
+            if (gs.getLength() <= j)
             {
               continue;
             }
 
-            if (!jalview.util.Comparison.isGap(groupSeqs[g].getCharAt(j)))
+            if (!jalview.util.Comparison.isGap(gs.getCharAt(j)))
             {
               // Not a gap, block edit not valid
               endEditing();
@@ -1421,9 +1415,8 @@ public class SeqPanel extends Panel implements MouseMotionListener,
     {
       if (stretchGroup.cs instanceof ClustalxColourScheme)
       {
-        ((ClustalxColourScheme) stretchGroup.cs).resetClustalX(
-                stretchGroup.getSequences(av.getHiddenRepSequences()),
-                stretchGroup.getWidth());
+        ((ClustalxColourScheme) stretchGroup.cs).alignmentChanged(
+stretchGroup,av.getHiddenRepSequences());
       }
 
       if (stretchGroup.cs instanceof Blosum62ColourScheme
index f7522be..2046df6 100755 (executable)
@@ -18,6 +18,7 @@
 package jalview.appletgui;
 
 import java.util.*;
+import java.util.List;
 
 import java.awt.*;
 import java.awt.event.*;
@@ -195,24 +196,22 @@ public class SliderPanel extends Panel implements ActionListener,
     }
 
     ColourSchemeI toChange = null;
-    Vector allGroups = null;
-    int groupIndex = 0;
+    Iterator<SequenceGroup> allGroups = null;
 
     if (allGroupsCheck.getState())
     {
-      allGroups = ap.av.getAlignment().getGroups();
-      groupIndex = allGroups.size() - 1;
+      allGroups = ap.av.getAlignment().getGroups().listIterator();
     }
     else
     {
       toChange = cs;
     }
 
-    while (groupIndex > -1)
+    do 
     {
       if (allGroups != null)
       {
-        toChange = ((SequenceGroup) allGroups.elementAt(groupIndex)).cs;
+        toChange = allGroups.next().cs;
       }
 
       if (forConservation)
@@ -224,8 +223,7 @@ public class SliderPanel extends Panel implements ActionListener,
         toChange.setThreshold(i, ap.av.getIgnoreGapsConsensus());
       }
 
-      groupIndex--;
-    }
+    } while (allGroups!=null && allGroups.hasNext());
 
     ap.seqPanel.seqCanvas.repaint();
 
index 9a4c82c..4c56e69 100755 (executable)
@@ -608,6 +608,9 @@ public class TreeCanvas extends Panel implements MouseListener,
 
       ColourSchemeI cs = null;
 
+      SequenceGroup sg = new SequenceGroup(sequences, "", cs, true, true,
+              false, 0, av.getAlignment().getWidth() - 1);
+
       if (av.getGlobalColourScheme() != null)
       {
         if (av.getGlobalColourScheme() instanceof UserColourScheme)
@@ -619,8 +622,7 @@ public class TreeCanvas extends Panel implements MouseListener,
         }
         else
         {
-          cs = ColourSchemeProperty.getColour(sequences, av.getAlignment()
-                  .getWidth(), ColourSchemeProperty.getColourName(av
+          cs = ColourSchemeProperty.getColour(sg, ColourSchemeProperty.getColourName(av
                   .getGlobalColourScheme()));
         }
         // cs is null if shading is an annotationColourGradient
@@ -630,9 +632,9 @@ public class TreeCanvas extends Panel implements MouseListener,
                   av.getIgnoreGapsConsensus());
         }
       }
-
-      SequenceGroup sg = new SequenceGroup(sequences, "", cs, true, true,
-              false, 0, av.getAlignment().getWidth() - 1);
+      // TODO: cs used to be initialized with a sequence collection and recalcConservation called automatically
+      // instead we set it manually - recalc called after updateAnnotation
+      sg.cs=cs;
 
       sg.setName("JTreeGroup:" + sg.hashCode());
       sg.setIdColour(col);
index c32a40f..23fe057 100755 (executable)
@@ -122,6 +122,13 @@ public class Alignment implements AlignmentI
   {
     return sequences;
   }
+  @Override
+  public List<SequenceI> getSequences(
+          Map<SequenceI, SequenceCollectionI> hiddenReps)
+  {
+    // TODO: in jalview 2.8 we don't do anything with hiddenreps - fix design to work on this.
+    return sequences;
+  }
 
   public SequenceI[] getSequencesArray()
   {
@@ -1219,13 +1226,12 @@ public class Alignment implements AlignmentI
     {
       this.addCodonFrame(acod[a]);
     }
-    Vector sg = toappend.getGroups();
+    List<SequenceGroup> sg = toappend.getGroups();
     if (sg != null)
     {
-      Enumeration el = sg.elements();
-      while (el.hasMoreElements())
+      for (SequenceGroup _sg:sg)
       {
-        addGroup((SequenceGroup) el.nextElement());
+        addGroup(_sg);
       }
     }
     if (toappend.getHiddenSequences() != null)
index ec35124..71467f7 100755 (executable)
@@ -175,9 +175,9 @@ public interface AlignmentI extends AnnotatedCollectionI
   /**
    * Get all the groups associated with this alignment.
    * 
-   * @return All groups as a Vector.
+   * @return All groups as a list.
    */
-  public Vector getGroups();
+  public List<SequenceGroup> getGroups();
 
   /**
    * Deletes all groups from this alignment.
index 8e596ce..a23aad5 100644 (file)
@@ -21,6 +21,7 @@ import jalview.util.ShiftList;
 \r
 import java.io.PrintStream;\r
 import java.util.Enumeration;\r
+import java.util.List;\r
 import java.util.Vector;\r
 \r
 /**\r
@@ -105,7 +106,7 @@ public class AlignmentView
     SequenceI[] selseqs;\r
     if (selection != null)\r
     {\r
-      Vector sel = selection.getSequences(null);\r
+      List<SequenceI> sel = selection.getSequences(null);\r
       this.selected = new Vector();\r
       selseqs = selection.getSequencesInOrder(alignment, selectedRegionOnly);\r
     }\r
@@ -116,12 +117,8 @@ public class AlignmentView
 \r
     // get the alignment's group list and make a copy\r
     Vector grps = new Vector();\r
-    Vector gg = alignment.getGroups();\r
-    Enumeration gge = gg.elements();\r
-    while (gge.hasMoreElements())\r
-    {\r
-      grps.addElement(gge.nextElement());\r
-    }\r
+    List<SequenceGroup> gg = alignment.getGroups();\r
+    grps.addAll(gg);\r
     ScGroup[] sgrps = null;\r
     boolean addedgps[] = null;\r
     if (grps != null)\r
@@ -1047,12 +1044,10 @@ public class AlignmentView
                 + " wide and has " + visal.getHeight() + " seqs.");\r
         if (visal.getGroups() != null && visal.getGroups().size() > 0)\r
         {\r
-          SequenceGroup sg;\r
-          Enumeration en = visal.getGroups().elements();\r
+          \r
           int i = 1;\r
-          while (en.hasMoreElements())\r
+          for (SequenceGroup sg:visal.getGroups())\r
           {\r
-            sg = (SequenceGroup) en.nextElement();\r
             os.println("Group " + (i++) + " begins at column "\r
                     + sg.getStartRes() + " and ends at " + sg.getEndRes());\r
           }\r
index 085fb70..ff365a9 100644 (file)
@@ -1,6 +1,6 @@
 package jalview.datamodel;
 
-public interface AnnotatedCollectionI
+public interface AnnotatedCollectionI extends SequenceCollectionI
 {
 
   /**
index 9c3b8e0..7914d3d 100755 (executable)
@@ -140,14 +140,14 @@ public class HiddenSequences
     alignment.deleteSequence(sequence);
   }
 
-  public Vector showAll(Hashtable hiddenReps)
+  public Vector showAll(Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
   {
     Vector revealedSeqs = new Vector();
     for (int i = 0; i < hiddenSequences.length; i++)
     {
       if (hiddenSequences[i] != null)
       {
-        Vector tmp = showSequence(i, hiddenReps);
+        Vector tmp = showSequence(i, hiddenRepSequences);
         for (int t = 0; t < tmp.size(); t++)
         {
           revealedSeqs.addElement(tmp.elementAt(t));
@@ -157,14 +157,14 @@ public class HiddenSequences
     return revealedSeqs;
   }
 
-  public Vector showSequence(int alignmentIndex, Hashtable hiddenReps)
+  public Vector showSequence(int alignmentIndex, Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
   {
     Vector revealedSeqs = new Vector();
     SequenceI repSequence = alignment.getSequenceAt(alignmentIndex);
-    if (repSequence != null && hiddenReps != null
-            && hiddenReps.containsKey(repSequence))
+    if (repSequence != null && hiddenRepSequences != null
+            && hiddenRepSequences.containsKey(repSequence))
     {
-      hiddenReps.remove(repSequence);
+      hiddenRepSequences.remove(repSequence);
       revealedSeqs.addElement(repSequence);
     }
 
diff --git a/src/jalview/datamodel/SequenceCollectionI.java b/src/jalview/datamodel/SequenceCollectionI.java
new file mode 100644 (file)
index 0000000..db79b4d
--- /dev/null
@@ -0,0 +1,12 @@
+package jalview.datamodel;
+
+import java.util.List;
+import java.util.Map;
+
+public interface SequenceCollectionI
+{
+  List<SequenceI> getSequences();
+  List<SequenceI> getSequences(Map<SequenceI,SequenceCollectionI> hiddenReps);
+  int getWidth();
+
+}
index 9a6d022..ed21f60 100755 (executable)
@@ -18,6 +18,7 @@
 package jalview.datamodel;
 
 import java.util.*;
+import java.util.List;
 
 import java.awt.*;
 
@@ -54,7 +55,7 @@ public class SequenceGroup implements AnnotatedCollectionI
   /**
    * group members
    */
-  private Vector sequences = new Vector();
+  private Vector<SequenceI> sequences = new Vector<SequenceI>();
 
   /**
    * representative sequence for this group (if any)
@@ -152,7 +153,7 @@ public class SequenceGroup implements AnnotatedCollectionI
     if (seqsel != null)
     {
       sequences = new Vector();
-      Enumeration sq = seqsel.sequences.elements();
+      Enumeration<SequenceI> sq = seqsel.sequences.elements();
       while (sq.hasMoreElements())
       {
         sequences.addElement(sq.nextElement());
@@ -284,8 +285,11 @@ public class SequenceGroup implements AnnotatedCollectionI
 
     return eres;
   }
-
-  public Vector getSequences(Hashtable hiddenReps)
+  public List<SequenceI> getSequences()
+  {
+    return sequences;
+  }
+  public List<SequenceI> getSequences(Map<SequenceI, SequenceCollectionI> hiddenReps)
   {
     if (hiddenReps == null)
     {
@@ -294,17 +298,16 @@ public class SequenceGroup implements AnnotatedCollectionI
     else
     {
       Vector allSequences = new Vector();
-      SequenceI seq, seq2;
+      SequenceI seq;
       for (int i = 0; i < sequences.size(); i++)
       {
         seq = (SequenceI) sequences.elementAt(i);
         allSequences.addElement(seq);
         if (hiddenReps.containsKey(seq))
         {
-          SequenceGroup hsg = (SequenceGroup) hiddenReps.get(seq);
-          for (int h = 0; h < hsg.getSize(); h++)
+          SequenceCollectionI hsg = hiddenReps.get(seq);
+          for (SequenceI seq2:hsg.getSequences())
           {
-            seq2 = hsg.getSequenceAt(h);
             if (seq2 != seq && !allSequences.contains(seq2))
             {
               allSequences.addElement(seq2);
@@ -317,20 +320,14 @@ public class SequenceGroup implements AnnotatedCollectionI
     }
   }
 
-  public SequenceI[] getSequencesAsArray(Hashtable hiddenReps)
+  public SequenceI[] getSequencesAsArray(Map<SequenceI, SequenceCollectionI> map)
   {
-    Vector tmp = getSequences(hiddenReps);
-    if (tmp == null)
+    List<SequenceI> tmp = getSequences(map);
+    if (tmp==null)
     {
       return null;
     }
-    SequenceI[] result = new SequenceI[tmp.size()];
-    for (int i = 0; i < result.length; i++)
-    {
-      result[i] = (SequenceI) tmp.elementAt(i);
-    }
-
-    return result;
+    return tmp.toArray(new SequenceI[tmp.size()]);
   }
 
   /**
@@ -484,7 +481,7 @@ public class SequenceGroup implements AnnotatedCollectionI
     }
     if (cs!=null)
     {
-      cs.alignmentChanged(this);
+      cs.alignmentChanged(this,null);
     }
     try
     {
@@ -497,11 +494,7 @@ public class SequenceGroup implements AnnotatedCollectionI
       if (cs != null)
       {
         cs.setConsensus(cnsns);
-
-        if (cs instanceof ClustalxColourScheme)
-        {
-          ((ClustalxColourScheme) cs).resetClustalX(sequences, getWidth());
-        }
+        cs.alignmentChanged(this,null);
       }
 
       if ((conservation != null)
@@ -521,12 +514,7 @@ public class SequenceGroup implements AnnotatedCollectionI
           if (cs.conservationApplied())
           {
             cs.setConservation(c);
-
-            if (cs instanceof ClustalxColourScheme)
-            {
-              ((ClustalxColourScheme) cs).resetClustalX(sequences,
-                      getWidth());
-            }
+            cs.alignmentChanged(this,null);
           }
         }
       }
@@ -956,18 +944,18 @@ public class SequenceGroup implements AnnotatedCollectionI
    * 
    * @param alignment
    *          (may not be null)
-   * @param hashtable
+   * @param map
    *          (may be null)
    * @return new group containing sequences common to this group and alignment
    */
-  public SequenceGroup intersect(AlignmentI alignment, Hashtable hashtable)
+  public SequenceGroup intersect(AlignmentI alignment, Map<SequenceI, SequenceCollectionI> map)
   {
     SequenceGroup sgroup = new SequenceGroup(this);
     SequenceI[] insect = getSequencesInOrder(alignment);
     sgroup.sequences = new Vector();
     for (int s = 0; insect != null && s < insect.length; s++)
     {
-      if (hashtable == null || hashtable.containsKey(insect[s]))
+      if (map == null || map.containsKey(insect[s]))
       {
         sgroup.sequences.addElement(insect[s]);
       }
@@ -1229,4 +1217,9 @@ public class SequenceGroup implements AnnotatedCollectionI
     }
     return aa;
   }
+
+  public void clear()
+  {
+    sequences.clear();
+  }
 }
index fe96419..76001a5 100755 (executable)
@@ -1559,10 +1559,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   synchronized void slideSequences(boolean right, int size)
   {
-    Vector sg = new Vector();
+    List<SequenceI> sg = new Vector();
     if (viewport.cursorMode)
     {
-      sg.addElement(viewport.getAlignment().getSequenceAt(
+      sg.add(viewport.getAlignment().getSequenceAt(
               alignPanel.seqPanel.seqCanvas.cursorY));
     }
     else if (viewport.getSelectionGroup() != null
@@ -1586,10 +1586,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         invertGroup.add(viewport.getAlignment().getSequenceAt(i));
     }
 
-    SequenceI[] seqs1 = new SequenceI[sg.size()];
-    for (int i = 0; i < sg.size(); i++)
-      seqs1[i] = (SequenceI) sg.elementAt(i);
-
+    SequenceI[] seqs1 = sg.toArray(new SequenceI[0]);
+            
     SequenceI[] seqs2 = new SequenceI[invertGroup.size()];
     for (int i = 0; i < invertGroup.size(); i++)
       seqs2[i] = (SequenceI) invertGroup.elementAt(i);
@@ -2237,12 +2235,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
       addHistoryItem(trimRegion);
 
-      Vector groups = viewport.getAlignment().getGroups();
-
-      for (int i = 0; i < groups.size(); i++)
+      for (SequenceGroup sg :viewport.getAlignment().getGroups())
       {
-        SequenceGroup sg = (SequenceGroup) groups.get(i);
-
         if ((trimLeft && !sg.adjustForRemoveLeft(column))
                 || (!trimLeft && !sg.adjustForRemoveRight(column)))
         {
@@ -2925,8 +2919,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    */
   public void clustalColour_actionPerformed(ActionEvent e)
   {
-    changeColour(new ClustalxColourScheme(viewport.getAlignment()
-            .getSequences(), viewport.getAlignment().getWidth()));
+    changeColour(new ClustalxColourScheme(viewport.getAlignment(), viewport.getHiddenRepSequences()));
   }
 
   /**
@@ -3104,12 +3097,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     if (viewport.getColourAppliesToAllGroups())
     {
-      Vector groups = viewport.getAlignment().getGroups();
 
-      for (int i = 0; i < groups.size(); i++)
-      {
-        SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
 
+      for (SequenceGroup sg:viewport.getAlignment().getGroups())
+      {
         if (cs == null)
         {
           sg.cs = null;
@@ -3118,8 +3109,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
         if (cs instanceof ClustalxColourScheme)
         {
-          sg.cs = new ClustalxColourScheme(sg.getSequences(viewport
-                  .getHiddenRepSequences()), sg.getWidth());
+          sg.cs = new ClustalxColourScheme(sg, viewport
+                  .getHiddenRepSequences());
         }
         else if (cs instanceof UserColourScheme)
         {
@@ -3571,13 +3562,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         return;
       }
 
-      int s = 0;
       SequenceGroup sg = viewport.getSelectionGroup();
 
       /* Decide if the selection is a column region */
-      while (s < sg.getSize())
+      for (SequenceI _s:sg.getSequences())
       {
-        if (((SequenceI) sg.getSequences(null).elementAt(s++)).getLength() < sg
+        if (_s.getLength() < sg
                 .getEndRes())
         {
           JOptionPane
@@ -5292,9 +5282,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         Color col = new Color((int) (Math.random() * 255),
                 (int) (Math.random() * 255), (int) (Math.random() * 255));
         col = col.brighter();
-        for (Enumeration sq = gps[g].getSequences(null).elements(); sq
-                .hasMoreElements(); viewport.setSequenceColour(
-                (SequenceI) sq.nextElement(), col))
+        for (SequenceI s:gps[g].getSequences())
+          viewport.setSequenceColour(
+                s, col)
           ;
       }
       PaintRefresher.Refresh(this, viewport.getSequenceSetId());
index 8f615aa..8bb40a1 100644 (file)
@@ -1161,20 +1161,17 @@ public class AlignViewport extends AlignmentViewport implements SelectionSource,
 
   public void updateSequenceIdColours()
   {
-    Vector groups = alignment.getGroups();
     if (sequenceColours == null)
     {
       sequenceColours = new Hashtable();
     }
-    for (int ig = 0, igSize = groups.size(); ig < igSize; ig++)
+    for (SequenceGroup sg:alignment.getGroups())
     {
-      SequenceGroup sg = (SequenceGroup) groups.elementAt(ig);
       if (sg.idColour != null)
       {
-        Vector sqs = sg.getSequences(getHiddenRepSequences());
-        for (int s = 0, sSize = sqs.size(); s < sSize; s++)
+        for (SequenceI s:sg.getSequences(getHiddenRepSequences()))
         {
-          sequenceColours.put(sqs.elementAt(s), sg.idColour);
+          sequenceColours.put(s, sg.idColour);
         }
       }
     }
index 4c8df4b..330620c 100644 (file)
@@ -1400,7 +1400,6 @@ public class AlignmentPanel extends GAlignmentPanel implements
     // remove old automatic annotation
     // add any new annotation
 
-    Vector gr = av.getAlignment().getGroups(); // OrderedBy(av.getAlignment().getSequencesArray());
     // intersect alignment annotation with alignment groups
 
     AlignmentAnnotation[] aan = av.getAlignment().getAlignmentAnnotation();
@@ -1417,13 +1416,11 @@ public class AlignmentPanel extends GAlignmentPanel implements
         }
       }
     }
-    SequenceGroup sg;
-    if (gr != null)
+    if (av.getAlignment().getGroups()!=null)
     {
-      for (int g = 0; g < gr.size(); g++)
+      for (SequenceGroup sg:av.getAlignment().getGroups())
       {
         updateCalcs = false;
-        sg = (SequenceGroup) gr.elementAt(g);
         if (applyGlobalSettings || !oldrfs.containsKey(sg))
         {
           // set defaults for this group's conservation/consensus
index 7fb868f..64b1d19 100755 (executable)
@@ -54,11 +54,8 @@ public class AnnotationColourChooser extends JPanel
     if (av.getAlignment().getGroups() != null)
     {
       oldgroupColours = new Hashtable();
-      Vector allGroups = ap.av.getAlignment().getGroups();
-      SequenceGroup sg;
-      for (int g = 0; g < allGroups.size(); g++)
+      for (SequenceGroup sg:ap.av.getAlignment().getGroups())
       {
-        sg = (SequenceGroup) allGroups.get(g);
         if (sg.cs != null)
         {
           oldgroupColours.put(sg, sg.cs);
@@ -452,12 +449,9 @@ public class AnnotationColourChooser extends JPanel
 
     if (av.getAlignment().getGroups() != null)
     {
-      Vector allGroups = ap.av.getAlignment().getGroups();
-      SequenceGroup sg;
-      for (int g = 0; g < allGroups.size(); g++)
+      
+      for (SequenceGroup sg:ap.av.getAlignment().getGroups())
       {
-        sg = (SequenceGroup) allGroups.get(g);
-
         if (sg.cs == null)
         {
           continue;
@@ -510,11 +504,9 @@ public class AnnotationColourChooser extends JPanel
     av.setGlobalColourScheme(oldcs);
     if (av.getAlignment().getGroups() != null)
     {
-      Vector allGroups = ap.av.getAlignment().getGroups();
-      SequenceGroup sg;
-      for (int g = 0; g < allGroups.size(); g++)
+      
+      for (SequenceGroup sg:ap.av.getAlignment().getGroups())
       {
-        sg = (SequenceGroup) allGroups.get(g);
         sg.cs = (ColourSchemeI) oldgroupColours.get(sg);
       }
     }
index ffc5c1c..9c6231a 100755 (executable)
@@ -18,6 +18,7 @@
 package jalview.gui;\r
 \r
 import java.util.*;\r
+import java.util.List;\r
 \r
 import java.awt.*;\r
 import java.awt.event.*;\r
@@ -44,7 +45,7 @@ public class AnnotationExporter extends JPanel
 \r
   AlignmentAnnotation[] annotations;\r
 \r
-  Vector sequenceGroups;\r
+  List<SequenceGroup> sequenceGroups;\r
 \r
   Hashtable alignmentProperties;\r
 \r
@@ -73,7 +74,7 @@ public class AnnotationExporter extends JPanel
   }\r
 \r
   public void exportAnnotations(AlignmentPanel ap,\r
-          AlignmentAnnotation[] annotations, Vector sequenceGroups,\r
+          AlignmentAnnotation[] annotations, List<SequenceGroup> list,\r
           Hashtable alProperties)\r
   {\r
     this.ap = ap;\r
@@ -81,7 +82,7 @@ public class AnnotationExporter extends JPanel
     GFFFormat.setVisible(false);\r
     CSVFormat.setVisible(true);\r
     this.annotations = annotations;\r
-    this.sequenceGroups = sequenceGroups;\r
+    this.sequenceGroups = list;\r
     this.alignmentProperties = alProperties;\r
     frame.setTitle("Export Annotations");\r
   }\r
index 2a2acfb..235747c 100755 (executable)
@@ -19,6 +19,8 @@ package jalview.gui;
 
 import java.awt.*;
 import java.awt.image.*;
+import java.util.List;
+
 import javax.swing.*;
 
 import jalview.datamodel.*;
@@ -47,7 +49,7 @@ public class IdCanvas extends JPanel
 
   boolean fastPaint = false;
 
-  java.util.Vector searchResults;
+  List<SequenceI> searchResults;
 
   FontMetrics fm;
 
@@ -476,12 +478,12 @@ public class IdCanvas extends JPanel
   /**
    * DOCUMENT ME!
    * 
-   * @param found
+   * @param list
    *          DOCUMENT ME!
    */
-  public void setHighlighted(java.util.Vector found)
+  public void setHighlighted(List<SequenceI> list)
   {
-    searchResults = found;
+    searchResults = list;
     repaint();
   }
 }
index 9d1cae4..fa97215 100755 (executable)
@@ -19,6 +19,7 @@ package jalview.gui;
 
 import java.awt.*;
 import java.awt.event.*;
+import java.util.List;
 import java.util.Vector;
 
 import javax.swing.*;
@@ -429,19 +430,19 @@ public class IdPanel extends JPanel implements MouseListener,
   /**
    * DOCUMENT ME!
    * 
-   * @param found
+   * @param list
    *          DOCUMENT ME!
    */
-  public void highlightSearchResults(java.util.Vector found)
+  public void highlightSearchResults(List<SequenceI> list)
   {
-    idCanvas.setHighlighted(found);
+    idCanvas.setHighlighted(list);
 
-    if (found == null)
+    if (list == null)
     {
       return;
     }
 
-    int index = av.getAlignment().findIndex((SequenceI) found.get(0));
+    int index = av.getAlignment().findIndex((SequenceI) list.get(0));
 
     // do we need to scroll the panel?
     if ((av.getStartSeq() > index) || (av.getEndSeq() < index))
index 6d55c32..52f66e8 100644 (file)
@@ -927,13 +927,11 @@ public class Jalview2XML
     if (jal.getGroups() != null)
     {
       JGroup[] groups = new JGroup[jal.getGroups().size()];
-
-      for (int i = 0; i < groups.length; i++)
+      int i = -1;
+      for (jalview.datamodel.SequenceGroup sg:jal.getGroups())
       {
-        groups[i] = new JGroup();
+        groups[++i] = new JGroup();
 
-        jalview.datamodel.SequenceGroup sg = (jalview.datamodel.SequenceGroup) jal
-                .getGroups().elementAt(i);
         groups[i].setStart(sg.getStartRes());
         groups[i].setEnd(sg.getEndRes());
         groups[i].setName(sg.getName());
index 24dd031..c1bbc8d 100644 (file)
@@ -1289,8 +1289,7 @@ public class PopupMenu extends JPopupMenu
   {
     SequenceGroup sg = getGroup();
     sg.cs = new ClustalxColourScheme(
-            sg.getSequences(ap.av.getHiddenRepSequences()),
-            ap.av.getAlignment().getWidth());
+            sg,ap.av.getHiddenRepSequences());
     refresh();
   }
 
index f982ccc..57aeebe 100755 (executable)
@@ -759,7 +759,7 @@ public class SeqCanvas extends JComponent
 
     if ((group == null) && (av.getAlignment().getGroups().size() > 0))
     {
-      group = (SequenceGroup) av.getAlignment().getGroups().elementAt(0);
+      group = (SequenceGroup) av.getAlignment().getGroups().get(0);
       groupIndex = 0;
     }
 
@@ -920,7 +920,7 @@ public class SeqCanvas extends JComponent
           break;
         }
 
-        group = (SequenceGroup) av.getAlignment().getGroups().elementAt(
+        group = (SequenceGroup) av.getAlignment().getGroups().get(
                 groupIndex);
 
       } while (groupIndex < av.getAlignment().getGroups().size());
index 3cf869c..13527d0 100644 (file)
@@ -18,6 +18,7 @@
 package jalview.gui;
 
 import java.util.*;
+import java.util.List;
 
 import java.awt.*;
 import java.awt.event.*;
@@ -1163,12 +1164,12 @@ public class SeqPanel extends JPanel implements MouseListener,
 
     if (groupEditing)
     {
-      Vector vseqs = sg.getSequences(av.getHiddenRepSequences());
+      List<SequenceI> vseqs = sg.getSequences(av.getHiddenRepSequences());
       int g, groupSize = vseqs.size();
       SequenceI[] groupSeqs = new SequenceI[groupSize];
       for (g = 0; g < groupSeqs.length; g++)
       {
-        groupSeqs[g] = (SequenceI) vseqs.elementAt(g);
+        groupSeqs[g] = (SequenceI) vseqs.get(g);
       }
 
       // drag to right
@@ -1673,9 +1674,8 @@ public class SeqPanel extends JPanel implements MouseListener,
     {
       if (stretchGroup.cs instanceof ClustalxColourScheme)
       {
-        ((ClustalxColourScheme) stretchGroup.cs).resetClustalX(
-                stretchGroup.getSequences(av.getHiddenRepSequences()),
-                stretchGroup.getWidth());
+        ((ClustalxColourScheme) stretchGroup.cs).alignmentChanged(
+                stretchGroup,av.getHiddenRepSequences());
       }
 
       if (stretchGroup.cs.conservationApplied())
index 601bf6d..40b2cac 100755 (executable)
@@ -266,7 +266,7 @@ public class SliderPanel extends GSliderPanel
     }
 
     ColourSchemeI toChange = null;
-    Vector allGroups = null;
+    List<SequenceGroup> allGroups = null;
     int groupIndex = 0;
 
     if (allGroupsCheck.isSelected())
index 3ada67e..1627ab7 100644 (file)
@@ -193,11 +193,10 @@ public class TextColourChooser
       return;
     }
 
-    Vector groups = ap.av.getAlignment().getGroups();
+    
 
-    for (int i = 0; i < groups.size(); i++)
+    for (SequenceGroup sg:ap.av.getAlignment().getGroups())
     {
-      SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
       sg.textColour = ap.av.textColour;
       sg.textColour2 = ap.av.textColour2;
       sg.thresholdTextColour = ap.av.thresholdTextColour;
index b23fbc2..9f65511 100755 (executable)
@@ -889,6 +889,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
       }
 
       ColourSchemeI cs = null;
+      SequenceGroup sg = new SequenceGroup(sequences, null, cs, true, true,
+              false, 0, av.getAlignment().getWidth() - 1);
 
       if (av.getGlobalColourScheme() != null)
       {
@@ -901,8 +903,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
         }
         else
         {
-          cs = ColourSchemeProperty.getColour(sequences, av.getAlignment()
-                  .getWidth(), ColourSchemeProperty.getColourName(av
+          cs = ColourSchemeProperty.getColour(sg, ColourSchemeProperty.getColourName(av
                   .getGlobalColourScheme()));
         }
         // cs is null if shading is an annotationColourGradient
@@ -912,10 +913,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
                   av.getIgnoreGapsConsensus());
         }
       }
-
-      SequenceGroup sg = new SequenceGroup(sequences, null, cs, true, true,
-              false, 0, av.getAlignment().getWidth() - 1);
-
+      sg.cs=cs;
+//      sg.recalcConservation();
       sg.setName("JTreeGroup:" + sg.hashCode());
       sg.setIdColour(col);
       for (int a = 0; a < aps.length; a++)
index 011f24e..764b256 100644 (file)
@@ -1021,10 +1021,8 @@ public class VamsasApplication implements SelectionSource,VamsasSource
               {
                 String[] vobj = new String[seqsel.getSize()];
                 int o = 0;
-                Enumeration sels = seqsel.getSequences(null).elements();
-                while (sels.hasMoreElements())
+                for (SequenceI sel:seqsel.getSequences(null))
                 {
-                  SequenceI sel = (SequenceI) sels.nextElement();
                   VorbaId v = (VorbaId) jv2vobj.get(sel);
                   if (v != null)
                   {
index 5266d08..b3b2111 100755 (executable)
@@ -68,14 +68,14 @@ public class AnnotationFile
    * columns or hidden row keywords.\r
    * \r
    * @param annotations\r
-   * @param groups\r
+   * @param list\r
    * @param properties\r
    * @return feature file as a string.\r
    */\r
   public String printAnnotations(AlignmentAnnotation[] annotations,\r
-          Vector groups, Hashtable properties)\r
+          List<SequenceGroup> list, Hashtable properties)\r
   {\r
-    return printAnnotations(annotations, groups, properties, null);\r
+    return printAnnotations(annotations, list, properties, null);\r
 \r
   }\r
 \r
@@ -110,13 +110,13 @@ public class AnnotationFile
    * properties and views.\r
    * \r
    * @param annotations\r
-   * @param groups\r
+   * @param list\r
    * @param properties\r
    * @param views\r
    * @return annotation file\r
    */\r
   public String printAnnotations(AlignmentAnnotation[] annotations,\r
-          Vector groups, Hashtable properties, ViewDef[] views)\r
+          List<SequenceGroup> list, Hashtable properties, ViewDef[] views)\r
   {\r
     // TODO: resolve views issue : annotationFile could contain visible region,\r
     // or full data + hidden region specifications for a view.\r
@@ -393,9 +393,9 @@ public class AnnotationFile
       text.append(rowprops.toString());\r
     }\r
 \r
-    if (groups != null)\r
+    if (list != null)\r
     {\r
-      printGroups(groups);\r
+      printGroups(list);\r
     }\r
 \r
     if (properties != null)\r
@@ -419,13 +419,11 @@ public class AnnotationFile
     return text.toString();\r
   }\r
 \r
-  public void printGroups(Vector sequenceGroups)\r
+  public void printGroups(List<SequenceGroup> list)\r
   {\r
-    SequenceGroup sg;\r
     SequenceI seqrep = null;\r
-    for (int i = 0; i < sequenceGroups.size(); i++)\r
+    for (SequenceGroup sg:list)\r
     {\r
-      sg = (SequenceGroup) sequenceGroups.elementAt(i);\r
       if (!sg.hasSeqrep())\r
       {\r
         text.append("SEQUENCE_GROUP\t" + sg.getName() + "\t"\r
@@ -889,17 +887,14 @@ public class AnnotationFile
       }\r
       // Finally, resolve the groupRefs\r
       Enumeration en = groupRefRows.keys();\r
-      SequenceGroup theGroup = null;\r
-\r
+      \r
       while (en.hasMoreElements())\r
       {\r
         groupRef = (String) en.nextElement();\r
         boolean matched = false;\r
         // Resolve group: TODO: add a getGroupByName method to alignments\r
-        Vector grps = al.getGroups();\r
-        for (int g = 0, gSize = grps.size(); g < gSize; g++)\r
+        for (SequenceGroup theGroup : al.getGroups())\r
         {\r
-          theGroup = (SequenceGroup) grps.elementAt(g);\r
           if (theGroup.getName().equals(groupRef))\r
           {\r
             if (matched)\r
@@ -1293,15 +1288,12 @@ public class AnnotationFile
     {\r
       return;\r
     }\r
-    SequenceGroup sg = null;\r
-\r
+    \r
     String name = st.nextToken();\r
-\r
-    Vector groups = al.getGroups();\r
-    for (int i = 0; i < groups.size(); i++)\r
+    SequenceGroup sg=null;\r
+    for (SequenceGroup _sg:al.getGroups())\r
     {\r
-      sg = (SequenceGroup) groups.elementAt(i);\r
-      if (sg.getName().equals(name))\r
+      if ((sg=_sg).getName().equals(name))\r
       {\r
         break;\r
       }\r
index 273efb8..d363764 100755 (executable)
  */
 package jalview.schemes;
 
+import jalview.datamodel.AnnotatedCollectionI;
+import jalview.datamodel.SequenceCollectionI;
 import jalview.datamodel.SequenceI;
 
 import java.awt.Color;
 import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
 import java.util.Vector;
 
 public class ClustalxColourScheme extends ResidueColourScheme // implements
@@ -55,13 +59,13 @@ public class ClustalxColourScheme extends ResidueColourScheme // implements
     colhash.put("YELLOW", new Color((float) 0.8, (float) 0.8, (float) 0.0));
   }
 
-  public ClustalxColourScheme(Vector seqs, int maxWidth)
+  public ClustalxColourScheme(AnnotatedCollectionI alignment, Map<SequenceI, SequenceCollectionI> hiddenReps)
   {
-    resetClustalX(seqs, maxWidth);
+    alignmentChanged(alignment,hiddenReps);
   }
-
-  public void resetClustalX(Vector seqs, int maxWidth)
-  {
+  public void alignmentChanged(AnnotatedCollectionI alignment, Map<SequenceI, SequenceCollectionI> hiddenReps) {
+    int maxWidth=alignment.getWidth();
+    List<SequenceI> seqs=alignment.getSequences(hiddenReps);
     cons2 = new int[maxWidth][24];
     includeGaps = isIncludeGaps(); // does nothing - TODO replace with call to
     // get the current setting of the
@@ -82,9 +86,9 @@ public class ClustalxColourScheme extends ResidueColourScheme // implements
     int j = 0;
     char[] seq;
 
-    while (j < seqs.size())
+    for (SequenceI sq: seqs)
     {
-      seq = ((SequenceI) seqs.elementAt(j)).getSequence();
+      seq = sq.getSequence();
 
       int end_j = seq.length - 1;
 
index 9ebe791..c56b1bb 100755 (executable)
 package jalview.schemes;
 
 import java.awt.Color;
+import java.util.Map;
 
+import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AnnotatedCollectionI;
+import jalview.datamodel.SequenceCollectionI;
+import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 
 public interface ColourSchemeI
@@ -42,6 +46,6 @@ public interface ColourSchemeI
 
   public void setThreshold(int ct, boolean ignoreGaps);
 
-  public void alignmentChanged(AnnotatedCollectionI alignment);
+  public void alignmentChanged(AnnotatedCollectionI alignment, Map<SequenceI, SequenceCollectionI> hiddenReps);
 
 }
index cbd345c..4c7b49d 100755 (executable)
@@ -17,6 +17,8 @@
  */
 package jalview.schemes;
 
+import jalview.datamodel.AnnotatedCollectionI;
+
 import java.awt.Color;
 
 /**
@@ -342,26 +344,9 @@ public class ColourSchemeProperty
 
     return ret;
   }
-
-  /**
-   * DOCUMENT ME!
-   * 
-   * @param al
-   *          DOCUMENT ME!
-   * @param name
-   *          DOCUMENT ME!
-   * 
-   * @return DOCUMENT ME!
-   */
-  public static ColourSchemeI getColour(jalview.datamodel.AlignmentI al,
-          String name)
-  {
-    return getColour(al.getSequences(), al.getWidth(), name);
-  }
-
   /**
    * retrieve or create colourscheme associated with name
-   * 
+   *
    * @param seqs
    *          sequences to colour
    * @param width
@@ -371,7 +356,7 @@ public class ColourSchemeProperty
    *          string to parse as colour for new coloursheme
    * @return Valid Colourscheme
    */
-  public static ColourSchemeI getColour(java.util.Vector seqs, int width,
+  public static ColourSchemeI getColour(AnnotatedCollectionI alignment,
           String name)
   {
     int colindex = getColourIndexFromName(name);
@@ -404,7 +389,7 @@ public class ColourSchemeProperty
         }
       }
     }
-    return getColour(seqs, width, getColourIndexFromName(name));
+    return getColour(alignment, getColourIndexFromName(name));
   }
 
   /**
@@ -419,8 +404,7 @@ public class ColourSchemeProperty
    * 
    * @return null or an instance of the colourscheme configured to colour given sequence set
    */
-  public static ColourSchemeI getColour(java.util.Vector seqs, int width,
-          int index)
+  public static ColourSchemeI getColour(jalview.datamodel.AnnotatedCollectionI coll, int index)
   {
     // TODO 3.0 2.8 refactor signature to take an alignmentI like container so colourschemes based on annotation can be initialised
     ColourSchemeI cs = null;
@@ -428,7 +412,7 @@ public class ColourSchemeProperty
     switch (index)
     {
     case CLUSTAL:
-      cs = new ClustalxColourScheme(seqs, width);
+      cs = new ClustalxColourScheme(coll, null);
 
       break;
 
index e58099d..39062e7 100644 (file)
@@ -53,11 +53,8 @@ public class RNAHelicesColourChooser
     if (av.getAlignment().getGroups() != null)
     {
       oldgroupColours = new Hashtable();
-      Vector allGroups = ap.getAlignment().getGroups();
-      SequenceGroup sg;
-      for (int g = 0; g < allGroups.size(); g++)
+      for (SequenceGroup sg:ap.getAlignment().getGroups())
       {
-        sg = (SequenceGroup) allGroups.get(g);
         if (sg.cs != null)
         {
           oldgroupColours.put(sg, sg.cs);
@@ -109,12 +106,8 @@ public class RNAHelicesColourChooser
 
     if (av.getAlignment().getGroups() != null)
     {
-      Vector allGroups = ap.getAlignment().getGroups();
-      SequenceGroup sg;
-      for (int g = 0; g < allGroups.size(); g++)
+      for (SequenceGroup sg:ap.getAlignment().getGroups())
       {
-        sg = (SequenceGroup) allGroups.get(g);
-
         if (sg.cs == null)
         {
           continue;
@@ -133,11 +126,8 @@ public class RNAHelicesColourChooser
     av.setGlobalColourScheme(oldcs);
     if (av.getAlignment().getGroups() != null)
     {
-      Vector allGroups = ap.getAlignment().getGroups();
-      SequenceGroup sg;
-      for (int g = 0; g < allGroups.size(); g++)
+      for (SequenceGroup sg:ap.getAlignment().getGroups())
       {
-        sg = (SequenceGroup) allGroups.get(g);
         sg.cs = (ColourSchemeI) oldgroupColours.get(sg);
       }
     }
index 90833c9..bbba865 100755 (executable)
@@ -20,10 +20,12 @@ package jalview.schemes;
 import jalview.analysis.AAFrequency;
 import jalview.analysis.Conservation;
 import jalview.datamodel.AnnotatedCollectionI;
+import jalview.datamodel.SequenceCollectionI;
 import jalview.datamodel.SequenceI;
 
 import java.awt.Color;
 import java.util.Hashtable;
+import java.util.Map;
 
 /**
  * DOCUMENT ME!
@@ -105,8 +107,6 @@ public class ResidueColourScheme implements ColourSchemeI
 
     return currentColour;
   }
-  @Override public void alignmentChanged(AnnotatedCollectionI alignment) {};
-
   /**
    * Get the percentage threshold for this colour scheme
    * 
@@ -282,4 +282,10 @@ public class ResidueColourScheme implements ColourSchemeI
     return currentColour;
   }
 
+  @Override
+  public void alignmentChanged(AnnotatedCollectionI alignment,
+          Map<SequenceI, SequenceCollectionI> hiddenReps)
+  {
+  }
+
 }
index 1063f8b..5a49640 100644 (file)
@@ -5,12 +5,14 @@ import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceCollectionI;
 import jalview.datamodel.SequenceI;
 import jalview.io.TCoffeeScoreFile;
 
 import java.awt.Color;
 import java.util.ArrayList;
 import java.util.IdentityHashMap;
+import java.util.Map;
 import java.util.TreeMap;
 
 /**
@@ -45,10 +47,13 @@ public class TCoffeeColourScheme extends ResidueColourScheme {
         * @param alignment - annotated sequences to be searched
         */
        public TCoffeeColourScheme(AnnotatedCollectionI alignment) {
-         alignmentChanged(alignment);
+         alignmentChanged(alignment, null);
        }
-       @Override public void alignmentChanged(AnnotatedCollectionI alignment)
+       @Override 
+       public void alignmentChanged(AnnotatedCollectionI alignment, Map<SequenceI, SequenceCollectionI> hiddenReps)
        {
+         // TODO: if sequences have been represented and they have scores, could compute an average sequence score for the representative
+         
           // assume only one set of TCOFFEE scores - but could have more than one potentially.
           ArrayList<AlignmentAnnotation> annots = new ArrayList<AlignmentAnnotation>();
           // Search alignment to get all tcoffee annotation and pick one set of annotation to use to colour seqs.
index fcb03d8..36da772 100644 (file)
@@ -17,6 +17,7 @@
  */
 package jalview.viewmodel;
 
+import jalview.analysis.AAFrequency;
 import jalview.analysis.Conservation;
 import jalview.api.AlignCalcManagerI;
 import jalview.api.AlignViewportI;
@@ -27,17 +28,21 @@ import jalview.datamodel.AlignmentView;
 import jalview.datamodel.Annotation;
 import jalview.datamodel.ColumnSelection;
 import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceCollectionI;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.schemes.Blosum62ColourScheme;
 import jalview.schemes.ClustalxColourScheme;
 import jalview.schemes.ColourSchemeI;
+import jalview.schemes.PIDColourScheme;
 import jalview.schemes.ResidueProperties;
 import jalview.workers.AlignCalcManager;
 import jalview.workers.ConsensusThread;
-import jalview.workers.ConservationThread;
 import jalview.workers.StrucConsensusThread;
 
 import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
 import java.util.Vector;
 
 /**
@@ -62,7 +67,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    */
   protected boolean isDataset = false;
 
-  private Hashtable hiddenRepSequences;
+  private Map<SequenceI, SequenceCollectionI> hiddenRepSequences;
 
   protected ColumnSelection colSel = new ColumnSelection();
 
@@ -74,10 +79,192 @@ public abstract class AlignmentViewport implements AlignViewportI
 
   protected ColourSchemeI globalColourScheme = null;
 
+  /**
+   * gui state - changes to colour scheme propagated to all groups
+   */
+  private boolean colourAppliesToAllGroups;
+
+  /**
+   * @param value
+   *          indicating if subsequent colourscheme changes will be propagated
+   *          to all groups
+   */
+  public void setColourAppliesToAllGroups(boolean b)
+  {
+    colourAppliesToAllGroups = b;
+  }
+
+  /**
+   *
+   *
+   * @return flag indicating if colourchanges propagated to all groups
+   */
+  public boolean getColourAppliesToAllGroups()
+  {
+    return colourAppliesToAllGroups;
+  }
+
+  boolean abovePIDThreshold = false;
+
+  /**
+   * GUI state
+   *
+   * @return true if percent identity threshold is applied to shading
+   */
+  public boolean getAbovePIDThreshold()
+  {
+    return abovePIDThreshold;
+  }
+
+  /**
+   * GUI state
+   *
+   *
+   * @param b
+   *          indicate if percent identity threshold is applied to shading
+   */
+  public void setAbovePIDThreshold(boolean b)
+  {
+    abovePIDThreshold = b;
+  }
+
+  int threshold;
+
+  /**
+   * DOCUMENT ME!
+   *
+   * @param thresh
+   *          DOCUMENT ME!
+   */
+  public void setThreshold(int thresh)
+  {
+    threshold = thresh;
+  }
+
+  /**
+   * DOCUMENT ME!
+   *
+   * @return DOCUMENT ME!
+   */
+  public int getThreshold()
+  {
+    return threshold;
+  }
+
+  int increment;
+
+  /**
+   *
+   * @param inc
+   *          set the scalar for bleaching colourschemes according to degree of
+   *          conservation
+   */
+  public void setIncrement(int inc)
+  {
+    increment = inc;
+  }
+
+  /**
+   * GUI State
+   *
+   * @return get scalar for bleaching colourschemes by conservation
+   */
+  public int getIncrement()
+  {
+    return increment;
+  }
+
+  boolean conservationColourSelected = false;
+
+  /**
+   * GUI state
+   *
+   * @return true if conservation based shading is enabled
+   */
+  public boolean getConservationSelected()
+  {
+    return conservationColourSelected;
+  }
 
+  /**
+   * GUI state
+   *
+   * @param b
+   *          enable conservation based shading
+   */
+  public void setConservationSelected(boolean b)
+  {
+    conservationColourSelected = b;
+  }
+
+  @Override
   public void setGlobalColourScheme(ColourSchemeI cs)
   {
+    // TODO: logic refactored from AlignFrame changeColour -
+    // autorecalc stuff should be changed to rely on the worker system
+    // check to see if we should implement a changeColour(cs) method rather than
+    // put th logic in here
+    // - means that caller decides if they want to just modify state and defer
+    // calculation till later or to do all calculations in thread.
+    // via changecolour
     globalColourScheme = cs;
+    if (getColourAppliesToAllGroups())
+    {
+      for (SequenceGroup sg : getAlignment().getGroups())
+      {
+        if (cs == null)
+        {
+          sg.cs = null;
+          continue;
+        }
+        if (cs instanceof ClustalxColourScheme)
+        {
+          sg.cs = new ClustalxColourScheme(sg, getHiddenRepSequences());
+        }
+        else
+        {
+          try
+          {
+            sg.cs = cs.getClass().newInstance();
+          } catch (Exception ex)
+          {
+            ex.printStackTrace();
+            sg.cs = cs;
+          }
+        }
+
+        if (getAbovePIDThreshold() || cs instanceof PIDColourScheme
+                || cs instanceof Blosum62ColourScheme)
+        {
+          sg.cs.setThreshold(threshold, getIgnoreGapsConsensus());
+          sg.cs.setConsensus(AAFrequency.calculate(
+                  sg.getSequences(getHiddenRepSequences()), 0,
+                  sg.getWidth()));
+        }
+        else
+        {
+          sg.cs.setThreshold(0, getIgnoreGapsConsensus());
+        }
+
+        if (getConservationSelected())
+        {
+          Conservation c = new Conservation("Group",
+                  ResidueProperties.propHash, 3,
+                  sg.getSequences(getHiddenRepSequences()), 0,
+                  getAlignment().getWidth() - 1);
+          c.calculate();
+          c.verdict(false, getConsPercGaps());
+          sg.cs.setConservation(c);
+        }
+        else
+        {
+          sg.cs.setConservation(null);
+          sg.cs.setThreshold(0, getIgnoreGapsConsensus());
+        }
+
+      }
+    }
+
   }
 
   @Override
@@ -442,14 +629,24 @@ public abstract class AlignmentViewport implements AlignViewportI
   {
     this.colSel = colSel;
   }
-  public Hashtable getHiddenRepSequences()
+
+  /**
+   *
+   * @return
+   */
+  @Override
+  public Map<SequenceI, SequenceCollectionI> getHiddenRepSequences()
   {
     return hiddenRepSequences;
   }
-  public void setHiddenRepSequences(Hashtable hiddenRepSequences)
+
+  @Override
+  public void setHiddenRepSequences(
+          Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
   {
     this.hiddenRepSequences = hiddenRepSequences;
   }
+
   protected boolean hasHiddenColumns = false;
 
   public void updateHiddenColumns()
@@ -1060,12 +1257,11 @@ public abstract class AlignmentViewport implements AlignViewportI
 
     // Reset endRes of groups if beyond alignment width
     int alWidth = alignment.getWidth();
-    Vector groups = alignment.getGroups();
+    List<SequenceGroup> groups = alignment.getGroups();
     if (groups != null)
     {
-      for (int i = 0; i < groups.size(); i++)
+      for (SequenceGroup sg : groups)
       {
-        SequenceGroup sg = (SequenceGroup) groups.elementAt(i);
         if (sg.getEndRes() > alWidth)
         {
           sg.setEndRes(alWidth - 1);
@@ -1083,7 +1279,6 @@ public abstract class AlignmentViewport implements AlignViewportI
     // alignment.adjustSequenceAnnotations();
   }
 
-  
   /**
    * reset scope and do calculations for all applied colourschemes on alignment
    */
@@ -1092,13 +1287,7 @@ public abstract class AlignmentViewport implements AlignViewportI
     ColourSchemeI cs = globalColourScheme;
     if (cs != null)
     {
-      cs.alignmentChanged(alignment);
-      // TODO: fold all recalc events for clustalX into alignmentChanged
-      if (cs instanceof ClustalxColourScheme)
-      {
-        ((ClustalxColourScheme) cs).resetClustalX(alignment.getSequences(),
-                alignment.getWidth());
-      }
+      cs.alignmentChanged(alignment, null);
 
       cs.setConsensus(hconsensus);
       if (cs.conservationApplied())
@@ -1109,16 +1298,13 @@ public abstract class AlignmentViewport implements AlignViewportI
       }
     }
 
-    int s, sSize = alignment.getGroups().size();
-    for (s = 0; s < sSize; s++)
+    for (SequenceGroup sg : alignment.getGroups())
     {
-      SequenceGroup sg = (SequenceGroup) alignment.getGroups().elementAt(s);
-      if (sg.cs != null && sg.cs instanceof ClustalxColourScheme)
+      if (sg.cs != null)
       {
-        ((ClustalxColourScheme) sg.cs).resetClustalX(sg
-                .getSequences(hiddenRepSequences), sg.getWidth());
+        sg.cs.alignmentChanged(sg, hiddenRepSequences);
+        sg.recalcConservation();
       }
-      sg.recalcConservation();
     }
   }
 
index ffbce62..5f8eb03 100644 (file)
@@ -860,10 +860,8 @@ public class RestJobThread extends AWSThread
                 // TODO: cope with recovering hidden sequences from
                 // resultContext
                 {
-                  Vector sqs = sg.getSequences(null);
-                  for (int sqsi = 0, iSize = sqs.size(); sqsi < iSize; sqsi++)
+                  for (SequenceI oseq:sg.getSequences(null))
                   {
-                    SequenceI oseq = (SequenceI) sqs.get(sqsi);
                     SequenceI nseq = getNewSeq(oseq, rseqs[nrj],
                             ordermap[nrj], destAl);
                     if (nseq != null)