]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/src/org/simantics/databoard/binding/impl/UUIDBinding.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / binding / impl / UUIDBinding.java
diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/impl/UUIDBinding.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/impl/UUIDBinding.java
new file mode 100644 (file)
index 0000000..0689a9f
--- /dev/null
@@ -0,0 +1,78 @@
+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