package org.simantics.databoard.tests; import java.io.IOException; import org.simantics.databoard.Bindings; import org.simantics.databoard.Datatypes; import org.simantics.databoard.binding.Binding; import org.simantics.databoard.binding.LongBinding; import org.simantics.databoard.binding.error.BindingConstructionException; import org.simantics.databoard.binding.error.BindingException; import org.simantics.databoard.binding.reflection.BindingRequest; import org.simantics.databoard.binding.reflection.BindingProvider; import org.simantics.databoard.binding.reflection.ClassBindingFactory; import org.simantics.databoard.serialization.Serializer; import org.simantics.databoard.serialization.SerializerConstructionException; public class Jotakin18 { public static class MyLongBindingFactory implements BindingProvider { MyLongBinding myLongBinding = new MyLongBinding(); public Binding provideBinding(ClassBindingFactory master, BindingRequest request) throws BindingConstructionException { if (MyLong.class.isAssignableFrom( request.getClazz() )) { return myLongBinding; } return null; } } public static class MyLongBinding extends LongBinding { public MyLongBinding() { super(Datatypes.LONG); } @Override public Object create(long value) throws BindingException { MyLong x = new MyLong(); x.setValue(value); return x; } @Override public Object create(Long value) throws BindingException { MyLong x = new MyLong(); x.setValue(value); return x; } @Override public Object create(Number value) throws BindingException { MyLong x = new MyLong(); x.setValue(value.longValue()); return x; } @Override public Object create(String value) throws BindingException { MyLong x = new MyLong(); x.setValue(Long.valueOf(value)); return x; } @Override public Long getValue(Object o) throws BindingException { MyLong x = (MyLong) o; return x.getValue(); } @Override public long getValue_(Object o) throws BindingException { MyLong x = (MyLong) o; return x.getValue(); } @Override public void setValue(Object obj, Number value) throws BindingException { throw new BindingException("Resource is immutable"); } @Override public void setValue(Object obj, long value) throws BindingException { throw new BindingException("Resource is immutable"); } @Override public boolean isImmutable() { return true; } @Override public boolean isInstance(Object obj) { return obj instanceof MyLong; } } public static class XXX { public MyLong x; public long z; private long y; public long getY() { return y; } public void setY(long y) { this.y = y; } } public static class MyLong { private long value; public long getValue() { return value; } public void setValue(long value) { this.value = value; } } public static void main(String[] args) throws SerializerConstructionException, BindingConstructionException, IOException { Bindings.databoard.addBindingFactory( new MyLongBindingFactory() ); XXX x = new XXX(); x.x = new MyLong(); Binding b = Bindings.databoard.getBinding(XXX.class); Serializer s = Bindings.getSerializer(b); byte[] data = s.serialize(x); s.deserialize(data); } }