--- /dev/null
+package org.simantics.databoard.binding.impl;\r
+\r
+import java.util.UUID;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.Datatypes;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.binding.RecordBinding;\r
+import org.simantics.databoard.binding.error.BindingException;\r
+import org.simantics.databoard.type.Component;\r
+import org.simantics.databoard.type.Datatype;\r
+import org.simantics.databoard.type.RecordType;\r
+\r
+public class UUIDBinding extends RecordBinding {\r
+\r
+ public static final Datatype UUIDType;\r
+ \r
+ public UUIDBinding() {\r
+ componentBindings = new Binding[2];\r
+ componentBindings[0] = Bindings.getBindingUnchecked(Long.class);\r
+ componentBindings[1] = Bindings.getBindingUnchecked(Long.class);\r
+ type = UUIDType;\r
+ }\r
+\r
+ @Override\r
+ public Object create(Object... value) {\r
+ return new UUID((Long)value[0], (Long)value[1]);\r
+ }\r
+\r
+ @Override\r
+ public Object getComponent(Object obj, int index) {\r
+ UUID uuid = (UUID) obj;\r
+ switch (index) {\r
+ case 0: return uuid.getMostSignificantBits();\r
+ case 1: return uuid.getLeastSignificantBits();\r
+ default: throw new IllegalArgumentException("index out of range, expected 0..3, got "+index);\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public Object createPartial() throws BindingException {\r
+ return new UUID(0, 0);\r
+ }\r
+\r
+ @Override\r
+ public void setComponents(Object obj, Object... value) throws BindingException {\r
+ throw new BindingException("Cannot change immutable UUID");\r
+ }\r
+ \r
+ @Override\r
+ public void setComponent(Object obj, int index, Object value)\r
+ throws BindingException {\r
+ throw new BindingException("Cannot change immutable UUID");\r
+ }\r
+\r
+ @Override\r
+ public boolean isInstance(Object obj) {\r
+ return obj instanceof UUID;\r
+ }\r
+ \r
+ @Override\r
+ public long getLong(Object r, int index) throws BindingException {\r
+ UUID uuid = (UUID) r;\r
+ switch (index) {\r
+ case 0: return uuid.getMostSignificantBits();\r
+ case 1: return uuid.getLeastSignificantBits();\r
+ default: throw new IllegalArgumentException("index out of range, expected 0..3, got "+index);\r
+ }\r
+ }\r
+\r
+ static {\r
+ Component c1 = new Component("mostSigBits", Datatypes.LONG);\r
+ Component c2 = new Component("leastSigBits", Datatypes.LONG);\r
+ UUIDType = new RecordType(false, c1, c2);\r
+ }\r
+ \r
+} \r
+\r