1 package org.simantics.databoard.binding.impl;
\r
3 import java.util.UUID;
\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
14 public class UUIDBinding extends RecordBinding {
\r
16 public static final Datatype UUIDType;
\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
26 public Object create(Object... value) {
\r
27 return new UUID((Long)value[0], (Long)value[1]);
\r
31 public Object getComponent(Object obj, int index) {
\r
32 UUID uuid = (UUID) obj;
\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
41 public Object createPartial() throws BindingException {
\r
42 return new UUID(0, 0);
\r
46 public void setComponents(Object obj, Object... value) throws BindingException {
\r
47 throw new BindingException("Cannot change immutable UUID");
\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
57 public boolean isInstance(Object obj) {
\r
58 return obj instanceof UUID;
\r
62 public long getLong(Object r, int index) throws BindingException {
\r
63 UUID uuid = (UUID) r;
\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
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