import uk.ac.vamsas.objects.core.SequenceMapping;
import uk.ac.vamsas.objects.core.SequenceType;
+/**
+ * binds a vamsas sequence mapping object from the vamsas document to
+ * a maplist object associated with a mapping in the Jalview model.
+ * We use the maplist object because these are referred to both in
+ * the Mapping object associated with a jalview.datamodel.DBRefEntry
+ * and in the array of jalview.datamodel.AlCodonFrame objects that
+ * Jalview uses to propagate sequence mapping position highlighting
+ * across the views.
+ * @author JimP
+ *
+ */
public class Sequencemapping extends Rangetype
{
public Sequencemapping(VamsasAppDatastore datastore,
SequenceMapping sequenceMapping)
{
- super(datastore);
- Object mjvmapping = getvObj2jv(sequenceMapping);
- if (mjvmapping == null)
- {
- add(sequenceMapping);
- }
- else
- {
- if (sequenceMapping.isUpdated())
- {
- update((jalview.util.MapList) mjvmapping, sequenceMapping);
- }
- }
+ super(datastore, sequenceMapping, jalview.util.MapList.class);
+ doJvUpdate();
}
-
+ private SequenceType from;
+ private DataSet ds;
+ private Mapping mjvmapping;
+
/**
* create or update a vamsas sequence mapping corresponding to a jalview
* Mapping between two dataset sequences
uk.ac.vamsas.objects.core.SequenceType from,
uk.ac.vamsas.objects.core.DataSet ds)
{
- super(datastore);
- SequenceMapping sequenceMapping = (SequenceMapping) getjv2vObj(mjvmapping);
- if (sequenceMapping == null)
+ super(datastore, mjvmapping.getMap(), SequenceMapping.class);
+ this.from = from;
+ this.ds = ds;
+ this.mjvmapping = mjvmapping;
+ validate();
+ doSync();
+ }
+ /**
+ * local check that extant mapping context is valid
+ */
+ public void validate()
+ {
+
+ SequenceMapping sequenceMapping = (SequenceMapping) vobj;
+ if (sequenceMapping==null)
{
- add(mjvmapping, from, ds);
+ return;
}
- else
+ if (from != null && sequenceMapping.getLoc() != from)
{
- if (from != null && sequenceMapping.getLoc() != from)
- {
- jalview.bin.Cache.log.warn("Probable IMPLEMENTATION ERROR: " + from
- + " doesn't match the local mapping sequence.");
- }
- if (ds != null && sequenceMapping.is__stored_in_document()
- && sequenceMapping.getV_parent() != ds)
- {
- jalview.bin.Cache.log
- .warn("Probable IMPLEMENTATION ERROR: "
- + ds
- + " doesn't match the parent of the bound sequence mapping object.");
- }
- if (sequenceMapping.isUpdated())
- {
- conflict(mjvmapping, sequenceMapping);
- }
- else
- {
- update(mjvmapping, sequenceMapping);
- }
+ jalview.bin.Cache.log.warn("Probable IMPLEMENTATION ERROR: " + from
+ + " doesn't match the local mapping sequence.");
}
+ if (ds != null && sequenceMapping.is__stored_in_document()
+ && sequenceMapping.getV_parent() != ds)
+ {
+ jalview.bin.Cache.log
+ .warn("Probable IMPLEMENTATION ERROR: "
+ + ds
+ + " doesn't match the parent of the bound sequence mapping object.");
+ }
+ }
+
+ public void addToDocument()
+ {
+ add(mjvmapping, from, ds);
}
+ public void addFromDocument()
+ {
+ add((SequenceMapping) vobj);
+ }
+
+ public void conflict()
+ {
+ conflict(mjvmapping, (SequenceMapping) vobj);
+
+ }
+
+ public void updateToDoc()
+ {
+ update(mjvmapping, (SequenceMapping) vobj);
+ }
+ public void updateFromDoc()
+ {
+ update((SequenceMapping) vobj, (jalview.datamodel.Mapping) jvobj);
+ }
+
private void conflict(Mapping mjvmapping, SequenceMapping sequenceMapping)
{
System.err.println("Conflict in update of sequenceMapping "
if (to == null)
{
jalview.bin.Cache.log
- .warn("NONFATAL - do a second update: Ignoring Forward Reference to seuqence not yet bound to vamsas seuqence object");
+ .warn("FIXME NONFATAL - do a second update: Ignoring Forward Reference to seuqence not yet bound to vamsas seuqence object");
return;
}
SequenceMapping sequenceMapping = new SequenceMapping();
// source
// of
// mapping
- bindjvvobj(mjvmapping, sequenceMapping);
+ bindjvvobj(mjvmapping.getMap(), sequenceMapping);
jalview.bin.Cache.log.debug("Successfully created mapping "
+ sequenceMapping.getVorbaId());
}
- private void update(jalview.util.MapList mjvmapping,
- SequenceMapping sequenceMapping)
+ // private void update(jalview.util.MapList mjvmapping,
+ // SequenceMapping sequenceMapping)
{
jalview.bin.Cache.log
.error("Not implemented: Jalview Update Alcodon Mapping:TODO!");
}
+ private void update(SequenceMapping sequenceMapping,
+ jalview.datamodel.Mapping mjvmapping)
+ {
+ jalview.bin.Cache.log
+ .error("Not implemented: Update DBRef Mapping from Jalview");
+ }
private void update(jalview.datamodel.Mapping mjvmapping,
SequenceMapping sequenceMapping)
{
}
/**
+ * bind a SequenceMapping to a live AlCodonFrame element
* limitations: Currently, jalview only deals with mappings between dataset
* sequences, and even then, only between those that map from DNA to Protein.
*
// create and add the new mapping to (each) dataset's codonFrame
jalview.util.MapList mapping = null;
- if (!sense)
- {
- mapping = this.parsemapType(sequenceMapping, 1, 3); // invert sense
- mapping = new jalview.util.MapList(mapping.getToRanges(), mapping
- .getFromRanges(), mapping.getToRatio(), mapping
- .getFromRatio());
- afc.addMap(to, from, mapping);
- }
- else
+ if (dnaToProt)
{
- mapping = this.parsemapType(sequenceMapping, 3, 1); // correct sense
+ if (!sense)
+ {
+ mapping = this.parsemapType(sequenceMapping, 1, 3); // invert sense
+ mapping = new jalview.util.MapList(mapping.getToRanges(), mapping
+ .getFromRanges(), mapping.getToRatio(), mapping
+ .getFromRatio());
+ afc.addMap(to, from, mapping);
+ }
+ else
+ {
+ mapping = this.parsemapType(sequenceMapping, 3, 1); // correct sense
+ afc.addMap(from, to, mapping);
+ }
+ } else {
+ mapping = this.parsemapType(sequenceMapping, 1, 1); // correct sense
afc.addMap(from, to, mapping);
}
bindjvvobj(mapping, sequenceMapping);