import jalview.datamodel.DBRefEntry;
import jalview.datamodel.SequenceI;
+import uk.ac.vamsas.objects.core.DataSet;
import uk.ac.vamsas.objects.core.DbRef;
import uk.ac.vamsas.objects.core.Map;
import uk.ac.vamsas.objects.core.Sequence;
uk.ac.vamsas.objects.core.Sequence sequence = null;
- DbRef dbref = null;
-
- DBRefEntry dbentry = null;
+ DataSet ds;
public Dbref(VamsasAppDatastore datastore, DBRefEntry dbentry,
jalview.datamodel.SequenceI sq2,
- uk.ac.vamsas.objects.core.Sequence sequence2)
+ uk.ac.vamsas.objects.core.Sequence sequence2, DataSet dataset)
{
- super(datastore);
- dbref = (DbRef) getjv2vObj(dbentry);
+ super(datastore, dbentry, DbRef.class);
+ // initialise object specific attributes
sq = sq2;
sequence = sequence2;
- this.dbentry = dbentry;
- if (dbref == null)
- {
- add();
- }
- else
- {
- if (dbref.isUpdated())
- {
- conflict();
- }
- else
- {
- update();
- }
-
- }
-
+ this.jvobj = dbentry;
+ ds = dataset;
+ // call the accessors
+ doSync();
}
public Dbref(VamsasAppDatastore datastore, DbRef ref, Sequence vdseq,
SequenceI dsseq)
{
- super(datastore);
- dbref = ref;
+ super(datastore, ref, jalview.datamodel.DBRefEntry.class);
sequence = vdseq;
sq = dsseq;
- dbentry = (jalview.datamodel.DBRefEntry) getvObj2jv(dbref);
- if (dbentry == null)
+ ds = (DataSet) vdseq.getV_parent();
+ doJvUpdate();
+ }
+
+ public void updateToDoc()
+ {
+ DbRef dbref = (DbRef) this.vobj;
+ DBRefEntry jvobj = (DBRefEntry) this.jvobj;
+ dbref.setAccessionId(jvobj.getAccessionId());
+ dbref.setSource(jvobj.getSource());
+ dbref.setVersion(jvobj.getVersion());
+ if (jvobj.getMap() != null)
{
- addFromDocument();
+ // Record mapping to external database coordinate system.
+ jalview.datamodel.Mapping mp = jvobj.getMap();
+ if (mp.getMap() != null)
+ {
+ Map vMap = null;
+ if (dbref.getMapCount() == 0)
+ {
+ vMap = new Map();
+ initMapType(vMap, mp.getMap(), true);
+ dbref.addMap(vMap);
+ }
+ else
+ {
+ // we just update the data anyway.
+ vMap = dbref.getMap(0);
+ initMapType(vMap, mp.getMap(), true);
+ }
+ updateMapTo(mp);
+ }
}
- else
+ else
+ {
+ jalview.bin.Cache.log.debug("Ignoring mapless DbRef.Map "
+ + jvobj.getSrcAccString());
+ }
+
+ }
+ /**
+ * ugly hack to try to get the embedded sequences within a database reference to be stored in the document's dataset.
+ * @param mp
+ */
+ private void updateMapTo(jalview.datamodel.Mapping mp)
+ {
+ log.info("Performing updateMapTo remove this message when we know what we're doing.");
+ // TODO determine how sequences associated with database mappings are stored in the document
+ if (mp!=null && mp.getTo() != null)
{
- if (dbref.isUpdated())
+ if (mp.getTo().getDatasetSequence() == null)
{
- update();
+ // sync the dataset sequence, if it hasn't been done already.
+ Datasetsequence dssync = new Datasetsequence(
+ datastore, mp.getTo(),
+ (mp.getMappedWidth() == mp.getWidth()) ? sequence
+ .getDictionary()
+ : ((mp.getMappedWidth() == 3) ? uk.ac.vamsas.objects.utils.SymbolDictionary.STANDARD_AA
+ : uk.ac.vamsas.objects.utils.SymbolDictionary.STANDARD_NA),
+ ds);
+ // add a mapping between new dataset sequence and sequence associated with the database reference
+
+ } else {
+ log.debug("Ignoring non-dataset sequence mapping.");
}
}
}
-
- private void update()
+ public void updateFromDoc()
{
- // TODO: verify and update dbrefs in vamsas document
- // there will be trouble when a dataset sequence is modified to
- // contain more residues than were originally referenced - we must
- // then make a number of dataset sequence entries - this info is already
- // stored
- jalview.bin.Cache.log
- .debug("TODO verify update of dataset sequence database references.");
+ DbRef vobj = (DbRef) this.vobj;
+ DBRefEntry jvobj = (DBRefEntry) this.jvobj;
+ jvobj.setAccessionId(vobj.getAccessionId());
+ jvobj.setSource(vobj.getSource());
+ jvobj.setVersion(vobj.getVersion());
+ // add new dbref
+ if (vobj.getMapCount() > 0)
+ {
+ // TODO: Jalview ignores all the other maps
+ if (vobj.getMapCount() > 1)
+ {
+ jalview.bin.Cache.log
+ .debug("Ignoring additional mappings on DbRef: "
+ + jvobj.getSource() + ":" + jvobj.getAccessionId());
+ }
+ jalview.datamodel.Mapping mp = new jalview.datamodel.Mapping(
+ parsemapType(vobj.getMap(0)));
+ if (jvobj.getMap()==null || !mp.equals(jvobj.getMap()))
+ {
+ jvobj.setMap(mp);
+ }
+ }
}
-
- private void conflict()
+
+ public void conflict()
{
+ DbRef vobj = (DbRef) this.vobj;
+ DBRefEntry jvobj = (DBRefEntry) this.jvobj;
jalview.bin.Cache.log.debug("Conflict in dbentry update for "
- + dbref.getAccessionId() + dbref.getSource() + " "
- + dbref.getVorbaId());
+ + vobj.getAccessionId() + vobj.getSource() + " "
+ + vobj.getVorbaId());
// TODO Auto-generated method stub
}
- private void addFromDocument()
+ public void addFromDocument()
{
+ DbRef vobj = (DbRef) this.vobj;
+ DBRefEntry jvobj = (DBRefEntry) this.jvobj;
// add new dbref
- sq.addDBRef(dbentry = new jalview.datamodel.DBRefEntry(dbref
- .getSource().toString(), dbref.getVersion().toString(), dbref
+ sq.addDBRef(jvobj = new jalview.datamodel.DBRefEntry(vobj.getSource()
+ .toString(), vobj.getVersion().toString(), vobj
.getAccessionId().toString()));
- if (dbref.getMapCount() > 0)
+ if (vobj.getMapCount() > 0)
{
// TODO: Jalview ignores all the other maps
- if (dbref.getMapCount() > 1)
+ if (vobj.getMapCount() > 1)
{
jalview.bin.Cache.log
.debug("Ignoring additional mappings on DbRef: "
- + dbentry.getSource() + ":"
- + dbentry.getAccessionId());
+ + jvobj.getSource() + ":" + jvobj.getAccessionId());
}
jalview.datamodel.Mapping mp = new jalview.datamodel.Mapping(
- parsemapType(dbref.getMap(0)));
- dbentry.setMap(mp);
+ parsemapType(vobj.getMap(0)));
+ jvobj.setMap(mp);
}
// TODO: jalview ignores links and properties because it doesn't know what
// to do with them.
- bindjvvobj(dbentry, dbref);
+ bindjvvobj(jvobj, vobj);
}
- private void add()
+ public void addToDocument()
{
+ DBRefEntry jvobj = (DBRefEntry) this.jvobj;
DbRef dbref = new DbRef();
- bindjvvobj(dbentry, dbref);
- dbref.setAccessionId(dbentry.getAccessionId());
- dbref.setSource(dbentry.getSource());
- dbref.setVersion(dbentry.getVersion());
- if (dbentry.getMap() != null)
+ bindjvvobj(jvobj, dbref);
+ dbref.setAccessionId(jvobj.getAccessionId());
+ dbref.setSource(jvobj.getSource());
+ dbref.setVersion(jvobj.getVersion());
+ if (jvobj.getMap() != null)
{
- jalview.datamodel.Mapping mp = dbentry.getMap();
+ jalview.datamodel.Mapping mp = jvobj.getMap();
if (mp.getMap() != null)
{
Map vMap = new Map();
else
{
jalview.bin.Cache.log.debug("Ignoring mapless DbRef.Map "
- + dbentry.getSrcAccString());
+ + jvobj.getSrcAccString());
}
}
sequence.addDbRef(dbref);