X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignmentView.java;h=9db9f3820242a3aaf427a67b846f45f93b7c8ed7;hb=37de9310bec3501cbc6381e0c3dcb282fcaad812;hp=e089a113eda39f9c2055b1777095ce51f1e28abb;hpb=29134e3225e8fd45d5c2c3067e79779577997f51;p=jalview.git diff --git a/src/jalview/datamodel/AlignmentView.java b/src/jalview/datamodel/AlignmentView.java index e089a11..9db9f38 100644 --- a/src/jalview/datamodel/AlignmentView.java +++ b/src/jalview/datamodel/AlignmentView.java @@ -26,7 +26,6 @@ import jalview.util.ShiftList; import java.io.PrintStream; import java.util.ArrayList; import java.util.List; -import java.util.Vector; /** * Transient object compactly representing a 'view' of an alignment - with @@ -47,7 +46,7 @@ public class AlignmentView * one or more ScGroup objects, which are referenced by each seqCigar's group * membership */ - private List scGroups=null; + private List scGroups = null; private boolean isNa = false; @@ -69,13 +68,51 @@ public class AlignmentView */ private class ScGroup { - public Vector seqs; + public List seqs; public SequenceGroup sg; ScGroup() { - seqs = new Vector(); + seqs = new ArrayList(); + } + + /** + * @param seq + * @return true if seq was not a member before and was added to group + */ + public boolean add(SeqCigar seq) + { + if (!seq.isMemberOf(this)) + { + seqs.add(seq); + seq.setGroupMembership(this); + return true; + } + else + { + return false; + } + } + + /** + * + * @param seq + * @return true if seq was a member and was removed from group + */ + public boolean remove(SeqCigar seq) + { + if (seq.removeGroupMembership(this)) + { + seqs.remove(seq); + return true; + } + return false; + } + + public int size() + { + return seqs.size(); } } @@ -83,7 +120,7 @@ public class AlignmentView * vector of selected seqCigars. This vector is also referenced by each * seqCigar contained in it. */ - private Vector selected; + private ScGroup selected; /** * Construct an alignmentView from a live jalview alignment view. Note - @@ -124,7 +161,7 @@ public class AlignmentView if (selection != null && selection.getSize() > 0) { List sel = selection.getSequences(null); - this.selected = new Vector(); + this.selected = new ScGroup(); selseqs = selection .getSequencesInOrder(alignment, selectedRegionOnly); } @@ -133,7 +170,7 @@ public class AlignmentView selseqs = alignment.getSequencesArray(); } - List> seqsets=new ArrayList>(); + List> seqsets = new ArrayList>(); // get the alignment's group list and make a copy List grps = new ArrayList(); List gg = alignment.getGroups(); @@ -194,8 +231,7 @@ public class AlignmentView if (selection != null && selection.getSize() > 0 && !selectedRegionOnly) { - sequences[csi].setGroupMembership(selected); - selected.addElement(sequences[csi]); + selected.add(sequences[csi]); } if (seqsets != null) { @@ -203,9 +239,8 @@ public class AlignmentView { if ((seqsets.get(sg)).contains(selseqs[i])) { - sequences[csi].setGroupMembership(sgrps[sg]); sgrps[sg].sg.deleteSequence(selseqs[i], false); - sgrps[sg].seqs.addElement(sequences[csi]); + sgrps[sg].add(sequences[csi]); if (!addedgps[sg]) { if (scGroups == null) @@ -241,7 +276,8 @@ public class AlignmentView { if (!seqcigararray.isSeqCigarArray()) { - throw new Error(MessageManager.getString("error.implementation_error_can_only_make_alignmnet_from_cigararray")); + throw new Error( + "Implementation Error - can only make an alignment view from a CigarArray of sequences."); } // contigs = seqcigararray.applyDeletions(); contigs = seqcigararray.getDeletedRegions(); @@ -298,8 +334,7 @@ public class AlignmentView { ColumnSelection colsel = new ColumnSelection(); - return new Object[] - { + return new Object[] { SeqCigar.createAlignmentSequences(sequences, gapCharacter, colsel, contigs), colsel }; } @@ -663,7 +698,9 @@ public class AlignmentView { if (sequences == null || width <= 0) { - throw new Error(MessageManager.getString("error.empty_view_cannot_be_updated")); + throw new Error( + MessageManager + .getString("error.empty_view_cannot_be_updated")); } if (nvismsa == null) { @@ -693,7 +730,17 @@ public class AlignmentView j++; if (mseq.length != sequences.length) { - throw new Error(MessageManager.formatMessage("error.mismatch_between_number_of_sequences_in_block", new String[]{Integer.valueOf(j).toString(),Integer.valueOf(mseq.length).toString(),Integer.valueOf(sequences.length).toString() })); + throw new Error( + MessageManager + .formatMessage( + "error.mismatch_between_number_of_sequences_in_block", + new String[] { + Integer.valueOf(j).toString(), + Integer.valueOf(mseq.length) + .toString(), + Integer.valueOf( + sequences.length) + .toString() })); } swidth = mseq[0].getLength(); // JBPNote: could ensure padded // here. @@ -846,25 +893,30 @@ public class AlignmentView else { // place gaps. - throw new Error(MessageManager.getString("error.padding_not_yet_implemented")); + throw new Error( + MessageManager + .getString("error.padding_not_yet_implemented")); } } } } } - return new Object[] - { alignment, columnselection }; + return new Object[] { alignment, columnselection }; } else { if (nvismsa.length != 1) { - throw new Error(MessageManager.formatMessage("error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view", new String[]{Integer.valueOf(nvismsa.length).toString()})); + throw new Error( + MessageManager + .formatMessage( + "error.mismatch_between_visible_blocks_to_update_and_number_of_contigs_in_view", + new String[] { Integer.valueOf( + nvismsa.length).toString() })); } if (nvismsa[0] != null) { - return new Object[] - { nvismsa[0], new ColumnSelection() }; + return new Object[] { nvismsa[0], new ColumnSelection() }; } else { @@ -925,8 +977,7 @@ public class AlignmentView } else { - return new int[] - { 0, width }; + return new int[] { 0, width }; } } @@ -1056,10 +1107,10 @@ public class AlignmentView + sgr.sg.getEndRes()); for (int s = 0; s < sgr.seqs.size(); s++) { - if (!((SeqCigar) sgr.seqs.elementAt(s)).isMemberOf(sgr)) + // JBPnote this should be a unit test for ScGroup + if (!sgr.seqs.get(s).isMemberOf(sgr)) { - os.println("** WARNING: sequence " - + ((SeqCigar) sgr.seqs.elementAt(s)).toString() + os.println("** WARNING: sequence " + sgr.seqs.get(s).toString() + " is not marked as member of group."); } }