]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/src/org/simantics/databoard/Bindings.java
Fixing several binding-related bugs
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / Bindings.java
index 138ca5c058970908ba96fdbbb76557503c0a9468..b1f53d0b611bb542197cdf7bb299b60a3438149b 100644 (file)
@@ -8,6 +8,7 @@
  *
  *  Contributors:
  *      VTT Technical Research Centre of Finland - initial API and implementation
+ *      Semantum Oy - gitlab #313
  *******************************************************************************/
 package org.simantics.databoard;
 
@@ -71,7 +72,7 @@ import org.simantics.databoard.binding.reflection.VoidBinding;
 import org.simantics.databoard.serialization.RuntimeSerializerConstructionException;
 import org.simantics.databoard.serialization.Serializer;
 import org.simantics.databoard.serialization.SerializerConstructionException;
-import org.simantics.databoard.serialization.SerializerFactory;
+import org.simantics.databoard.serialization.SerializerScheme;
 import org.simantics.databoard.type.ArrayType;
 import org.simantics.databoard.type.Datatype;
 import org.simantics.databoard.util.DataValueUtil;
@@ -112,7 +113,7 @@ public class Bindings {
     public static final ClassBindingFactory             classBindingFactory;
 
     /** Serializer Factory */
-    public static final SerializerFactory               serializationFactory;
+    public static final SerializerScheme                serializationFactory;
 
     /** Adapter Factory */
        public static final AdapterFactory               adapterFactory;
@@ -500,7 +501,7 @@ public class Bindings {
         * @throws SerializerConstructionException
         */
        public static Serializer getSerializer(Binding binding) throws SerializerConstructionException {
-               return serializationFactory.construct(binding);
+               return serializationFactory.getSerializer(binding);
        }
 
        /**
@@ -511,11 +512,7 @@ public class Bindings {
         * @throws RuntimeSerializerConstructionException
         */
        public static Serializer getSerializerUnchecked(Binding binding) throws RuntimeSerializerConstructionException {
-               try {
-                       return serializationFactory.construct(binding);
-               } catch (SerializerConstructionException e) {
-                       throw new RuntimeSerializerConstructionException(e);
-               }
+               return serializationFactory.getSerializerUnchecked(binding);
        }
 
        /**
@@ -528,7 +525,7 @@ public class Bindings {
        public static Serializer getSerializer(Class<?> clazz) throws SerializerConstructionException {
                try {
                        Binding binding = getBinding(clazz);
-                       return serializationFactory.construct(binding);
+                       return serializationFactory.getSerializer(binding);
                } catch (BindingConstructionException e) {
                        throw new SerializerConstructionException( e );
                }
@@ -544,9 +541,7 @@ public class Bindings {
        public static Serializer getSerializerUnchecked(Class<?> clazz) throws RuntimeSerializerConstructionException {
                try {
                        Binding binding = getBinding(clazz);
-                       return serializationFactory.construct(binding);
-               } catch (SerializerConstructionException e) {
-                       throw new RuntimeSerializerConstructionException(e);
+                       return serializationFactory.getSerializerUnchecked(binding);
                } catch (BindingConstructionException e) {
                        throw new RuntimeSerializerConstructionException( new SerializerConstructionException(e) );
                }
@@ -892,7 +887,14 @@ public class Bindings {
        
        databoard.initialize();
        
-               DATATYPE = getBindingUnchecked(Datatype.class);
+        DATATYPE = getBindingUnchecked(Datatype.class);
+        /**
+         * {@link Datatype} class has annotations but it can be considered a "class
+         * request" as it is a fundamental building block of Databoard and it has a
+         * fixed structure. Therefore {@link BindingRepository#classMap} is allowed
+         * to contain a cached Datatype.class -> Binding mapping.
+         */
+        bindingRepository.registerClassMapping(Datatype.class, DATATYPE);
     }
 
 }