VAMSAS root = null; // will be resolved based on Dataset Parent.
// /////////////////////////////////////////
// SAVE THE DATASET
+ DataSet dataset = null;
if (jal.getDataset() == null)
{
Cache.log.warn("Creating new dataset for an alignment.");
jal.setDataset(null);
}
- DataSet dataset = (DataSet) getjv2vObj(jal.getDataset());
+ dataset = (DataSet) getjv2vObj(jal.getDataset());
if (dataset == null)
{
+ // it might be that one of the dataset sequences does actually have a binding, so search for it indirectly.
+ jalview.datamodel.SequenceI[] jdatset = jal.getDataset().getSequencesArray();
+ for (int i=0; i<jdatset.length; i++)
+ {
+ Vobject vbound = getjv2vObj(jdatset[i]);
+ if (vbound!=null)
+ {
+ if (vbound instanceof uk.ac.vamsas.objects.core.Sequence)
+ {
+ if (dataset==null)
+ {
+ dataset = (DataSet) vbound.getV_parent();
+ } else {
+ if (dataset!=vbound.getV_parent())
+ {
+ throw new Error("IMPLEMENTATION ERROR: Cannot map an alignment of sequences from datasets into the vamsas document.");
+ // This occurs because the dataset for the alignment we are trying to
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (dataset == null) {
+ // we create a new dataset on the default vamsas root.
root = cdoc.getVamsasRoots()[0]; // default vamsas root for modifying.
dataset = new DataSet();
root.addDataSet(dataset);
}
addProvenance(dsa.getProvenance(), "created"); // JBPNote - need
// to update
- dsa.setSeqRef(sequence);
+ dsa.addSeqRef(sequence); // we have just created this annotation - so safe to use this
bindjvvobj(feature, dsa);
dataset.addDataSetAnnotations(dsa);
}
// or just correctly resolve the tree's seqData to the correct alignment in
// the document.
// vInput.setObjRef(getjv2vObj(jal));
- vInput.setObjRef(getjv2vObj(tp.getViewPort()));
+ vInput.setObjRef(new Object[] { getjv2vObj(tp.getViewPort())});
prov.getEntry(0).setAction("created " + tp.getTitle());
prov.getEntry(0).addInput(vInput);
vInput.setName("jalview:seqdist");
Cache.log.warn("Ignoring additional input spec in provenance entry "
+ tp.getEntry(pe).toString());
}
- // LATER: deal sensibly with multiple inputs.
+ // LATER: deal sensibly with multiple inputs
Input vInput = tp.getEntry(pe).getInput(0);
- if (vInput.getObjRef() instanceof uk.ac.vamsas.objects.core.Alignment)
+ // LATER: deal sensibly with multiple object specification for input
+ if (vInput.getObjRef().length==1 && vInput.getObjRef(0) instanceof uk.ac.vamsas.objects.core.Alignment)
{
// recover an AlignmentView for the input data
AlignViewport javport = (AlignViewport) getvObj2jv( (uk.ac.vamsas.
client.Vobject) vInput
- .getObjRef());
+ .getObjRef(0));
jalview.datamodel.AlignmentI jal = javport.getAlignment();
jalview.datamodel.CigarArray view = javport.getAlignment().
getCompactAlignment();
for (int dsa = 0; dsa < dataset.getDataSetAnnotationsCount(); dsa++)
{
DataSetAnnotations dseta = dataset.getDataSetAnnotations(dsa);
- SequenceI dsSeq = (SequenceI) getvObj2jv( (Vobject) dseta.getSeqRef());
- if (dsSeq == null)
+ // TODO: deal with group annotation on datset sequences.
+ if (dseta.getSeqRefCount()==1)
{
- jalview.bin.Cache.log.warn(
- "Couldn't resolve jalview sequenceI for dataset object reference " +
- ( (Vobject) dataset.getDataSetAnnotations(dsa).getSeqRef()).
- getVorbaId().getId());
- }
- else
- {
- if (dseta.getAnnotationElementCount() == 0)
+ SequenceI dsSeq = (SequenceI) getvObj2jv( (Vobject) dseta.getSeqRef(0)); // TODO: deal with group dataset annotations
+ if (dsSeq == null)
+ {
+ jalview.bin.Cache.log.warn(
+ "Couldn't resolve jalview sequenceI for dataset object reference " +
+ ( (Vobject) dataset.getDataSetAnnotations(dsa).getSeqRef(0)).
+ getVorbaId().getId());
+ }
+ else
+ {
+ if (dseta.getAnnotationElementCount() == 0)
{
jalview.datamodel.SequenceFeature sf = (jalview.datamodel.
SequenceFeature) getvObj2jv(dseta);
Cache.log.warn("Ignoring dataset annotation with annotationElements. Not yet supported in jalview.");
}
}
+ }
}
}
for (int i = 0; i < prov.getEntryCount(); i++)
{
jprov.addEntry(prov.getEntry(i).getUser(), prov.getEntry(i).getAction(),
- prov.getEntry(i).getDate().toDate(),
+ prov.getEntry(i).getDate(),
prov.getEntry(i).getId());
}
{
entry.setAction("created.");
}
- entry.setDate(new org.exolab.castor.types.Date(new java.util.Date()));
+ entry.setDate(new java.util.Date());
entry.setUser(this.provEntry.getUser());
return entry;
}