+ /*
+ * (non-Javadoc)
+ *
+ * @see jalview.datamodel.SequenceI#deriveSequence()
+ */
+ public SequenceI deriveSequence()
+ {
+ SequenceI seq = new Sequence(this);
+ if (datasetSequence != null)
+ {
+ // duplicate current sequence with same dataset
+ seq.setDatasetSequence(datasetSequence);
+ }
+ else
+ {
+ if (isValidDatasetSequence())
+ {
+ // Use this as dataset sequence
+ seq.setDatasetSequence(this);
+ }
+ else
+ {
+ // Create a new, valid dataset sequence
+ SequenceI ds = seq;
+ ds.setSequence(AlignSeq.extractGaps(
+ jalview.util.Comparison.GapChars, new String(sequence)));
+ setDatasetSequence(ds);
+ ds.setSequenceFeatures(getSequenceFeatures());
+ seq = this; // and return this sequence as the derived sequence.
+ }
+ }
+ return seq;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see jalview.datamodel.SequenceI#createDatasetSequence()
+ */
+ public SequenceI createDatasetSequence()
+ {
+ if (datasetSequence == null)
+ {
+ datasetSequence = new Sequence(getName(), AlignSeq.extractGaps(
+ jalview.util.Comparison.GapChars, getSequenceAsString()),
+ getStart(), getEnd());
+ datasetSequence.setSequenceFeatures(getSequenceFeatures());
+ datasetSequence.setDescription(getDescription());
+ setSequenceFeatures(null);
+ // move database references onto dataset sequence
+ datasetSequence.setDBRef(getDBRef());
+ setDBRef(null);
+ datasetSequence.setPDBId(getPDBId());
+ setPDBId(null);
+ datasetSequence.updatePDBIds();
+ if (annotation != null)
+ {
+ for (AlignmentAnnotation aa : annotation)
+ {
+ AlignmentAnnotation _aa = new AlignmentAnnotation(aa);
+ _aa.sequenceRef = datasetSequence;
+ _aa.adjustForAlignment(); // uses annotation's own record of
+ // sequence-column mapping
+ datasetSequence.addAlignmentAnnotation(_aa);
+ }
+ }
+ }
+ return datasetSequence;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * jalview.datamodel.SequenceI#setAlignmentAnnotation(AlignmmentAnnotation[]
+ * annotations)
+ */
+ public void setAlignmentAnnotation(AlignmentAnnotation[] annotations)
+ {
+ if (annotation != null)
+ {
+ annotation.removeAllElements();
+ }
+ if (annotations != null)
+ {
+ for (int i = 0; i < annotations.length; i++)
+ {
+ if (annotations[i] != null)
+ addAlignmentAnnotation(annotations[i]);
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see jalview.datamodel.SequenceI#getAnnotation(java.lang.String)
+ */
+ public AlignmentAnnotation[] getAnnotation(String label)
+ {
+ if (annotation == null || annotation.size() == 0)
+ {
+ return null;
+ }
+
+ Vector subset = new Vector();
+ Enumeration e = annotation.elements();
+ while (e.hasMoreElements())
+ {
+ AlignmentAnnotation ann = (AlignmentAnnotation) e.nextElement();
+ if (ann.label != null && ann.label.equals(label))
+ {
+ subset.addElement(ann);
+ }
+ }
+ if (subset.size() == 0)
+ {
+ return null;
+ }
+ AlignmentAnnotation[] anns = new AlignmentAnnotation[subset.size()];
+ int i = 0;
+ e = subset.elements();
+ while (e.hasMoreElements())
+ {
+ anns[i++] = (AlignmentAnnotation) e.nextElement();
+ }
+ subset.removeAllElements();
+ return anns;
+ }