]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.databoard.binding.impl;\r
2 \r
3 import java.util.UUID;\r
4 \r
5 import org.simantics.databoard.Bindings;\r
6 import org.simantics.databoard.Datatypes;\r
7 import org.simantics.databoard.binding.Binding;\r
8 import org.simantics.databoard.binding.RecordBinding;\r
9 import org.simantics.databoard.binding.error.BindingException;\r
10 import org.simantics.databoard.type.Component;\r
11 import org.simantics.databoard.type.Datatype;\r
12 import org.simantics.databoard.type.RecordType;\r
13 \r
14 public class UUIDBinding extends RecordBinding {\r
15 \r
16         public static final Datatype UUIDType;\r
17         \r
18         public UUIDBinding() {\r
19                 componentBindings = new Binding[2];\r
20                 componentBindings[0] = Bindings.getBindingUnchecked(Long.class);\r
21                 componentBindings[1] = Bindings.getBindingUnchecked(Long.class);\r
22                 type = UUIDType;\r
23         }\r
24 \r
25         @Override\r
26         public Object create(Object... value) {\r
27                 return new UUID((Long)value[0], (Long)value[1]);\r
28         }\r
29 \r
30         @Override\r
31         public Object getComponent(Object obj, int index) {\r
32                 UUID uuid = (UUID) obj;\r
33                 switch (index) {\r
34                 case 0: return uuid.getMostSignificantBits();\r
35                 case 1: return uuid.getLeastSignificantBits();\r
36                 default: throw new IllegalArgumentException("index out of range, expected 0..3, got "+index);\r
37                 }\r
38         }\r
39 \r
40         @Override\r
41         public Object createPartial() throws BindingException {\r
42                 return new UUID(0, 0);\r
43         }\r
44 \r
45         @Override\r
46         public void setComponents(Object obj, Object... value) throws BindingException {\r
47                 throw new BindingException("Cannot change immutable UUID");\r
48         }\r
49         \r
50         @Override\r
51         public void setComponent(Object obj, int index, Object value)\r
52                         throws BindingException {\r
53                 throw new BindingException("Cannot change immutable UUID");\r
54         }\r
55 \r
56         @Override\r
57         public boolean isInstance(Object obj) {\r
58                 return obj instanceof UUID;\r
59         }\r
60         \r
61         @Override\r
62         public long getLong(Object r, int index) throws BindingException {\r
63                 UUID uuid = (UUID) r;\r
64                 switch (index) {\r
65                         case 0: return uuid.getMostSignificantBits();\r
66                         case 1: return uuid.getLeastSignificantBits();\r
67                         default: throw new IllegalArgumentException("index out of range, expected 0..3, got "+index);\r
68                 }\r
69         }\r
70 \r
71         static {\r
72                 Component c1 = new Component("mostSigBits", Datatypes.LONG);\r
73                 Component c2 = new Component("leastSigBits", Datatypes.LONG);\r
74                 UUIDType = new RecordType(false, c1, c2);\r
75         }\r
76         \r
77 }       \r
78 \r