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