-package jalview.io.vamsas;\r
-\r
-import jalview.bin.Cache;\r
-import jalview.gui.TreePanel;\r
-import jalview.io.VamsasAppDatastore;\r
-\r
-import java.util.Enumeration;\r
-import java.util.Hashtable;\r
-import java.util.IdentityHashMap;\r
-import java.util.Vector;\r
-\r
-import uk.ac.vamsas.client.IClientDocument;\r
-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
- * @author JimP\r
- *\r
- */\r
-public class DatastoreItem\r
-{\r
- /**\r
- * \r
- */\r
- Entry provEntry = null;\r
-\r
- IClientDocument cdoc;\r
-\r
- Hashtable vobj2jv;\r
-\r
- IdentityHashMap jv2vobj;\r
- /**\r
- * @return the Vobject bound to Jalview datamodel object\r
- */\r
- protected Vobject getjv2vObj(Object jvobj)\r
- {\r
- if (jv2vobj.containsKey(jvobj))\r
- {\r
- return cdoc.getObject( (VorbaId) jv2vobj.get(jvobj));\r
- }\r
- if (Cache.log.isDebugEnabled())\r
- {\r
- Cache.log.debug("Returning null VorbaID binding for jalview object "+jvobj);\r
- }\r
- return null;\r
- }\r
-\r
- /**\r
- *\r
- * @param vobj\r
- * @return Jalview datamodel object bound to the vamsas document object\r
- */\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
- id = cdoc.registerObject(vobj);\r
- Cache.log\r
- .debug("Registering new object and returning null for getvObj2jv");\r
- return null;\r
- }\r
- if (vobj2jv.containsKey(vobj.getVorbaId()))\r
- {\r
- return vobj2jv.get(vobj.getVorbaId());\r
- }\r
- return null;\r
- }\r
-\r
- protected void bindjvvobj(Object jvobj, uk.ac.vamsas.client.Vobject vobj)\r
- {\r
- VorbaId id = vobj.getVorbaId();\r
- if (id == null)\r
- {\r
- id = cdoc.registerObject(vobj);\r
- if (id == null || vobj.getVorbaId() == null || cdoc.getObject(id)!=vobj)\r
- {\r
- Cache.log.error("Failed to get id for " +\r
- (vobj.isRegisterable() ? "registerable" :\r
- "unregisterable") + " object " + vobj);\r
- }\r
- }\r
-\r
- if (vobj2jv.containsKey(vobj.getVorbaId()) &&\r
- ! ( (VorbaId) vobj2jv.get(vobj.getVorbaId())).equals(jvobj))\r
- {\r
- Cache.log.debug("Warning? Overwriting existing vamsas id binding for " +\r
- vobj.getVorbaId(),\r
- new Exception("Overwriting vamsas id binding."));\r
- }\r
- else if (jv2vobj.containsKey(jvobj) &&\r
- ! ( (VorbaId) jv2vobj.get(jvobj)).equals(vobj.getVorbaId()))\r
- {\r
- Cache.log.debug(\r
- "Warning? Overwriting existing jalview object binding for " + jvobj,\r
- new Exception("Overwriting jalview object binding."));\r
- }\r
- /* Cache.log.error("Attempt to make conflicting object binding! "+vobj+" id " +vobj.getVorbaId()+" already bound to "+getvObj2jv(vobj)+" and "+jvobj+" already bound to "+getjv2vObj(jvobj),new Exception("Excessive call to bindjvvobj"));\r
- }*/\r
- // we just update the hash's regardless!\r
- Cache.log.debug("Binding "+vobj.getVorbaId()+" to "+jvobj);\r
- vobj2jv.put(vobj.getVorbaId(), jvobj);\r
- // JBPNote - better implementing a hybrid invertible hash.\r
- jv2vobj.put(jvobj, vobj.getVorbaId());\r
- }\r
-\r
- public DatastoreItem() {\r
- super();\r
- }\r
- public DatastoreItem(VamsasAppDatastore datastore)\r
- {\r
- this();\r
- initDatastoreItem(datastore);\r
- // TODO Auto-generated constructor stub\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
- {\r
- this.provEntry = provEntry;\r
- this.cdoc = cdoc;\r
- this.vobj2jv = vobj2jv;\r
- this.jv2vobj = jv2vobj;\r
- }\r
-\r
- protected boolean isModifiable(String modifiable)\r
- {\r
- return modifiable==null; // TODO: USE VAMSAS LIBRARY OBJECT LOCK METHODS)\r
- }\r
-\r
- protected Vector getjv2vObjs(Vector alsq)\r
- {\r
- Vector vObjs = new Vector();\r
- Enumeration elm = alsq.elements();\r
- while (elm.hasMoreElements())\r
- {\r
- vObjs.addElement(getjv2vObj(elm.nextElement()));\r
- }\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
+package jalview.io.vamsas;
+
+import jalview.bin.Cache;
+import jalview.gui.TreePanel;
+import jalview.io.VamsasAppDatastore;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.IdentityHashMap;
+import java.util.Vector;
+
+import uk.ac.vamsas.client.IClientDocument;
+import uk.ac.vamsas.client.Vobject;
+import uk.ac.vamsas.client.VorbaId;
+import uk.ac.vamsas.objects.core.Entry;
+import uk.ac.vamsas.objects.core.Provenance;
+import uk.ac.vamsas.objects.core.Seg;
+
+/**
+ * Holds all the common machinery for binding objects to vamsas objects
+ * @author JimP
+ *
+ */
+public class DatastoreItem
+{
+ /**
+ *
+ */
+ Entry provEntry = null;
+
+ IClientDocument cdoc;
+
+ Hashtable vobj2jv;
+
+ IdentityHashMap jv2vobj;
+ /**
+ * @return the Vobject bound to Jalview datamodel object
+ */
+ protected Vobject getjv2vObj(Object jvobj)
+ {
+ if (jv2vobj.containsKey(jvobj))
+ {
+ return cdoc.getObject( (VorbaId) jv2vobj.get(jvobj));
+ }
+ if (Cache.log.isDebugEnabled())
+ {
+ Cache.log.debug("Returning null VorbaID binding for jalview object "+jvobj);
+ }
+ return null;
+ }
+
+ /**
+ *
+ * @param vobj
+ * @return Jalview datamodel object bound to the vamsas document object
+ */
+ protected Object getvObj2jv(uk.ac.vamsas.client.Vobject vobj)
+ {
+ if (vobj2jv==null)
+ return null;
+ VorbaId id = vobj.getVorbaId();
+ if (id == null)
+ {
+ id = cdoc.registerObject(vobj);
+ Cache.log
+ .debug("Registering new object and returning null for getvObj2jv");
+ return null;
+ }
+ if (vobj2jv.containsKey(vobj.getVorbaId()))
+ {
+ return vobj2jv.get(vobj.getVorbaId());
+ }
+ return null;
+ }
+
+ protected void bindjvvobj(Object jvobj, uk.ac.vamsas.client.Vobject vobj)
+ {
+ VorbaId id = vobj.getVorbaId();
+ if (id == null)
+ {
+ id = cdoc.registerObject(vobj);
+ if (id == null || vobj.getVorbaId() == null || cdoc.getObject(id)!=vobj)
+ {
+ Cache.log.error("Failed to get id for " +
+ (vobj.isRegisterable() ? "registerable" :
+ "unregisterable") + " object " + vobj);
+ }
+ }
+
+ if (vobj2jv.containsKey(vobj.getVorbaId()) &&
+ ! ( (VorbaId) vobj2jv.get(vobj.getVorbaId())).equals(jvobj))
+ {
+ Cache.log.debug("Warning? Overwriting existing vamsas id binding for " +
+ vobj.getVorbaId(),
+ new Exception("Overwriting vamsas id binding."));
+ }
+ else if (jv2vobj.containsKey(jvobj) &&
+ ! ( (VorbaId) jv2vobj.get(jvobj)).equals(vobj.getVorbaId()))
+ {
+ Cache.log.debug(
+ "Warning? Overwriting existing jalview object binding for " + jvobj,
+ new Exception("Overwriting jalview object binding."));
+ }
+ /* Cache.log.error("Attempt to make conflicting object binding! "+vobj+" id " +vobj.getVorbaId()+" already bound to "+getvObj2jv(vobj)+" and "+jvobj+" already bound to "+getjv2vObj(jvobj),new Exception("Excessive call to bindjvvobj"));
+ }*/
+ // we just update the hash's regardless!
+ Cache.log.debug("Binding "+vobj.getVorbaId()+" to "+jvobj);
+ vobj2jv.put(vobj.getVorbaId(), jvobj);
+ // JBPNote - better implementing a hybrid invertible hash.
+ jv2vobj.put(jvobj, vobj.getVorbaId());
+ }
+
+ public DatastoreItem() {
+ super();
+ }
+ public DatastoreItem(VamsasAppDatastore datastore)
+ {
+ this();
+ initDatastoreItem(datastore);
+ // TODO Auto-generated constructor stub
+ }
+ VamsasAppDatastore datastore = null;
+ public void initDatastoreItem(VamsasAppDatastore ds)
+ {
+ datastore = ds;
+ initDatastoreItem(ds.getProvEntry(), ds.getClientDocument(), ds.getVamsasObjectBinding(), ds.getJvObjectBinding());
+ }
+ public void initDatastoreItem(Entry provEntry, IClientDocument cdoc, Hashtable vobj2jv, IdentityHashMap jv2vobj)
+ {
+ this.provEntry = provEntry;
+ this.cdoc = cdoc;
+ this.vobj2jv = vobj2jv;
+ this.jv2vobj = jv2vobj;
+ }
+
+ protected boolean isModifiable(String modifiable)
+ {
+ return modifiable==null; // TODO: USE VAMSAS LIBRARY OBJECT LOCK METHODS)
+ }
+
+ protected Vector getjv2vObjs(Vector alsq)
+ {
+ Vector vObjs = new Vector();
+ Enumeration elm = alsq.elements();
+ while (elm.hasMoreElements())
+ {
+ vObjs.addElement(getjv2vObj(elm.nextElement()));
+ }
+ return vObjs;
+ }
+ // utility functions
+ /**
+ * get start<end range of segment, adjusting for inclusivity flag and
+ * polarity.
+ *
+ * @param visSeg
+ * @param ensureDirection when true - always ensure start is less than end.
+ * @return int[] { start, end, direction} where direction==1 for range running from end to start.
+ */
+ public int[] getSegRange(Seg visSeg, boolean ensureDirection)
+ {
+ boolean incl = visSeg.getInclusive();
+ // adjust for inclusive flag.
+ int pol = (visSeg.getStart() <= visSeg.getEnd()) ? 1 : -1; // polarity of
+ // region.
+ int start = visSeg.getStart() + (incl ? 0 : pol);
+ int end = visSeg.getEnd() + (incl ? 0 : -pol);
+ if (ensureDirection && pol == -1)
+ {
+ // jalview doesn't deal with inverted ranges, yet.
+ int t = end;
+ end = start;
+ start = t;
+ }
+ return new int[]
+ {
+ start, end, pol < 0 ? 1 : 0};
+ }
+ /**
+ * provenance bits
+ */
+ protected jalview.datamodel.Provenance getJalviewProvenance(Provenance prov)
+ {
+ // TODO: fix App and Action entries and check use of provenance in jalview.
+ jalview.datamodel.Provenance jprov = new jalview.datamodel.Provenance();
+ for (int i = 0; i < prov.getEntryCount(); i++)
+ {
+ jprov.addEntry(prov.getEntry(i).getUser(), prov.getEntry(i).getAction(),
+ prov.getEntry(i).getDate(),
+ prov.getEntry(i).getId());
+ }
+
+ return jprov;
+ }
+
+ /**
+ *
+ * @return default initial provenance list for a Jalview created vamsas
+ * object.
+ */
+ Provenance dummyProvenance()
+ {
+ return dummyProvenance(null);
+ }
+
+ protected Entry dummyPEntry(String action)
+ {
+ Entry entry = new Entry();
+ entry.setApp(this.provEntry.getApp());
+ if (action != null)
+ {
+ entry.setAction(action);
+ }
+ else
+ {
+ entry.setAction("created.");
+ }
+ entry.setDate(new java.util.Date());
+ entry.setUser(this.provEntry.getUser());
+ return entry;
+ }
+
+ protected Provenance dummyProvenance(String action)
+ {
+ Provenance prov = new Provenance();
+ prov.addEntry(dummyPEntry(action));
+ return prov;
+ }
+
+ protected void addProvenance(Provenance p, String action)
+ {
+ p.addEntry(dummyPEntry(action));
+ }
+}