JAL-3949 - refactor logging from jalview.bin.Cache to jalview.bin.Console
[jalview.git] / src / jalview / io / vamsas / Dbref.java
index c5ac44f..91bf666 100644 (file)
-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-Rel$$)
+ * Copyright (C) $$Year-Rel$$ 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.bin.Console;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.SequenceI;
+import jalview.io.VamsasAppDatastore;
+
+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;
+
+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
+    {
+      Console.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)
+      {
+        Console.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;
+    Console.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)
+      {
+        Console.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
+      {
+        Console.debug(
+                "Ignoring mapless DbRef.Map " + jvobj.getSrcAccString());
+      }
+    }
+  }
+
+}