X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Fbinding%2Fmutable%2FUnionTaggedObjectBinding.java;fp=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Fbinding%2Fmutable%2FUnionTaggedObjectBinding.java;h=6dd4cdcd492cdd1ab14bba863e437125a2cd815e;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/mutable/UnionTaggedObjectBinding.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/mutable/UnionTaggedObjectBinding.java new file mode 100644 index 000000000..6dd4cdcd4 --- /dev/null +++ b/bundles/org.simantics.databoard/src/org/simantics/databoard/binding/mutable/UnionTaggedObjectBinding.java @@ -0,0 +1,57 @@ +package org.simantics.databoard.binding.mutable; + +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.binding.UnionBinding; +import org.simantics.databoard.binding.error.BindingException; +import org.simantics.databoard.type.UnionType; + +/** + * Binds UnionType to TaggedObject.class + * + * @author Toni Kalajainen + */ +public class UnionTaggedObjectBinding extends UnionBinding { + + public UnionTaggedObjectBinding(UnionType type, Binding[] componentBindings) + { + this.componentBindings = componentBindings; + if (type==null) throw new IllegalArgumentException("null arg"); + this.type = type; + } + + @Override + public Object create(int tag, Object value) { + TaggedObject result = new TaggedObject(); + result.tag = tag; + result.value = value; + return result; + } + + @Override + public void setValue(Object union, int tag, Object value) + throws BindingException { + TaggedObject result = (TaggedObject)union; + result.tag = tag; + result.value = value; + } + + @Override + public int getTag(Object obj) throws BindingException { + if (!isInstance(obj)) throw new BindingException("Unexpected class "+obj.getClass().getSimpleName()+", TaggedObject expected"); + TaggedObject to = (TaggedObject) obj; + return to.tag; + } + + @Override + public Object getValue(Object obj) throws BindingException { + if (!isInstance(obj)) throw new BindingException("Unexpected class "+obj.getClass().getSimpleName()+", TaggedObject expected"); + TaggedObject to = (TaggedObject) obj; + return to.value; + } + + @Override + public boolean isInstance(Object obj) { + return obj instanceof TaggedObject; + } + +}