--- /dev/null
+package org.simantics.db.layer0.variable;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.adapter.AdaptException;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.type.Datatype;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+\r
+/**\r
+ * A default implementation of value accessor that has fixed binding.\r
+ */\r
+public abstract class ValueAccessorWithBinding implements ValueAccessor {\r
+\r
+ public abstract Binding getBinding();\r
+ \r
+ @Override\r
+ public Object getValue(ReadGraph graph, Variable context, Binding binding)\r
+ throws DatabaseException {\r
+ try {\r
+ return Bindings.adapt(getValue(graph, context), getBinding(), binding);\r
+ } catch (AdaptException e) {\r
+ throw new DatabaseException(e);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public void setValue(WriteGraph graph, Variable context, Object value,\r
+ Binding binding) throws DatabaseException {\r
+ try {\r
+ setValue(graph, context, Bindings.adapt(value, binding, getBinding()));\r
+ } catch (AdaptException e) {\r
+ throw new DatabaseException(e);\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public Datatype getDatatype(ReadGraph graph, Variable context) throws DatabaseException {\r
+ return getBinding().type();\r
+ }\r
+}\r