Bug 2756 - Match model update
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / util / OF13MatchSerializer.java
index e2196daf12377cff9621fa80720e88391c7e28ef..32ecb5de7f058c174b81d2129e7c693625e14625 100644 (file)
@@ -12,16 +12,17 @@ import io.netty.buffer.ByteBuf;
 
 import java.util.List;
 
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageTypeKey;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
-import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
+import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.oxm.container.match.entry.value.ExperimenterIdCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.StandardMatchType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ExperimenterClass;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -46,13 +47,13 @@ public class OF13MatchSerializer implements OFSerializer<Match>, SerializerRegis
         serializeType(match, outBuffer);
         int matchLengthIndex = outBuffer.writerIndex();
         outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);
-        serializeMatchEntries(match.getMatchEntries(), outBuffer);
+        serializeMatchEntries(match.getMatchEntry(), outBuffer);
         // Length of ofp_match (excluding padding)
         int matchLength = outBuffer.writerIndex() - matchStartIndex;
         outBuffer.setShort(matchLengthIndex, matchLength);
         int paddingRemainder = matchLength % EncodeConstants.PADDING;
         if (paddingRemainder != 0) {
-            ByteBufUtils.padBuffer(EncodeConstants.PADDING - paddingRemainder, outBuffer);
+            outBuffer.writeZero(EncodeConstants.PADDING - paddingRemainder);
         }
     }
 
@@ -69,15 +70,22 @@ public class OF13MatchSerializer implements OFSerializer<Match>, SerializerRegis
      * @param matchEntries list of match entries (oxm_fields)
      * @param out output ByteBuf
      */
-    public void serializeMatchEntries(List<MatchEntries> matchEntries, ByteBuf out) {
+    public void serializeMatchEntries(List<MatchEntry> matchEntries, ByteBuf out) {
         if (matchEntries == null) {
             LOGGER.debug("Match entries are null");
             return;
         }
-        for (MatchEntries entry : matchEntries) {
-            OFSerializer<MatchEntries> entrySerializer = registry.getSerializer(
-                    new EnhancedMessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(),
-                            entry.getOxmMatchField()));
+        for (MatchEntry entry : matchEntries) {
+
+            MatchEntrySerializerKey<?, ?> key = new MatchEntrySerializerKey<>(
+                    EncodeConstants.OF13_VERSION_ID, entry.getOxmClass(), entry.getOxmMatchField());
+            if (entry.getOxmClass().equals(ExperimenterClass.class)) {
+                ExperimenterIdCase entryValue = (ExperimenterIdCase) entry.getMatchEntryValue();
+                key.setExperimenterId(entryValue.getExperimenter().getExperimenter().getValue());
+            } else {
+                key.setExperimenterId(null);
+            }
+            OFSerializer<MatchEntry> entrySerializer = registry.getSerializer(key);
             entrySerializer.serialize(entry, out);
         }
     }