+ cframes.add(acf);
+ }
+ }
+ return cframes;
+ }
+
+ /**
+ * Sets the codon frame mappings (replacing any existing mappings).
+ *
+ * @see jalview.datamodel.AlignmentI#setCodonFrames()
+ */
+ @Override
+ public void setCodonFrames(Set<AlignedCodonFrame> acfs)
+ {
+ this.codonFrameList = acfs;
+ }
+
+ /**
+ * Returns the set of codon frame mappings. Any changes to the returned set
+ * will affect the alignment.
+ *
+ * @see jalview.datamodel.AlignmentI#getCodonFrames()
+ */
+ @Override
+ public Set<AlignedCodonFrame> getCodonFrames()
+ {
+ return codonFrameList;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seejalview.datamodel.AlignmentI#removeCodonFrame(jalview.datamodel.
+ * AlignedCodonFrame)
+ */
+ @Override
+ public boolean removeCodonFrame(AlignedCodonFrame codons)
+ {
+ if (codons == null || codonFrameList == null)
+ {
+ return false;
+ }
+ return codonFrameList.remove(codons);
+ }
+
+ @Override
+ public void append(AlignmentI toappend)
+ {
+ if (toappend == this)
+ {
+ System.err.println("Self append may cause a deadlock.");
+ }
+ // TODO test this method for a future 2.5 release
+ // currently tested for use in jalview.gui.SequenceFetcher
+ boolean samegap = toappend.getGapCharacter() == getGapCharacter();
+ char oldc = toappend.getGapCharacter();
+ boolean hashidden = toappend.getHiddenSequences() != null
+ && toappend.getHiddenSequences().hiddenSequences != null;
+ // get all sequences including any hidden ones
+ List<SequenceI> sqs = (hashidden) ? toappend.getHiddenSequences()
+ .getFullAlignment().getSequences() : toappend.getSequences();
+ if (sqs != null)
+ {
+ synchronized (sqs)
+ {
+ for (SequenceI addedsq : sqs)
+ {
+ if (!samegap)
+ {
+ char[] oldseq = addedsq.getSequence();
+ for (int c = 0; c < oldseq.length; c++)
+ {
+ if (oldseq[c] == oldc)
+ {
+ oldseq[c] = gapCharacter;
+ }
+ }
+ }
+ addSequence(addedsq);
+ }
+ }
+ }
+ AlignmentAnnotation[] alan = toappend.getAlignmentAnnotation();
+ for (int a = 0; alan != null && a < alan.length; a++)
+ {
+ addAnnotation(alan[a]);
+ }
+
+ this.codonFrameList.addAll(toappend.getCodonFrames());
+
+ List<SequenceGroup> sg = toappend.getGroups();
+ if (sg != null)
+ {
+ for (SequenceGroup _sg : sg)
+ {
+ addGroup(_sg);
+ }
+ }
+ if (toappend.getHiddenSequences() != null)
+ {
+ HiddenSequences hs = toappend.getHiddenSequences();
+ if (hiddenSequences == null)
+ {
+ hiddenSequences = new HiddenSequences(this);
+ }
+ if (hs.hiddenSequences != null)
+ {
+ for (int s = 0; s < hs.hiddenSequences.length; s++)