BUG-4283: experimenter msg support - deserialization part
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / ExperimenterMessageFactory.java
index 269976ffa7da4db72c40b4fdd5e77f49139c7128..244b4bfa1a3a6f2d18cc6ecc7f7a0230fcb25718 100644 (file)
@@ -9,13 +9,15 @@
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
 import io.netty.buffer.ByteBuf;
-
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.util.ExperimenterDeserializerKeyFactory;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessageBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
 
 /**
  * @author michal.polkorab
@@ -24,17 +26,26 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 public class ExperimenterMessageFactory implements OFDeserializer<ExperimenterMessage>,
         DeserializerRegistryInjector {
 
-    /** Experimenter ID index after version, message type and length were read */
-    private static final byte EXPERIMENTER_ID_INDEX = 4;
     private DeserializerRegistry deserializerRegistry;
 
     @Override
     public ExperimenterMessage deserialize(ByteBuf message) {
-        long expId = message.getUnsignedInt(message.readerIndex() + EXPERIMENTER_ID_INDEX);
-        OFDeserializer<ExperimenterMessage> deserializer = deserializerRegistry.getDeserializer(
+        final long xid = message.readUnsignedInt();
+        final long expId = message.readUnsignedInt();
+        final long expType = message.readUnsignedInt();
+
+        OFDeserializer<ExperimenterDataOfChoice> deserializer = deserializerRegistry.getDeserializer(
                 ExperimenterDeserializerKeyFactory.createExperimenterMessageDeserializerKey(
-                        EncodeConstants.OF13_VERSION_ID, expId));
-        return deserializer.deserialize(message);
+                        EncodeConstants.OF13_VERSION_ID, expId, expType));
+        final ExperimenterDataOfChoice vendorData = deserializer.deserialize(message);
+
+        ExperimenterMessageBuilder messageBld = new ExperimenterMessageBuilder()
+                .setVersion((short) EncodeConstants.OF13_VERSION_ID)
+                .setXid(xid)
+                .setExperimenter(new ExperimenterId(expId))
+                .setExpType(expType)
+                .setExperimenterDataOfChoice(vendorData);
+        return messageBld.build();
     }
 
     @Override