From c1fd773fbb58cc3eaa35b71f390a3cf416b1bdad Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Tue, 5 Apr 2016 18:17:03 +0100 Subject: [PATCH] JAL-2046 clarify contract for copy constructor and initSeqFrom implementation - with existing dataset sequence reference, no sequence features are cloned --- src/jalview/datamodel/Sequence.java | 38 ++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java index cb3ae70..fbe3670 100755 --- a/src/jalview/datamodel/Sequence.java +++ b/src/jalview/datamodel/Sequence.java @@ -186,12 +186,13 @@ public class Sequence extends ASequence implements SequenceI } /** - * Creates a new Sequence object with new features, DBRefEntries, - * AlignmentAnnotations, and PDBIds but inherits any existing dataset sequence - * reference. + * Creates a new Sequence object with new AlignmentAnnotations but inherits + * any existing dataset sequence reference. If non exists, everything is + * copied. * * @param seq - * DOCUMENT ME! + * if seq is a dataset sequence, behaves like a plain old copy + * constructor */ public Sequence(SequenceI seq) { @@ -214,6 +215,16 @@ public class Sequence extends ASequence implements SequenceI } + /** + * does the heavy lifting when cloning a dataset sequence, or coping data from + * dataset to a new derived sequence. + * + * @param seq + * - source of attributes. + * @param alAnnotation + * - alignment annotation present on seq that should be copied onto + * this sequence + */ protected void initSeqFrom(SequenceI seq, AlignmentAnnotation[] alAnnotation) { @@ -226,23 +237,26 @@ public class Sequence extends ASequence implements SequenceI description = seq.getDescription(); sourceDBRef = seq.getSourceDBRef() == null ? null : new DBRefEntry( seq.getSourceDBRef()); - if (seq.getSequenceFeatures() != null) + if (seq != datasetSequence) { - SequenceFeature[] sf = seq.getSequenceFeatures(); - for (int i = 0; i < sf.length; i++) - { - addSequenceFeature(new SequenceFeature(sf[i])); - } + setDatasetSequence(seq.getDatasetSequence()); } - setDatasetSequence(seq.getDatasetSequence()); if (datasetSequence == null && seq.getDBRefs() != null) { - // only copy DBRefs if we really are a dataset sequence + // only copy DBRefs and seqfeatures if we really are a dataset sequence DBRefEntry[] dbr = seq.getDBRefs(); for (int i = 0; i < dbr.length; i++) { addDBRef(new DBRefEntry(dbr[i])); } + if (seq.getSequenceFeatures() != null) + { + SequenceFeature[] sf = seq.getSequenceFeatures(); + for (int i = 0; i < sf.length; i++) + { + addSequenceFeature(new SequenceFeature(sf[i])); + } + } } if (seq.getAnnotation() != null) { -- 1.7.10.2