From b81d4d7d46ea8b1c89df086fb847baab6b69d427 Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 30 May 2012 19:21:25 +0100 Subject: [PATCH] JAL-1114 - refactor methods handling Vectors and Hashtables to Lists and Maps, and use SequenceCollectionI and AnnotationCollectionI where possible to simplify code. --- src/jalview/analysis/AAFrequency.java | 11 +- src/jalview/analysis/AlignmentSorter.java | 4 +- src/jalview/analysis/Grouping.java | 18 +- src/jalview/api/AlignViewportI.java | 9 + src/jalview/appletgui/APopupMenu.java | 3 +- src/jalview/appletgui/AlignFrame.java | 29 +-- src/jalview/appletgui/AlignViewport.java | 10 +- src/jalview/appletgui/AlignmentPanel.java | 8 +- src/jalview/appletgui/AnnotationColourChooser.java | 17 +- src/jalview/appletgui/IdCanvas.java | 7 +- src/jalview/appletgui/IdPanel.java | 9 +- src/jalview/appletgui/SeqCanvas.java | 4 +- src/jalview/appletgui/SeqPanel.java | 25 +-- src/jalview/appletgui/SliderPanel.java | 14 +- src/jalview/appletgui/TreeCanvas.java | 12 +- src/jalview/datamodel/Alignment.java | 14 +- src/jalview/datamodel/AlignmentI.java | 4 +- src/jalview/datamodel/AlignmentView.java | 17 +- src/jalview/datamodel/AnnotatedCollectionI.java | 2 +- src/jalview/datamodel/HiddenSequences.java | 12 +- src/jalview/datamodel/SequenceCollectionI.java | 12 + src/jalview/datamodel/SequenceGroup.java | 59 +++-- src/jalview/gui/AlignFrame.java | 40 ++-- src/jalview/gui/AlignViewport.java | 9 +- src/jalview/gui/AlignmentPanel.java | 7 +- src/jalview/gui/AnnotationColourChooser.java | 18 +- src/jalview/gui/AnnotationExporter.java | 7 +- src/jalview/gui/IdCanvas.java | 10 +- src/jalview/gui/IdPanel.java | 11 +- src/jalview/gui/Jalview2XML.java | 8 +- src/jalview/gui/PopupMenu.java | 3 +- src/jalview/gui/SeqCanvas.java | 4 +- src/jalview/gui/SeqPanel.java | 10 +- src/jalview/gui/SliderPanel.java | 2 +- src/jalview/gui/TextColourChooser.java | 5 +- src/jalview/gui/TreeCanvas.java | 11 +- src/jalview/gui/VamsasApplication.java | 4 +- src/jalview/io/AnnotationFile.java | 38 ++-- src/jalview/schemes/ClustalxColourScheme.java | 18 +- src/jalview/schemes/ColourSchemeI.java | 6 +- src/jalview/schemes/ColourSchemeProperty.java | 30 +-- src/jalview/schemes/RNAHelicesColourChooser.java | 16 +- src/jalview/schemes/ResidueColourScheme.java | 10 +- src/jalview/schemes/TCoffeeColourScheme.java | 9 +- src/jalview/viewmodel/AlignmentViewport.java | 230 ++++++++++++++++++-- src/jalview/ws/rest/RestJobThread.java | 4 +- 46 files changed, 471 insertions(+), 339 deletions(-) create mode 100644 src/jalview/datamodel/SequenceCollectionI.java diff --git a/src/jalview/analysis/AAFrequency.java b/src/jalview/analysis/AAFrequency.java index d56fb01..58531de 100755 --- a/src/jalview/analysis/AAFrequency.java +++ b/src/jalview/analysis/AAFrequency.java @@ -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 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 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) diff --git a/src/jalview/analysis/AlignmentSorter.java b/src/jalview/analysis/AlignmentSorter.java index 25717d0..b84eeaf 100755 --- a/src/jalview/analysis/AlignmentSorter.java +++ b/src/jalview/analysis/AlignmentSorter.java @@ -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); diff --git a/src/jalview/analysis/Grouping.java b/src/jalview/analysis/Grouping.java index 95323e6..91fef84 100644 --- a/src/jalview/analysis/Grouping.java +++ b/src/jalview/analysis/Grouping.java @@ -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 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++) diff --git a/src/jalview/api/AlignViewportI.java b/src/jalview/api/AlignViewportI.java index 6688e27..ab9efb1 100644 --- a/src/jalview/api/AlignViewportI.java +++ b/src/jalview/api/AlignViewportI.java @@ -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 getHiddenRepSequences(); + + void setHiddenRepSequences( + Map hiddenRepSequences); + } diff --git a/src/jalview/appletgui/APopupMenu.java b/src/jalview/appletgui/APopupMenu.java index b45fa6b..acdae46 100755 --- a/src/jalview/appletgui/APopupMenu.java +++ b/src/jalview/appletgui/APopupMenu.java @@ -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(); } diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 834b904..6ce68c3 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -87,6 +87,7 @@ import java.net.URL; import java.net.URLEncoder; import java.util.Enumeration; import java.util.Hashtable; +import java.util.List; import java.util.StringTokenizer; import java.util.Vector; @@ -956,9 +957,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis else if (source == clustalColour) { abovePIDThreshold.setState(false); - changeColour(new ClustalxColourScheme( - viewport.getAlignment().getSequences(), - viewport.getAlignment().getWidth())); + changeColour(new ClustalxColourScheme(viewport.getAlignment(),null)); } else if (source == zappoColour) { @@ -1504,10 +1503,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis synchronized void slideSequences(boolean right, int size) { - Vector sg = new Vector(); + Listsg = new Vector(); if (viewport.cursorMode) { - sg.addElement(viewport.getAlignment() + sg.add(viewport.getAlignment() .getSequenceAt(alignPanel.seqPanel.seqCanvas.cursorY)); } else if (viewport.getSelectionGroup() != null @@ -1523,7 +1522,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis return; } - Vector invertGroup = new Vector(); + Vector invertGroup = new Vector(); for (int i = 0; i < viewport.getAlignment().getHeight(); i++) { @@ -1531,11 +1530,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis invertGroup.addElement(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[sg.size()]); - SequenceI[] seqs2 = new SequenceI[invertGroup.size()]; + SequenceI[] seqs2 = invertGroup.toArray(new SequenceI[invertGroup.size()]); for (int i = 0; i < invertGroup.size(); i++) seqs2[i] = (SequenceI) invertGroup.elementAt(i); @@ -1898,9 +1895,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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 sq : gps[g].getSequences(null)) + viewport.setSequenceColour( + sq, col) ; } PaintRefresher.Refresh(this, viewport.getSequenceSetId()); @@ -2017,12 +2014,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis addHistoryItem(trimRegion); - 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 ((trimLeft && !sg.adjustForRemoveLeft(column)) || (!trimLeft && !sg.adjustForRemoveRight(column))) { diff --git a/src/jalview/appletgui/AlignViewport.java b/src/jalview/appletgui/AlignViewport.java index e094d7d..9258e3a 100644 --- a/src/jalview/appletgui/AlignViewport.java +++ b/src/jalview/appletgui/AlignViewport.java @@ -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); } } } diff --git a/src/jalview/appletgui/AlignmentPanel.java b/src/jalview/appletgui/AlignmentPanel.java index 99084ba..e9d418e 100644 --- a/src/jalview/appletgui/AlignmentPanel.java +++ b/src/jalview/appletgui/AlignmentPanel.java @@ -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 diff --git a/src/jalview/appletgui/AnnotationColourChooser.java b/src/jalview/appletgui/AnnotationColourChooser.java index a3f9fa6..1a661be 100755 --- a/src/jalview/appletgui/AnnotationColourChooser.java +++ b/src/jalview/appletgui/AnnotationColourChooser.java @@ -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) { diff --git a/src/jalview/appletgui/IdCanvas.java b/src/jalview/appletgui/IdCanvas.java index 67bba32..a3eac2d 100755 --- a/src/jalview/appletgui/IdCanvas.java +++ b/src/jalview/appletgui/IdCanvas.java @@ -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 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 list) { - searchResults = found; + searchResults = list; repaint(); } diff --git a/src/jalview/appletgui/IdPanel.java b/src/jalview/appletgui/IdPanel.java index a6bff67..0042856 100755 --- a/src/jalview/appletgui/IdPanel.java +++ b/src/jalview/appletgui/IdPanel.java @@ -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 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) diff --git a/src/jalview/appletgui/SeqCanvas.java b/src/jalview/appletgui/SeqCanvas.java index 2296ab1..c7a8232 100755 --- a/src/jalview/appletgui/SeqCanvas.java +++ b/src/jalview/appletgui/SeqCanvas.java @@ -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()); diff --git a/src/jalview/appletgui/SeqPanel.java b/src/jalview/appletgui/SeqPanel.java index f121d11..b9c5cf0 100644 --- a/src/jalview/appletgui/SeqPanel.java +++ b/src/jalview/appletgui/SeqPanel.java @@ -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 diff --git a/src/jalview/appletgui/SliderPanel.java b/src/jalview/appletgui/SliderPanel.java index f7522be..2046df6 100755 --- a/src/jalview/appletgui/SliderPanel.java +++ b/src/jalview/appletgui/SliderPanel.java @@ -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 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(); diff --git a/src/jalview/appletgui/TreeCanvas.java b/src/jalview/appletgui/TreeCanvas.java index 9a4c82c..4c56e69 100755 --- a/src/jalview/appletgui/TreeCanvas.java +++ b/src/jalview/appletgui/TreeCanvas.java @@ -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); diff --git a/src/jalview/datamodel/Alignment.java b/src/jalview/datamodel/Alignment.java index c32a40f..23fe057 100755 --- a/src/jalview/datamodel/Alignment.java +++ b/src/jalview/datamodel/Alignment.java @@ -122,6 +122,13 @@ public class Alignment implements AlignmentI { return sequences; } + @Override + public List getSequences( + Map 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 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) diff --git a/src/jalview/datamodel/AlignmentI.java b/src/jalview/datamodel/AlignmentI.java index ec35124..71467f7 100755 --- a/src/jalview/datamodel/AlignmentI.java +++ b/src/jalview/datamodel/AlignmentI.java @@ -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 getGroups(); /** * Deletes all groups from this alignment. diff --git a/src/jalview/datamodel/AlignmentView.java b/src/jalview/datamodel/AlignmentView.java index 8e596ce..a23aad5 100644 --- a/src/jalview/datamodel/AlignmentView.java +++ b/src/jalview/datamodel/AlignmentView.java @@ -21,6 +21,7 @@ import jalview.util.ShiftList; import java.io.PrintStream; import java.util.Enumeration; +import java.util.List; import java.util.Vector; /** @@ -105,7 +106,7 @@ public class AlignmentView SequenceI[] selseqs; if (selection != null) { - Vector sel = selection.getSequences(null); + List sel = selection.getSequences(null); this.selected = new Vector(); selseqs = selection.getSequencesInOrder(alignment, selectedRegionOnly); } @@ -116,12 +117,8 @@ public class AlignmentView // get the alignment's group list and make a copy Vector grps = new Vector(); - Vector gg = alignment.getGroups(); - Enumeration gge = gg.elements(); - while (gge.hasMoreElements()) - { - grps.addElement(gge.nextElement()); - } + List gg = alignment.getGroups(); + grps.addAll(gg); ScGroup[] sgrps = null; boolean addedgps[] = null; if (grps != null) @@ -1047,12 +1044,10 @@ public class AlignmentView + " wide and has " + visal.getHeight() + " seqs."); if (visal.getGroups() != null && visal.getGroups().size() > 0) { - SequenceGroup sg; - Enumeration en = visal.getGroups().elements(); + int i = 1; - while (en.hasMoreElements()) + for (SequenceGroup sg:visal.getGroups()) { - sg = (SequenceGroup) en.nextElement(); os.println("Group " + (i++) + " begins at column " + sg.getStartRes() + " and ends at " + sg.getEndRes()); } diff --git a/src/jalview/datamodel/AnnotatedCollectionI.java b/src/jalview/datamodel/AnnotatedCollectionI.java index 085fb70..ff365a9 100644 --- a/src/jalview/datamodel/AnnotatedCollectionI.java +++ b/src/jalview/datamodel/AnnotatedCollectionI.java @@ -1,6 +1,6 @@ package jalview.datamodel; -public interface AnnotatedCollectionI +public interface AnnotatedCollectionI extends SequenceCollectionI { /** diff --git a/src/jalview/datamodel/HiddenSequences.java b/src/jalview/datamodel/HiddenSequences.java index 9c3b8e0..7914d3d 100755 --- a/src/jalview/datamodel/HiddenSequences.java +++ b/src/jalview/datamodel/HiddenSequences.java @@ -140,14 +140,14 @@ public class HiddenSequences alignment.deleteSequence(sequence); } - public Vector showAll(Hashtable hiddenReps) + public Vector showAll(Map 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 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 index 0000000..db79b4d --- /dev/null +++ b/src/jalview/datamodel/SequenceCollectionI.java @@ -0,0 +1,12 @@ +package jalview.datamodel; + +import java.util.List; +import java.util.Map; + +public interface SequenceCollectionI +{ + List getSequences(); + List getSequences(Map hiddenReps); + int getWidth(); + +} diff --git a/src/jalview/datamodel/SequenceGroup.java b/src/jalview/datamodel/SequenceGroup.java index 9a6d022..ed21f60 100755 --- a/src/jalview/datamodel/SequenceGroup.java +++ b/src/jalview/datamodel/SequenceGroup.java @@ -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 sequences = new Vector(); /** * 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 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 getSequences() + { + return sequences; + } + public List getSequences(Map 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 map) { - Vector tmp = getSequences(hiddenReps); - if (tmp == null) + List 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 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(); + } } diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index fe96419..76001a5 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1559,10 +1559,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, synchronized void slideSequences(boolean right, int size) { - Vector sg = new Vector(); + List 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()); diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index 8f615aa..8bb40a1 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -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); } } } diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 4c8df4b..330620c 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -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 diff --git a/src/jalview/gui/AnnotationColourChooser.java b/src/jalview/gui/AnnotationColourChooser.java index 7fb868f..64b1d19 100755 --- a/src/jalview/gui/AnnotationColourChooser.java +++ b/src/jalview/gui/AnnotationColourChooser.java @@ -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); } } diff --git a/src/jalview/gui/AnnotationExporter.java b/src/jalview/gui/AnnotationExporter.java index ffc5c1c..9c6231a 100755 --- a/src/jalview/gui/AnnotationExporter.java +++ b/src/jalview/gui/AnnotationExporter.java @@ -18,6 +18,7 @@ package jalview.gui; import java.util.*; +import java.util.List; import java.awt.*; import java.awt.event.*; @@ -44,7 +45,7 @@ public class AnnotationExporter extends JPanel AlignmentAnnotation[] annotations; - Vector sequenceGroups; + List sequenceGroups; Hashtable alignmentProperties; @@ -73,7 +74,7 @@ public class AnnotationExporter extends JPanel } public void exportAnnotations(AlignmentPanel ap, - AlignmentAnnotation[] annotations, Vector sequenceGroups, + AlignmentAnnotation[] annotations, List list, Hashtable alProperties) { this.ap = ap; @@ -81,7 +82,7 @@ public class AnnotationExporter extends JPanel GFFFormat.setVisible(false); CSVFormat.setVisible(true); this.annotations = annotations; - this.sequenceGroups = sequenceGroups; + this.sequenceGroups = list; this.alignmentProperties = alProperties; frame.setTitle("Export Annotations"); } diff --git a/src/jalview/gui/IdCanvas.java b/src/jalview/gui/IdCanvas.java index 2a2acfb..235747c 100755 --- a/src/jalview/gui/IdCanvas.java +++ b/src/jalview/gui/IdCanvas.java @@ -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 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 list) { - searchResults = found; + searchResults = list; repaint(); } } diff --git a/src/jalview/gui/IdPanel.java b/src/jalview/gui/IdPanel.java index 9d1cae4..fa97215 100755 --- a/src/jalview/gui/IdPanel.java +++ b/src/jalview/gui/IdPanel.java @@ -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 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)) diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index 6d55c32..52f66e8 100644 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -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()); diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index 24dd031..c1bbc8d 100644 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -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(); } diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index f982ccc..57aeebe 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -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()); diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java index 3cf869c..13527d0 100644 --- a/src/jalview/gui/SeqPanel.java +++ b/src/jalview/gui/SeqPanel.java @@ -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 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()) diff --git a/src/jalview/gui/SliderPanel.java b/src/jalview/gui/SliderPanel.java index 601bf6d..40b2cac 100755 --- a/src/jalview/gui/SliderPanel.java +++ b/src/jalview/gui/SliderPanel.java @@ -266,7 +266,7 @@ public class SliderPanel extends GSliderPanel } ColourSchemeI toChange = null; - Vector allGroups = null; + List allGroups = null; int groupIndex = 0; if (allGroupsCheck.isSelected()) diff --git a/src/jalview/gui/TextColourChooser.java b/src/jalview/gui/TextColourChooser.java index 3ada67e..1627ab7 100644 --- a/src/jalview/gui/TextColourChooser.java +++ b/src/jalview/gui/TextColourChooser.java @@ -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; diff --git a/src/jalview/gui/TreeCanvas.java b/src/jalview/gui/TreeCanvas.java index b23fbc2..9f65511 100755 --- a/src/jalview/gui/TreeCanvas.java +++ b/src/jalview/gui/TreeCanvas.java @@ -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++) diff --git a/src/jalview/gui/VamsasApplication.java b/src/jalview/gui/VamsasApplication.java index 011f24e..764b256 100644 --- a/src/jalview/gui/VamsasApplication.java +++ b/src/jalview/gui/VamsasApplication.java @@ -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) { diff --git a/src/jalview/io/AnnotationFile.java b/src/jalview/io/AnnotationFile.java index 5266d08..b3b2111 100755 --- a/src/jalview/io/AnnotationFile.java +++ b/src/jalview/io/AnnotationFile.java @@ -68,14 +68,14 @@ public class AnnotationFile * columns or hidden row keywords. * * @param annotations - * @param groups + * @param list * @param properties * @return feature file as a string. */ public String printAnnotations(AlignmentAnnotation[] annotations, - Vector groups, Hashtable properties) + List list, Hashtable properties) { - return printAnnotations(annotations, groups, properties, null); + return printAnnotations(annotations, list, properties, null); } @@ -110,13 +110,13 @@ public class AnnotationFile * properties and views. * * @param annotations - * @param groups + * @param list * @param properties * @param views * @return annotation file */ public String printAnnotations(AlignmentAnnotation[] annotations, - Vector groups, Hashtable properties, ViewDef[] views) + List list, Hashtable properties, ViewDef[] views) { // TODO: resolve views issue : annotationFile could contain visible region, // or full data + hidden region specifications for a view. @@ -393,9 +393,9 @@ public class AnnotationFile text.append(rowprops.toString()); } - if (groups != null) + if (list != null) { - printGroups(groups); + printGroups(list); } if (properties != null) @@ -419,13 +419,11 @@ public class AnnotationFile return text.toString(); } - public void printGroups(Vector sequenceGroups) + public void printGroups(List list) { - SequenceGroup sg; SequenceI seqrep = null; - for (int i = 0; i < sequenceGroups.size(); i++) + for (SequenceGroup sg:list) { - sg = (SequenceGroup) sequenceGroups.elementAt(i); if (!sg.hasSeqrep()) { text.append("SEQUENCE_GROUP\t" + sg.getName() + "\t" @@ -889,17 +887,14 @@ public class AnnotationFile } // Finally, resolve the groupRefs Enumeration en = groupRefRows.keys(); - SequenceGroup theGroup = null; - + while (en.hasMoreElements()) { groupRef = (String) en.nextElement(); boolean matched = false; // Resolve group: TODO: add a getGroupByName method to alignments - Vector grps = al.getGroups(); - for (int g = 0, gSize = grps.size(); g < gSize; g++) + for (SequenceGroup theGroup : al.getGroups()) { - theGroup = (SequenceGroup) grps.elementAt(g); if (theGroup.getName().equals(groupRef)) { if (matched) @@ -1293,15 +1288,12 @@ public class AnnotationFile { return; } - SequenceGroup sg = null; - + String name = st.nextToken(); - - Vector groups = al.getGroups(); - for (int i = 0; i < groups.size(); i++) + SequenceGroup sg=null; + for (SequenceGroup _sg:al.getGroups()) { - sg = (SequenceGroup) groups.elementAt(i); - if (sg.getName().equals(name)) + if ((sg=_sg).getName().equals(name)) { break; } diff --git a/src/jalview/schemes/ClustalxColourScheme.java b/src/jalview/schemes/ClustalxColourScheme.java index 273efb8..d363764 100755 --- a/src/jalview/schemes/ClustalxColourScheme.java +++ b/src/jalview/schemes/ClustalxColourScheme.java @@ -17,10 +17,14 @@ */ 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 hiddenReps) { - resetClustalX(seqs, maxWidth); + alignmentChanged(alignment,hiddenReps); } - - public void resetClustalX(Vector seqs, int maxWidth) - { + public void alignmentChanged(AnnotatedCollectionI alignment, Map hiddenReps) { + int maxWidth=alignment.getWidth(); + List 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; diff --git a/src/jalview/schemes/ColourSchemeI.java b/src/jalview/schemes/ColourSchemeI.java index 9ebe791..c56b1bb 100755 --- a/src/jalview/schemes/ColourSchemeI.java +++ b/src/jalview/schemes/ColourSchemeI.java @@ -18,8 +18,12 @@ 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 hiddenReps); } diff --git a/src/jalview/schemes/ColourSchemeProperty.java b/src/jalview/schemes/ColourSchemeProperty.java index cbd345c..4c7b49d 100755 --- a/src/jalview/schemes/ColourSchemeProperty.java +++ b/src/jalview/schemes/ColourSchemeProperty.java @@ -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; diff --git a/src/jalview/schemes/RNAHelicesColourChooser.java b/src/jalview/schemes/RNAHelicesColourChooser.java index e58099d..39062e7 100644 --- a/src/jalview/schemes/RNAHelicesColourChooser.java +++ b/src/jalview/schemes/RNAHelicesColourChooser.java @@ -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); } } diff --git a/src/jalview/schemes/ResidueColourScheme.java b/src/jalview/schemes/ResidueColourScheme.java index 90833c9..bbba865 100755 --- a/src/jalview/schemes/ResidueColourScheme.java +++ b/src/jalview/schemes/ResidueColourScheme.java @@ -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 hiddenReps) + { + } + } diff --git a/src/jalview/schemes/TCoffeeColourScheme.java b/src/jalview/schemes/TCoffeeColourScheme.java index 1063f8b..5a49640 100644 --- a/src/jalview/schemes/TCoffeeColourScheme.java +++ b/src/jalview/schemes/TCoffeeColourScheme.java @@ -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 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 annots = new ArrayList(); // Search alignment to get all tcoffee annotation and pick one set of annotation to use to colour seqs. diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index fcb03d8..36da772 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -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 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 getHiddenRepSequences() { return hiddenRepSequences; } - public void setHiddenRepSequences(Hashtable hiddenRepSequences) + + @Override + public void setHiddenRepSequences( + Map 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 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(); } } diff --git a/src/jalview/ws/rest/RestJobThread.java b/src/jalview/ws/rest/RestJobThread.java index ffbce62..5f8eb03 100644 --- a/src/jalview/ws/rest/RestJobThread.java +++ b/src/jalview/ws/rest/RestJobThread.java @@ -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) -- 1.7.10.2