+ public void append(AlignmentI toappend)
+ {
+ // 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
+ Vector sqs = (hashidden) ? toappend.getHiddenSequences().getFullAlignment().getSequences() : toappend.getSequences();
+ if (sqs != null)
+ {
+ Enumeration sq = sqs.elements();
+ while (sq.hasMoreElements())
+ {
+ SequenceI addedsq=(SequenceI) sq.nextElement();
+ 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]);
+ }
+ AlignedCodonFrame[] acod = toappend.getCodonFrames();
+ for (int a = 0; acod != null && a < acod.length; a++)
+ {
+ this.addCodonFrame(acod[a]);
+ }
+ Vector sg = toappend.getGroups();
+ if (sg != null)
+ {
+ Enumeration el = sg.elements();
+ while (el.hasMoreElements())
+ {
+ addGroup((SequenceGroup) el.nextElement());
+ }
+ }
+ 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++)
+ {
+ // hide the newly appended sequence in the alignment
+ if (hs.hiddenSequences[s]!=null)
+ {
+ hiddenSequences.hideSequence(hs.hiddenSequences[s]);
+ }
+ }
+ }
+ }
+ if (toappend.getProperties()!=null)
+ {
+ // we really can't do very much here - just try to concatenate strings where property collisions occur.
+ Enumeration key = toappend.getProperties().keys();
+ while (key.hasMoreElements())
+ {
+ Object k = key.nextElement();
+ Object ourval = this.getProperty(k);
+ Object toapprop = toappend.getProperty(k);
+ if (ourval!=null)
+ {
+ if (ourval.getClass().equals(toapprop.getClass()) && !ourval.equals(toapprop))
+ {
+ if (ourval instanceof String)
+ {
+ // append strings
+ this.setProperty(k, ((String) ourval)+"; "+((String) toapprop));
+ } else {
+ if (ourval instanceof Vector)
+ {
+ // append vectors
+ Enumeration theirv = ((Vector) toapprop).elements();
+ while (theirv.hasMoreElements())
+ {
+ ((Vector)ourval).addElement(theirv);
+ }
+ }
+ }
+ }
+ } else {
+ // just add new property directly
+ setProperty(k, toapprop);
+ }
+
+ }
+ }
+ }
+