+ /*
+ * (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();
+ }
+ 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;
+ }
+
+ public boolean updatePDBIds()
+ {
+ if (datasetSequence != null)
+ {
+ // TODO: could merge DBRefs
+ return datasetSequence.updatePDBIds();
+ }
+ if (dbrefs == null || dbrefs.length == 0)
+ {
+ return false;
+ }
+ Vector newpdb = new Vector();
+ for (int i = 0; i < dbrefs.length; i++)
+ {
+ if (DBRefSource.PDB.equals(dbrefs[i].getSource()))
+ {
+ PDBEntry pdbe = new PDBEntry();
+ pdbe.setId(dbrefs[i].getAccessionId());
+ if (pdbIds == null || pdbIds.size() == 0)
+ {
+ newpdb.addElement(pdbe);
+ }
+ else
+ {
+ Enumeration en = pdbIds.elements();
+ boolean matched = false;
+ while (!matched && en.hasMoreElements())
+ {
+ PDBEntry anentry = (PDBEntry) en.nextElement();
+ if (anentry.getId().equals(pdbe.getId()))
+ {
+ matched = true;
+ }
+ }
+ if (!matched)
+ {
+ newpdb.addElement(pdbe);
+ }
+ }
+ }
+ }
+ if (newpdb.size() > 0)
+ {
+ Enumeration en = newpdb.elements();
+ while (en.hasMoreElements())
+ {
+ addPDBId((PDBEntry) en.nextElement());
+ }
+ return true;
+ }
+ return false;
+ }