1 package jalview.io.vamsas;
\r
3 import jalview.bin.Cache;
\r
4 import jalview.gui.TreePanel;
\r
5 import jalview.io.VamsasAppDatastore;
\r
7 import java.util.Enumeration;
\r
8 import java.util.Hashtable;
\r
9 import java.util.IdentityHashMap;
\r
10 import java.util.Vector;
\r
12 import uk.ac.vamsas.client.IClientDocument;
\r
13 import uk.ac.vamsas.client.Vobject;
\r
14 import uk.ac.vamsas.client.VorbaId;
\r
15 import uk.ac.vamsas.objects.core.Entry;
\r
18 * Holds all the common machinery for binding objects to vamsas objects
\r
22 public class DatastoreItem
\r
27 Entry provEntry = null;
\r
29 IClientDocument cdoc;
\r
33 IdentityHashMap jv2vobj;
\r
35 * @return the Vobject bound to Jalview datamodel object
\r
37 protected Vobject getjv2vObj(Object jvobj)
\r
39 if (jv2vobj.containsKey(jvobj))
\r
41 return cdoc.getObject( (VorbaId) jv2vobj.get(jvobj));
\r
43 if (Cache.log.isDebugEnabled())
\r
45 Cache.log.debug("Returning null VorbaID binding for jalview object "+jvobj);
\r
53 * @return Jalview datamodel object bound to the vamsas document object
\r
55 protected Object getvObj2jv(uk.ac.vamsas.client.Vobject vobj)
\r
57 VorbaId id = vobj.getVorbaId();
\r
60 id = cdoc.registerObject(vobj);
\r
62 .debug("Registering new object and returning null for getvObj2jv");
\r
65 if (vobj2jv.containsKey(vobj.getVorbaId()))
\r
67 return vobj2jv.get(vobj.getVorbaId());
\r
72 protected void bindjvvobj(Object jvobj, uk.ac.vamsas.client.Vobject vobj)
\r
74 VorbaId id = vobj.getVorbaId();
\r
77 id = cdoc.registerObject(vobj);
\r
78 if (id == null || vobj.getVorbaId() == null || cdoc.getObject(id)!=vobj)
\r
80 Cache.log.error("Failed to get id for " +
\r
81 (vobj.isRegisterable() ? "registerable" :
\r
82 "unregisterable") + " object " + vobj);
\r
86 if (vobj2jv.containsKey(vobj.getVorbaId()) &&
\r
87 ! ( (VorbaId) vobj2jv.get(vobj.getVorbaId())).equals(jvobj))
\r
89 Cache.log.debug("Warning? Overwriting existing vamsas id binding for " +
\r
91 new Exception("Overwriting vamsas id binding."));
\r
93 else if (jv2vobj.containsKey(jvobj) &&
\r
94 ! ( (VorbaId) jv2vobj.get(jvobj)).equals(vobj.getVorbaId()))
\r
97 "Warning? Overwriting existing jalview object binding for " + jvobj,
\r
98 new Exception("Overwriting jalview object binding."));
\r
100 /* 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
102 // we just update the hash's regardless!
\r
103 Cache.log.debug("Binding "+vobj.getVorbaId()+" to "+jvobj);
\r
104 vobj2jv.put(vobj.getVorbaId(), jvobj);
\r
105 // JBPNote - better implementing a hybrid invertible hash.
\r
106 jv2vobj.put(jvobj, vobj.getVorbaId());
\r
109 public DatastoreItem() {
\r
112 public DatastoreItem(VamsasAppDatastore datastore)
\r
115 initDatastoreItem(datastore);
\r
116 // TODO Auto-generated constructor stub
\r
119 public void initDatastoreItem(VamsasAppDatastore ds)
\r
121 initDatastoreItem(ds.getProvEntry(), ds.getClientDocument(), ds.getVamsasObjectBinding(), ds.getJvObjectBinding());
\r
123 public void initDatastoreItem(Entry provEntry, IClientDocument cdoc, Hashtable vobj2jv, IdentityHashMap jv2vobj)
\r
125 this.provEntry = provEntry;
\r
127 this.vobj2jv = vobj2jv;
\r
128 this.jv2vobj = jv2vobj;
\r
131 protected boolean isModifiable(String modifiable)
\r
133 return modifiable==null; // TODO: USE VAMSAS LIBRARY OBJECT LOCK METHODS)
\r
136 protected Vector getjv2vObjs(Vector alsq)
\r
138 Vector vObjs = new Vector();
\r
139 Enumeration elm = alsq.elements();
\r
140 while (elm.hasMoreElements())
\r
142 vObjs.addElement(getjv2vObj(elm.nextElement()));
\r