]> 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 266391fa98eb340bcdff6e47b956e5777ccb31a8..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;
@@ -134,7 +135,8 @@ public class Bindings {
        public static final VariantBinding STR_VARIANT;         // java.lang.String ( as variant )
        
        public static final Binding        VOID;            // void ( as {} )
-       public static final Binding        BEAN;            // Bean ( as variant )                      
+       public static final Binding        BEAN;            // Bean ( as variant )
+       public static final Binding        DATATYPE;        // org.simantics.databoard.type.Datatype
 
        public static final ArrayBinding   BOOLEAN_ARRAY;       // boolean[]    
        public static final ArrayBinding   BYTE_ARRAY;          // byte[]
@@ -499,7 +501,7 @@ public class Bindings {
         * @throws SerializerConstructionException
         */
        public static Serializer getSerializer(Binding binding) throws SerializerConstructionException {
-               return serializationFactory.construct(binding);
+               return serializationFactory.getSerializer(binding);
        }
 
        /**
@@ -510,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);
        }
 
        /**
@@ -527,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 );
                }
@@ -543,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) );
                }
@@ -890,7 +886,16 @@ public class Bindings {
        OBJECT                           = databoard.OBJECT;
        
        databoard.initialize();
+       
+        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);
     }
-    
+
 }