X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflow-protocol-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fimpl%2Fdeserialization%2FDeserializationFactory.java;h=bf535b2d2aaf8acbdeefc23f66181edf31149dfc;hb=ce9898d3e25c7cecae6a21290be1eb3c74061737;hp=f459c97f5079d8e41972021a04687899e9443558;hpb=e1c384c30000127fd6b266d90471a996ffa5bd83;p=openflowjava.git diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/DeserializationFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/DeserializationFactory.java index f459c97f..bf535b2d 100644 --- a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/DeserializationFactory.java +++ b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/DeserializationFactory.java @@ -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> messageClassMap; private DeserializerRegistry registry; - private Map> messageClassMap; /** * Constructor */ public DeserializationFactory() { - messageClassMap = new HashMap<>(); - TypeToClassMapInitializer.initializeTypeToClassMap(messageClassMap); + final Map> 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 deserializer = registry.getDeserializer( - new MessageCodeKey(version, type, clazz)); - if (deserializer != null) { - dataObject = deserializer.deserialize(rawMessage); - } + OFDeserializer 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; }