Extensibility support (serialization part)
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / serialization / SerializationFactory.java
index 18449f70a38096b0d89008edd63b70ff7e5a1021..d9ad3abc2ec79eb92e8a91d580b197fa604edd03 100644 (file)
@@ -10,9 +10,10 @@ package org.opendaylight.openflowjava.protocol.impl.serialization;
 
 import io.netty.buffer.ByteBuf;
 
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * @author michal.polkorab
@@ -20,22 +21,27 @@ import org.slf4j.LoggerFactory;
  */
 public class SerializationFactory {
 
-    private static final Logger LOGGER = LoggerFactory
-            .getLogger(SerializationFactory.class);
+    private SerializerRegistry registry;
+    
     /**
      * Transforms POJO message into ByteBuf
      * @param version version used for encoding received message
      * @param out ByteBuf for storing and sending transformed message
      * @param message POJO message
      */
-    public static <E extends DataObject> void messageToBuffer(short version, ByteBuf out, E message) {
-        @SuppressWarnings("unchecked")
-        MessageTypeKey<E> msgTypeKey = new MessageTypeKey<>(version, (Class<E>) message.getClass());
-        OFSerializer<E> encoder = EncoderTable.getInstance().getEncoder(msgTypeKey);
-        if (encoder != null) {
-            encoder.messageToBuffer(version, out, message);
-        } else {
-            LOGGER.warn("No correct encoder found in EncoderTable for arguments: " + msgTypeKey.toString());
+    public void messageToBuffer(short version, ByteBuf out, DataObject message) {
+        OFSerializer<DataObject> serializer = registry.getSerializer(
+                new MessageTypeKey<>(version, message.getClass()));
+        if (serializer != null) {
+            serializer.serialize(message, out);
         }
     }
+
+    /**
+     * @param serializerRegistry registry with serializers
+     */
+    public void setSerializerTable(SerializerRegistry serializerRegistry) {
+        this.registry = serializerRegistry;
+    }
+
 }