proper vamsas style binding of alignment sequence objects to newick node labels....
[jalview.git] / src / jalview / io / vamsas / DatastoreItem.java
index b77cc8c..1a57dc3 100644 (file)
@@ -13,6 +13,8 @@ import uk.ac.vamsas.client.IClientDocument;
 import uk.ac.vamsas.client.Vobject;\r
 import uk.ac.vamsas.client.VorbaId;\r
 import uk.ac.vamsas.objects.core.Entry;\r
+import uk.ac.vamsas.objects.core.Provenance;\r
+import uk.ac.vamsas.objects.core.Seg;\r
 \r
 /**\r
  * Holds all the common machinery for binding objects to vamsas objects\r
@@ -54,6 +56,8 @@ public class DatastoreItem
    */\r
   protected Object getvObj2jv(uk.ac.vamsas.client.Vobject vobj)\r
   {\r
+    if (vobj2jv==null)\r
+      return null;\r
     VorbaId id = vobj.getVorbaId();\r
     if (id == null)\r
     {\r
@@ -115,9 +119,10 @@ public class DatastoreItem
     initDatastoreItem(datastore);\r
     // TODO Auto-generated constructor stub\r
   }\r
-\r
+  VamsasAppDatastore datastore = null;\r
   public void initDatastoreItem(VamsasAppDatastore ds)\r
   {\r
+    datastore = ds;\r
     initDatastoreItem(ds.getProvEntry(), ds.getClientDocument(), ds.getVamsasObjectBinding(), ds.getJvObjectBinding());\r
   }\r
   public void initDatastoreItem(Entry provEntry, IClientDocument cdoc, Hashtable vobj2jv, IdentityHashMap jv2vobj)\r
@@ -143,4 +148,88 @@ public class DatastoreItem
     }\r
     return vObjs;\r
   }\r
+  // utility functions\r
+  /**\r
+   * get start<end range of segment, adjusting for inclusivity flag and\r
+   * polarity.\r
+   *\r
+   * @param visSeg\r
+   * @param ensureDirection when true - always ensure start is less than end.\r
+   * @return int[] { start, end, direction} where direction==1 for range running from end to start.\r
+   */\r
+  public int[] getSegRange(Seg visSeg, boolean ensureDirection)\r
+  {\r
+    boolean incl = visSeg.getInclusive();\r
+    // adjust for inclusive flag.\r
+    int pol = (visSeg.getStart() <= visSeg.getEnd()) ? 1 : -1; // polarity of\r
+    // region.\r
+    int start = visSeg.getStart() + (incl ? 0 : pol);\r
+    int end = visSeg.getEnd() + (incl ? 0 : -pol);\r
+    if (ensureDirection && pol == -1)\r
+    {\r
+      // jalview doesn't deal with inverted ranges, yet.\r
+      int t = end;\r
+      end = start;\r
+      start = t;\r
+    }\r
+    return new int[]\r
+        {\r
+        start, end, pol < 0 ? 1 : 0};\r
+  }\r
+  /**\r
+   * provenance bits\r
+   */\r
+  protected jalview.datamodel.Provenance getJalviewProvenance(Provenance prov)\r
+  {\r
+    // TODO: fix App and Action entries and check use of provenance in jalview.\r
+    jalview.datamodel.Provenance jprov = new jalview.datamodel.Provenance();\r
+    for (int i = 0; i < prov.getEntryCount(); i++)\r
+    {\r
+      jprov.addEntry(prov.getEntry(i).getUser(), prov.getEntry(i).getAction(),\r
+                     prov.getEntry(i).getDate(),\r
+                     prov.getEntry(i).getId());\r
+    }\r
+\r
+    return jprov;\r
+  }\r
+\r
+  /**\r
+   *\r
+   * @return default initial provenance list for a Jalview created vamsas\r
+   *         object.\r
+   */\r
+  Provenance dummyProvenance()\r
+  {\r
+    return dummyProvenance(null);\r
+  }\r
+\r
+  protected Entry dummyPEntry(String action)\r
+  {\r
+    Entry entry = new Entry();\r
+    entry.setApp(this.provEntry.getApp());\r
+    if (action != null)\r
+    {\r
+      entry.setAction(action);\r
+    }\r
+    else\r
+    {\r
+      entry.setAction("created.");\r
+    }\r
+    entry.setDate(new java.util.Date());\r
+    entry.setUser(this.provEntry.getUser());\r
+    return entry;\r
+  }\r
+\r
+  protected Provenance dummyProvenance(String action)\r
+  {\r
+    Provenance prov = new Provenance();\r
+    prov.addEntry(dummyPEntry(action));\r
+    return prov;\r
+  }\r
+\r
+  protected void addProvenance(Provenance p, String action)\r
+  {\r
+    p.addEntry(dummyPEntry(action));\r
+  }\r
+\r
 }\r