Remove bundle extension (de)serializers
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / DeserializationFactory.java
index f459c97f5079d8e41972021a04687899e9443558..bf535b2d2aaf8acbdeefc23f66181edf31149dfc 100644 (file)
@@ -8,57 +8,62 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization;
 
+import com.google.common.collect.ImmutableMap;
 import io.netty.buffer.ByteBuf;
-
 import java.util.HashMap;
 import java.util.Map;
-
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
-import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.util.TypeToClassKey;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 
 /**
  * @author michal.polkorab
  * @author timotej.kubas
+ * @author giuseppex.petralia@intel.com
  */
 public class DeserializationFactory {
 
+    private final Map<TypeToClassKey, Class<?>> messageClassMap;
     private DeserializerRegistry registry;
-    private Map<TypeToClassKey, Class<?>> messageClassMap;
 
     /**
      * Constructor
      */
     public DeserializationFactory() {
-        messageClassMap = new HashMap<>();
-        TypeToClassMapInitializer.initializeTypeToClassMap(messageClassMap);
+        final Map<TypeToClassKey, Class<?>> temp = new HashMap<>();
+        TypeToClassMapInitializer.initializeTypeToClassMap(temp);
+
+        // Register type to class map for additional deserializers
+        TypeToClassMapInitializer.initializeAdditionalTypeToClassMap(temp);
+
+        messageClassMap = ImmutableMap.copyOf(temp);
     }
 
     /**
      * Transforms ByteBuf into correct POJO message
+     *
      * @param rawMessage
-     * @param version version decoded from OpenFlow protocol message
+     * @param version
+     *            version decoded from OpenFlow protocol message
      * @return correct POJO as DataObject
      */
-    public DataObject deserialize(ByteBuf rawMessage, short version) {
+    public DataObject deserialize(final ByteBuf rawMessage, final short version) {
         DataObject dataObject = null;
         int type = rawMessage.readUnsignedByte();
         Class<?> clazz = messageClassMap.get(new TypeToClassKey(version, type));
         rawMessage.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
-        OFDeserializer<DataObject> deserializer = registry.getDeserializer(
-                new MessageCodeKey(version, type, clazz));
-        if (deserializer != null) {
-            dataObject = deserializer.deserialize(rawMessage);
-        }
+        OFDeserializer<DataObject> deserializer = registry.getDeserializer(new MessageCodeKey(version, type, clazz));
+        dataObject = deserializer.deserialize(rawMessage);
         return dataObject;
     }
 
     /**
      * @param registry
      */
-    public void setRegistry(DeserializerRegistry registry) {
+    public void setRegistry(final DeserializerRegistry registry) {
         this.registry = registry;
     }