X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Fbinding%2Fimpl%2FUUIDBinding.java;fp=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Fbinding%2Fimpl%2FUUIDBinding.java;h=0689a9fd1d3b749a70916cde078531f2939ff92a;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git 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 index 000000000..0689a9fd1 --- /dev/null +++ b/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/impl/UUIDBinding.java @@ -0,0 +1,78 @@ +package org.simantics.databoard.binding.impl; + +import java.util.UUID; + +import org.simantics.databoard.Bindings; +import org.simantics.databoard.Datatypes; +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.binding.RecordBinding; +import org.simantics.databoard.binding.error.BindingException; +import org.simantics.databoard.type.Component; +import org.simantics.databoard.type.Datatype; +import org.simantics.databoard.type.RecordType; + +public class UUIDBinding extends RecordBinding { + + public static final Datatype UUIDType; + + public UUIDBinding() { + componentBindings = new Binding[2]; + componentBindings[0] = Bindings.getBindingUnchecked(Long.class); + componentBindings[1] = Bindings.getBindingUnchecked(Long.class); + type = UUIDType; + } + + @Override + public Object create(Object... value) { + return new UUID((Long)value[0], (Long)value[1]); + } + + @Override + public Object getComponent(Object obj, int index) { + UUID uuid = (UUID) obj; + switch (index) { + case 0: return uuid.getMostSignificantBits(); + case 1: return uuid.getLeastSignificantBits(); + default: throw new IllegalArgumentException("index out of range, expected 0..3, got "+index); + } + } + + @Override + public Object createPartial() throws BindingException { + return new UUID(0, 0); + } + + @Override + public void setComponents(Object obj, Object... value) throws BindingException { + throw new BindingException("Cannot change immutable UUID"); + } + + @Override + public void setComponent(Object obj, int index, Object value) + throws BindingException { + throw new BindingException("Cannot change immutable UUID"); + } + + @Override + public boolean isInstance(Object obj) { + return obj instanceof UUID; + } + + @Override + public long getLong(Object r, int index) throws BindingException { + UUID uuid = (UUID) r; + switch (index) { + case 0: return uuid.getMostSignificantBits(); + case 1: return uuid.getLeastSignificantBits(); + default: throw new IllegalArgumentException("index out of range, expected 0..3, got "+index); + } + } + + static { + Component c1 = new Component("mostSigBits", Datatypes.LONG); + Component c2 = new Component("leastSigBits", Datatypes.LONG); + UUIDType = new RecordType(false, c1, c2); + } + +} +