-package jalview.io.vamsas;\r
-\r
-import jalview.datamodel.DBRefEntry;\r
-import jalview.datamodel.SequenceI;\r
-import uk.ac.vamsas.objects.core.DbRef;\r
-import uk.ac.vamsas.objects.core.Map;\r
-import uk.ac.vamsas.objects.core.Sequence;\r
-import jalview.io.VamsasAppDatastore;\r
-\r
-public class Dbref extends Rangetype\r
-{\r
- jalview.datamodel.SequenceI sq = null;\r
- uk.ac.vamsas.objects.core.Sequence sequence = null;\r
- DbRef dbref = null;\r
- DBRefEntry dbentry=null;\r
- public Dbref(VamsasAppDatastore datastore, DBRefEntry dbentry, jalview.datamodel.SequenceI sq2, uk.ac.vamsas.objects.core.Sequence sequence2)\r
- {\r
- super(datastore);\r
- dbref = (DbRef) getjv2vObj(dbentry);\r
- sq = sq2;\r
- sequence = sequence2;\r
- this.dbentry = dbentry;\r
- if (dbref==null)\r
- {\r
- add();\r
- } else {\r
- if (dbref.isUpdated())\r
- {\r
- conflict();\r
- } else {\r
- update();\r
- }\r
- \r
- }\r
- \r
- }\r
-\r
- public Dbref(VamsasAppDatastore datastore, DbRef ref, Sequence vdseq, SequenceI dsseq)\r
- {\r
- super(datastore);\r
- dbref = ref;\r
- sequence = vdseq;\r
- sq = dsseq;\r
- dbentry = (jalview.datamodel.DBRefEntry) getvObj2jv(dbref);\r
- if (dbentry == null)\r
- {\r
- addFromDocument();\r
- } else {\r
- if (dbref.isUpdated())\r
- {\r
- update();\r
- }\r
- }\r
- }\r
-\r
- private void update()\r
- {\r
- // TODO: verify and update dbrefs in vamsas document\r
- // there will be trouble when a dataset sequence is modified to\r
- // contain more residues than were originally referenced - we must\r
- // then make a number of dataset sequence entries - this info is already stored \r
- jalview.bin.Cache.log.debug("TODO verify update of dataset sequence database references.");\r
- }\r
-\r
- private void conflict()\r
- {\r
- jalview.bin.Cache.log.debug("Conflict in dbentry update for "+dbref.getAccessionId()+dbref.getSource()+" "+dbref.getVorbaId());\r
- // TODO Auto-generated method stub\r
- \r
- }\r
- private void addFromDocument()\r
- {\r
- // add new dbref\r
- sq.addDBRef(dbentry = new jalview.datamodel.DBRefEntry\r
- (\r
- dbref.getSource().toString(),\r
- dbref.getVersion().toString(),\r
- dbref.getAccessionId().toString()));\r
- if (dbref.getMapCount()>0)\r
- {\r
- // TODO: Jalview ignores all the other maps\r
- if (dbref.getMapCount()>1)\r
- {\r
- jalview.bin.Cache.log.debug("Ignoring additional mappings on DbRef: "+dbentry.getSource()+":"+dbentry.getAccessionId());\r
- }\r
- jalview.datamodel.Mapping mp = new jalview.datamodel.Mapping(parsemapType(dbref.getMap(0)));\r
- dbentry.setMap(mp);\r
- }\r
- // TODO: jalview ignores links and properties because it doesn't know what to do with them.\r
- \r
- bindjvvobj(dbentry, dbref);\r
- }\r
- private void add()\r
- {\r
- DbRef dbref = new DbRef();\r
- bindjvvobj(dbentry, dbref);\r
- dbref.setAccessionId(dbentry.getAccessionId());\r
- dbref.setSource(dbentry.getSource());\r
- dbref.setVersion(dbentry.getVersion());\r
- if (dbentry.getMap()!=null)\r
- {\r
- jalview.datamodel.Mapping mp = dbentry.getMap();\r
- if (mp.getMap()!=null)\r
- {\r
- Map vMap = new Map();\r
- initMapType(vMap, mp.getMap(), true);\r
- dbref.addMap(vMap);\r
- } else {\r
- jalview.bin.Cache.log.debug("Ignoring mapless DbRef.Map "+dbentry.getSrcAccString());\r
- }\r
- }\r
- sequence.addDbRef(dbref);\r
- }\r
-\r
-}\r
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.io.vamsas;
+
+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;
+import jalview.io.VamsasAppDatastore;
+
+public class Dbref extends Rangetype
+{
+ jalview.datamodel.SequenceI sq = null;
+
+ uk.ac.vamsas.objects.core.Sequence sequence = null;
+
+ DataSet ds;
+
+ public Dbref(VamsasAppDatastore datastore, DBRefEntry dbentry,
+ jalview.datamodel.SequenceI sq2,
+ uk.ac.vamsas.objects.core.Sequence sequence2, DataSet dataset)
+ {
+ super(datastore, dbentry, DbRef.class);
+ // initialise object specific attributes
+ sq = sq2;
+ sequence = sequence2;
+ this.jvobj = dbentry;
+ ds = dataset;
+ // call the accessors
+ doSync();
+ }
+
+ public Dbref(VamsasAppDatastore datastore, DbRef ref, Sequence vdseq,
+ SequenceI dsseq)
+ {
+ super(datastore, ref, jalview.datamodel.DBRefEntry.class);
+ sequence = vdseq;
+ sq = dsseq;
+ 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)
+ {
+ // 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
+ {
+ 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 (mp.getTo().getDatasetSequence() == null)
+ {
+ // TODO: fix this hinky sh!t
+ DatastoreItem dssync = dsReg.getDatastoreItemFor(mp.getTo());
+ if (dssync == null)
+ {
+ // sync the dataset sequence, if it hasn't been done already.
+ // TODO: ensure real dataset sequence corresponding to getTo is
+ // recovered
+ dssync = new Datasetsequence(
+ datastore,
+ mp.getTo(),
+ (mp.getMappedWidth() == mp.getWidth()) ? sequence
+ .getDictionary()
+ : ((mp.getMappedWidth() == 3) ? uk.ac.vamsas.objects.utils.SymbolDictionary.STANDARD_NA
+ : uk.ac.vamsas.objects.utils.SymbolDictionary.STANDARD_AA),
+ ds);
+ }
+ //
+ // TODO: NOW add a mapping between new dataset sequence and sequence
+ // associated with the database reference
+
+ // dna mappings only...
+ // new jalview.io.vamsas.Sequencemapping(datastore, mp, sequence, ds);
+
+ }
+
+ }
+ else
+ {
+ log.debug("Ignoring non-dataset sequence mapping.");
+ }
+ }
+
+ public void updateFromDoc()
+ {
+ 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);
+ }
+ }
+ }
+
+ public void conflict()
+ {
+ DbRef vobj = (DbRef) this.vobj;
+ DBRefEntry jvobj = (DBRefEntry) this.jvobj;
+ jalview.bin.Cache.log.debug("Conflict in dbentry update for "
+ + vobj.getAccessionId() + vobj.getSource() + " "
+ + vobj.getVorbaId());
+ // TODO Auto-generated method stub
+
+ }
+
+ public void addFromDocument()
+ {
+ DbRef vobj = (DbRef) this.vobj;
+ DBRefEntry jvobj = (DBRefEntry) this.jvobj;
+ // add new dbref
+ sq.addDBRef(jvobj = new jalview.datamodel.DBRefEntry(vobj.getSource()
+ .toString(), vobj.getVersion().toString(), vobj
+ .getAccessionId().toString()));
+ 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)));
+ jvobj.setMap(mp);
+ }
+ // TODO: jalview ignores links and properties because it doesn't know what
+ // to do with them.
+
+ bindjvvobj(jvobj, vobj);
+ }
+
+ public void addToDocument()
+ {
+ DBRefEntry jvobj = (DBRefEntry) this.jvobj;
+ DbRef dbref = new DbRef();
+ bindjvvobj(jvobj, dbref);
+ dbref.setAccessionId(jvobj.getAccessionId());
+ dbref.setSource(jvobj.getSource());
+ dbref.setVersion(jvobj.getVersion());
+ sequence.addDbRef(dbref);
+ if (jvobj.getMap() != null)
+ {
+ jalview.datamodel.Mapping mp = jvobj.getMap();
+ if (mp.getMap() != null)
+ {
+ Map vMap = new Map();
+ initMapType(vMap, mp.getMap(), true);
+ dbref.addMap(vMap);
+ updateMapTo(mp);
+ }
+ else
+ {
+ jalview.bin.Cache.log.debug("Ignoring mapless DbRef.Map "
+ + jvobj.getSrcAccString());
+ }
+ }
+ }
+
+}