vamsas-client-1.2 schema (mappings and Treenodes) and begun refactoring object bindin...
[jalview.git] / src / jalview / io / vamsas / DatastoreItem.java
1 package jalview.io.vamsas;\r
2 \r
3 import jalview.bin.Cache;\r
4 import jalview.gui.TreePanel;\r
5 import jalview.io.VamsasAppDatastore;\r
6 \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
11 \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
16 \r
17 /**\r
18  * Holds all the common machinery for binding objects to vamsas objects\r
19  * @author JimP\r
20  *\r
21  */\r
22 public class DatastoreItem\r
23 {\r
24   /**\r
25    * \r
26    */\r
27   Entry provEntry = null;\r
28 \r
29   IClientDocument cdoc;\r
30 \r
31   Hashtable vobj2jv;\r
32 \r
33   IdentityHashMap jv2vobj;\r
34   /**\r
35    * @return the Vobject bound to Jalview datamodel object\r
36    */\r
37   protected Vobject getjv2vObj(Object jvobj)\r
38   {\r
39     if (jv2vobj.containsKey(jvobj))\r
40     {\r
41       return cdoc.getObject( (VorbaId) jv2vobj.get(jvobj));\r
42     }\r
43     if (Cache.log.isDebugEnabled())\r
44     {\r
45       Cache.log.debug("Returning null VorbaID binding for jalview object "+jvobj);\r
46     }\r
47     return null;\r
48   }\r
49 \r
50   /**\r
51    *\r
52    * @param vobj\r
53    * @return Jalview datamodel object bound to the vamsas document object\r
54    */\r
55   protected Object getvObj2jv(uk.ac.vamsas.client.Vobject vobj)\r
56   {\r
57     VorbaId id = vobj.getVorbaId();\r
58     if (id == null)\r
59     {\r
60       id = cdoc.registerObject(vobj);\r
61       Cache.log\r
62           .debug("Registering new object and returning null for getvObj2jv");\r
63       return null;\r
64     }\r
65     if (vobj2jv.containsKey(vobj.getVorbaId()))\r
66     {\r
67       return vobj2jv.get(vobj.getVorbaId());\r
68     }\r
69     return null;\r
70   }\r
71 \r
72   protected void bindjvvobj(Object jvobj, uk.ac.vamsas.client.Vobject vobj)\r
73   {\r
74     VorbaId id = vobj.getVorbaId();\r
75     if (id == null)\r
76     {\r
77       id = cdoc.registerObject(vobj);\r
78       if (id == null || vobj.getVorbaId() == null || cdoc.getObject(id)!=vobj)\r
79       {\r
80         Cache.log.error("Failed to get id for " +\r
81                         (vobj.isRegisterable() ? "registerable" :\r
82                          "unregisterable") + " object " + vobj);\r
83       }\r
84     }\r
85 \r
86     if (vobj2jv.containsKey(vobj.getVorbaId()) &&\r
87         ! ( (VorbaId) vobj2jv.get(vobj.getVorbaId())).equals(jvobj))\r
88     {\r
89       Cache.log.debug("Warning? Overwriting existing vamsas id binding for " +\r
90                       vobj.getVorbaId(),\r
91                       new Exception("Overwriting vamsas id binding."));\r
92     }\r
93     else if (jv2vobj.containsKey(jvobj) &&\r
94              ! ( (VorbaId) jv2vobj.get(jvobj)).equals(vobj.getVorbaId()))\r
95     {\r
96       Cache.log.debug(\r
97           "Warning? Overwriting existing jalview object binding for " + jvobj,\r
98           new Exception("Overwriting jalview object binding."));\r
99     }\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
101          }*/\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
107   }\r
108 \r
109   public DatastoreItem() {\r
110     super();\r
111   }\r
112   public DatastoreItem(VamsasAppDatastore datastore)\r
113   {\r
114     this();\r
115     initDatastoreItem(datastore);\r
116     // TODO Auto-generated constructor stub\r
117   }\r
118 \r
119   public void initDatastoreItem(VamsasAppDatastore ds)\r
120   {\r
121     initDatastoreItem(ds.getProvEntry(), ds.getClientDocument(), ds.getVamsasObjectBinding(), ds.getJvObjectBinding());\r
122   }\r
123   public void initDatastoreItem(Entry provEntry, IClientDocument cdoc, Hashtable vobj2jv, IdentityHashMap jv2vobj)\r
124   {\r
125     this.provEntry = provEntry;\r
126     this.cdoc = cdoc;\r
127     this.vobj2jv = vobj2jv;\r
128     this.jv2vobj = jv2vobj;\r
129   }\r
130 \r
131   protected boolean isModifiable(String modifiable)\r
132   {\r
133     return modifiable==null; // TODO: USE VAMSAS LIBRARY OBJECT LOCK METHODS)\r
134   }\r
135 \r
136   protected Vector getjv2vObjs(Vector alsq)\r
137   {\r
138     Vector vObjs = new Vector();\r
139     Enumeration elm = alsq.elements();\r
140     while (elm.hasMoreElements())\r
141     {\r
142       vObjs.addElement(getjv2vObj(elm.nextElement()));\r
143     }\r
144     return vObjs;\r
145   }\r
146 }\r