1 package org.simantics.databoard.binding.impl;
5 import org.simantics.databoard.Bindings;
6 import org.simantics.databoard.Datatypes;
7 import org.simantics.databoard.binding.Binding;
8 import org.simantics.databoard.binding.RecordBinding;
9 import org.simantics.databoard.binding.error.BindingException;
10 import org.simantics.databoard.type.Component;
11 import org.simantics.databoard.type.Datatype;
12 import org.simantics.databoard.type.RecordType;
14 public class UUIDBinding extends RecordBinding {
16 public static final Datatype UUIDType;
18 public UUIDBinding() {
19 componentBindings = new Binding[2];
20 componentBindings[0] = Bindings.getBindingUnchecked(Long.class);
21 componentBindings[1] = Bindings.getBindingUnchecked(Long.class);
26 public Object create(Object... value) {
27 return new UUID((Long)value[0], (Long)value[1]);
31 public Object getComponent(Object obj, int index) {
32 UUID uuid = (UUID) obj;
34 case 0: return uuid.getMostSignificantBits();
35 case 1: return uuid.getLeastSignificantBits();
36 default: throw new IllegalArgumentException("index out of range, expected 0..3, got "+index);
41 public Object createPartial() throws BindingException {
42 return new UUID(0, 0);
46 public void setComponents(Object obj, Object... value) throws BindingException {
47 throw new BindingException("Cannot change immutable UUID");
51 public void setComponent(Object obj, int index, Object value)
52 throws BindingException {
53 throw new BindingException("Cannot change immutable UUID");
57 public boolean isInstance(Object obj) {
58 return obj instanceof UUID;
62 public long getLong(Object r, int index) throws BindingException {
65 case 0: return uuid.getMostSignificantBits();
66 case 1: return uuid.getLeastSignificantBits();
67 default: throw new IllegalArgumentException("index out of range, expected 0..3, got "+index);
72 Component c1 = new Component("mostSigBits", Datatypes.LONG);
73 Component c2 = new Component("leastSigBits", Datatypes.LONG);
74 UUIDType = new RecordType(false, c1, c2);