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
* one or more ScGroup objects, which are referenced by each seqCigar's group
* membership
*/
- private List<ScGroup> scGroups=null;
+ private List<ScGroup> scGroups = null;
private boolean isNa = false;
*/
private class ScGroup
{
- public Vector seqs;
+ public List<SeqCigar> seqs;
public SequenceGroup sg;
ScGroup()
{
- seqs = new Vector();
+ seqs = new ArrayList<SeqCigar>();
+ }
+
+ /**
+ * @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();
}
}
* 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 -
if (selection != null && selection.getSize() > 0)
{
List<SequenceI> sel = selection.getSequences(null);
- this.selected = new Vector();
+ this.selected = new ScGroup();
selseqs = selection
.getSequencesInOrder(alignment, selectedRegionOnly);
}
selseqs = alignment.getSequencesArray();
}
- List<List<SequenceI>> seqsets=new ArrayList<List<SequenceI>>();
+ List<List<SequenceI>> seqsets = new ArrayList<List<SequenceI>>();
// get the alignment's group list and make a copy
List<SequenceGroup> grps = new ArrayList<SequenceGroup>();
List<SequenceGroup> gg = alignment.getGroups();
if (selection != null && selection.getSize() > 0
&& !selectedRegionOnly)
{
- sequences[csi].setGroupMembership(selected);
- selected.addElement(sequences[csi]);
+ selected.add(sequences[csi]);
}
if (seqsets != null)
{
{
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)
{
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();
{
ColumnSelection colsel = new ColumnSelection();
- return new Object[]
- {
+ return new Object[] {
SeqCigar.createAlignmentSequences(sequences, gapCharacter, colsel,
contigs), colsel };
}
{
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)
{
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.
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
{
}
else
{
- return new int[]
- { 0, width };
+ return new int[] { 0, width };
}
}
+ 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.");
}
}