InstructionSerializer split into separate serializers 53/6553/2
authorMichal Polkorab <michal.polkorab@pantheon.sk>
Mon, 28 Apr 2014 08:49:18 +0000 (10:49 +0200)
committerMichal Polkorab <michal.polkorab@pantheon.sk>
Wed, 30 Apr 2014 10:44:20 +0000 (12:44 +0200)
 - updated initialization of default Action and Instruction experimenter serializers
 - CodingUtils replaced by ListSerializer
 - added EnhancedTypeKeyMaker classes to create lookup keys
 - added InstructionConstants
 - updated unit tests

Signed-off-by: Michal Polkorab <michal.polkorab@pantheon.sk>
Change-Id: If27b8273aadc84ec93e90fbb08326cf7baeb3645

30 files changed:
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/ActionsInitializer.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/DefaultExperimenterInitializer.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/SerializerRegistryImpl.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/experimenters/OF13ExperimenterInstructionSerializer.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/FlowModInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GroupModInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartRequestInputFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/OF10FlowModInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/OF10PacketOutInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/PacketOutInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/AbstractActionInstructionSerializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/AbstractInstructionSerializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/ApplyActionsInstructionSerializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/ClearActionsInstructionSerializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/GoToTableInstructionSerializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/MeterInstructionSerializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/WriteActionsInstructionSerializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/WriteMetadataInstructionSerializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/AbstractEnhancedTypeKeyMaker.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/CodingUtils.java [deleted file]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/EnhancedTypeKeyMaker.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/EnhancedTypeKeyMakerFactory.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/InstructionConstants.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/InstructionsInitializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/ListSerializer.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/OF13InstructionsSerializer.java [deleted file]
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/FlowModInputMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/util/OF10ActionsSerializerTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/util/OF13ActionsSerializerTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/util/OF13InstructionsSerializerTest.java

index 535bedfeb06ffe5ca8eef3d2b390138ff87c7b03..789f0b6bc19dc3a910baf2eb14224c3c25cc12f8 100644 (file)
@@ -36,8 +36,6 @@ import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF13SetF
 import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF13SetMplsTtlActionSerializer;\r
 import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF13SetNwTtlActionSerializer;\r
 import org.opendaylight.openflowjava.protocol.impl.serialization.action.OF13SetQueueActionSerializer;\r
-import org.opendaylight.openflowjava.protocol.impl.serialization.experimenters.OF10VendorActionSerializer;\r
-import org.opendaylight.openflowjava.protocol.impl.serialization.experimenters.OF13ExperimenterActionSerializer;\r
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
 import org.opendaylight.openflowjava.protocol.impl.util.EnhancedKeyRegistryHelper;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;\r
@@ -45,7 +43,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Enqueue;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Group;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;\r
@@ -97,7 +94,6 @@ public class ActionsInitializer {
         helper.registerSerializer(SetTpSrc.class, new OF10SetTpSrcActionSerializer());\r
         helper.registerSerializer(SetTpDst.class, new OF10SetTpDstActionSerializer());\r
         helper.registerSerializer(Enqueue.class, new OF10EnqueueActionSerializer());\r
-        helper.registerSerializer(Experimenter.class, new OF10VendorActionSerializer());\r
         // register OF v1.0 action serializers\r
         helper = new EnhancedKeyRegistryHelper<>(\r
                 EncodeConstants.OF13_VERSION_ID, actionClass, serializerRegistry);\r
@@ -117,6 +113,5 @@ public class ActionsInitializer {
         helper.registerSerializer(SetField.class, new OF13SetFieldActionSerializer());\r
         helper.registerSerializer(PushPbb.class, new OF13PushPbbActionSerializer());\r
         helper.registerSerializer(PopPbb.class, new OF13PopPbbActionSerializer());\r
-        helper.registerSerializer(Experimenter.class, new OF13ExperimenterActionSerializer());\r
     }\r
 }\r
index 8115f5854342703003d5807ee91a1cc7d09f1553..32850a27ed02ef57dc83a97f2c63b6f58522ccb4 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.openflowjava.protocol.impl.serialization;
 \r
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
 import org.opendaylight.openflowjava.protocol.impl.serialization.experimenters.OF10StatsRequestVendorSerializer;\r
-import org.opendaylight.openflowjava.protocol.impl.serialization.experimenters.OF10VendorActionSerializer;\r
 import org.opendaylight.openflowjava.protocol.impl.serialization.experimenters.OF10VendorInputMessageFactory;\r
 import org.opendaylight.openflowjava.protocol.impl.serialization.experimenters.OF13ExperimenterActionSerializer;\r
 import org.opendaylight.openflowjava.protocol.impl.serialization.experimenters.OF13ExperimenterInputMessageFactory;\r
@@ -20,16 +19,22 @@ import org.opendaylight.openflowjava.protocol.impl.serialization.experimenters.O
 import org.opendaylight.openflowjava.protocol.impl.serialization.experimenters.OF13TableFeatExpSerializer;\r
 import org.opendaylight.openflowjava.protocol.impl.util.CommonMessageRegistryHelper;\r
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterAction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterInstruction;\r
+import org.opendaylight.openflowjava.protocol.impl.util.EnhancedKeyRegistryHelper;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.experimenter._case.MultipartRequestExperimenter;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;\r
 \r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
 public class DefaultExperimenterInitializer {\r
 \r
-       /**\r
+    /**\r
      * Registers message serializers into provided registry\r
      * @param serializerRegistry registry to be initialized with message serializers\r
      */\r
@@ -38,16 +43,24 @@ public class DefaultExperimenterInitializer {
         short version = EncodeConstants.OF10_VERSION_ID;\r
         CommonMessageRegistryHelper helper = new CommonMessageRegistryHelper(version, serializerRegistry);\r
         helper.registerSerializer(ExperimenterInput.class, new OF10VendorInputMessageFactory());\r
-        helper.registerSerializer(ExperimenterAction.class, new OF10VendorActionSerializer());\r
+        EnhancedKeyRegistryHelper<Action> actionHelper = new EnhancedKeyRegistryHelper<>(\r
+                EncodeConstants.OF10_VERSION_ID, Action.class, serializerRegistry);\r
+        actionHelper.registerSerializer(Experimenter.class, new OF13ExperimenterActionSerializer());\r
         helper.registerSerializer(MultipartRequestExperimenter.class, new OF10StatsRequestVendorSerializer());\r
         // register OF v1.3 default experimenter serializers\r
         version = EncodeConstants.OF13_VERSION_ID;\r
         helper = new CommonMessageRegistryHelper(version, serializerRegistry);\r
         helper.registerSerializer(ExperimenterInput.class, new OF13ExperimenterInputMessageFactory());\r
-        helper.registerSerializer(ExperimenterAction.class, new OF13ExperimenterActionSerializer());\r
-        helper.registerSerializer(ExperimenterInstruction.class, new OF13ExperimenterInstructionSerializer());\r
         helper.registerSerializer(MultipartRequestExperimenter.class, new OF13MultipartExperimenterSerializer());\r
         helper.registerSerializer(TableFeatureProperties.class, new OF13TableFeatExpSerializer());\r
         helper.registerSerializer(MeterBandExperimenter.class, new OF13MeterBandExperimenterSerializer());\r
+        actionHelper = new EnhancedKeyRegistryHelper<>(\r
+                EncodeConstants.OF13_VERSION_ID, Action.class, serializerRegistry);\r
+        actionHelper.registerSerializer(Experimenter.class, new OF13ExperimenterActionSerializer());\r
+        EnhancedKeyRegistryHelper<Instruction> insHelper = new EnhancedKeyRegistryHelper<>(\r
+                EncodeConstants.OF13_VERSION_ID, Instruction.class, serializerRegistry);\r
+        insHelper.registerSerializer(org.opendaylight.yang.gen.v1.urn.opendaylight\r
+                .openflow.common.instruction.rev130731.Experimenter.class,\r
+                new OF13ExperimenterInstructionSerializer());\r
     }\r
 }\r
index 529f5e0f7bbe24369a7619655ea5518a0e1eaf4b..3e36addc54d2426733be02aa05e5a9f2fed847f8 100644 (file)
@@ -16,10 +16,9 @@ import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralSeriali
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionsInitializer;
 import org.opendaylight.openflowjava.protocol.impl.util.OF10MatchSerializer;
-import org.opendaylight.openflowjava.protocol.impl.util.OF13InstructionsSerializer;
 import org.opendaylight.openflowjava.protocol.impl.util.OF13MatchSerializer;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;
 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.match.v10.grouping.MatchV10;
 
@@ -41,16 +40,16 @@ public class SerializerRegistryImpl implements SerializerRegistry {
         // Openflow message type serializers
         MessageFactoryInitializer.registerMessageSerializers(this);
 
-        // common structure serializers
+        // match structure serializers
         registerSerializer(new MessageTypeKey<>(OF10, MatchV10.class), new OF10MatchSerializer());
         registerSerializer(new MessageTypeKey<>(OF13, Match.class), new OF13MatchSerializer());
-        registerSerializer(new MessageTypeKey<>(OF13, Instruction.class), new OF13InstructionsSerializer());
 
         // match entry serializers
         MatchEntriesInitializer.registerMatchEntrySerializers(this);
         // action serializers
         ActionsInitializer.registerActionSerializers(this);
-        
+        // instruction serializers
+        InstructionsInitializer.registerInstructionSerializers(this);
         // default vendor / experimenter serializers
         DefaultExperimenterInitializer.registerDefaultExperimenterSerializers(this);
     }
index 2465c15676a969727c0b7c120b5d9d10fa972ffd..d1e0df876655d87490f6f0f5ecdb36422767ac0c 100644 (file)
@@ -10,17 +10,40 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.experimenters;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
+import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderSerializer;\r
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterInstruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
 \r
-public class OF13ExperimenterInstructionSerializer \r
-               implements OFSerializer<ExperimenterInstruction> {\r
+/**\r
+ * \r
+ * @author michal.polkorab\r
+ */\r
+public class OF13ExperimenterInstructionSerializer implements OFSerializer<Instruction>,\r
+        HeaderSerializer<Instruction>{\r
+\r
+    @Override\r
+    public void serializeHeader(Instruction instruction, ByteBuf outBuffer) {\r
+        outBuffer.writeShort(EncodeConstants.EXPERIMENTER_VALUE);\r
+        outBuffer.writeShort(EncodeConstants.EXPERIMENTER_IDS_LENGTH);\r
+        outBuffer.writeInt(instruction\r
+                .getAugmentation(ExperimenterInstruction.class).getExperimenter().intValue());\r
+    }\r
 \r
-       @Override\r
-       public void serialize(ExperimenterInstruction input, ByteBuf outBuffer) {\r
-               if (input.getData() != null) {\r
-                       outBuffer.writeBytes(input.getData());\r
-               }\r
-       }\r
+    @Override\r
+    public void serialize(Instruction instruction, ByteBuf outBuffer) {\r
+        int startIndex = outBuffer.writerIndex();\r
+        outBuffer.writeShort(EncodeConstants.EXPERIMENTER_VALUE);\r
+        int lengthIndex = outBuffer.writerIndex();\r
+        outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);\r
+        ExperimenterInstruction experimenter =\r
+                instruction.getAugmentation(ExperimenterInstruction.class);\r
+        outBuffer.writeInt(experimenter.getExperimenter().intValue());\r
+        if (experimenter.getData() != null) {\r
+            outBuffer.writeBytes(experimenter.getData());\r
+        }\r
+        outBuffer.setShort(lengthIndex, outBuffer.writerIndex() - startIndex);\r
+    }\r
 \r
 }\r
index ffb20862651327f9a33b5f5755acb01f877a83a2..eb343d43eee1cbc9e96c40e99b735c007dec30b2 100644 (file)
@@ -15,12 +15,12 @@ import java.util.Map;
 
 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
 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.impl.util.ByteBufUtils;
-import org.opendaylight.openflowjava.protocol.impl.util.CodingUtils;
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;
+import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;
@@ -52,9 +52,8 @@ public class FlowModInputMessageFactory implements OFSerializer<FlowModInput>, S
         ByteBufUtils.padBuffer(PADDING_IN_FLOW_MOD_MESSAGE, outBuffer);
         registry.<Match, OFSerializer<Match>>getSerializer(new MessageTypeKey<>(message.getVersion(), Match.class))
             .serialize(message.getMatch(), outBuffer);
-        OFSerializer<Instruction> instructionSerializer =
-                registry.getSerializer(new MessageTypeKey<>(message.getVersion(), Instruction.class));
-        CodingUtils.serializeList(message.getInstruction(), instructionSerializer, outBuffer);
+        ListSerializer.serializeList(message.getInstruction(), EnhancedTypeKeyMakerFactory
+                .createInstructionKeyBuilder(EncodeConstants.OF13_VERSION_ID), registry, outBuffer);
         ByteBufUtils.updateOFHeaderLength(outBuffer);
     }
 
index bf0c2467687a95af38a9b8548c8089ce7572b2bb..e4fb088e33e753ef85255c7c2f682ff98063275e 100644 (file)
@@ -16,8 +16,9 @@ import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
-import org.opendaylight.openflowjava.protocol.impl.util.CodingUtils;
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
 
@@ -52,8 +53,8 @@ public class GroupModInputMessageFactory implements OFSerializer<GroupModInput>,
                 outBuffer.writeInt(currentBucket.getWatchPort().getValue().intValue());
                 outBuffer.writeInt(currentBucket.getWatchGroup().intValue());
                 ByteBufUtils.padBuffer(PADDING_IN_BUCKET, outBuffer);
-                CodingUtils.serializeActions(currentBucket.getAction(), registry,
-                        outBuffer, EncodeConstants.OF13_VERSION_ID);
+                ListSerializer.serializeList(currentBucket.getAction(), EnhancedTypeKeyMakerFactory
+                        .createActionKeyBuilder(EncodeConstants.OF13_VERSION_ID), registry, outBuffer);
                 outBuffer.setShort(bucketLengthIndex, outBuffer.writerIndex() - bucketLengthIndex);
             }
         }
index 6a85191e6882f18d416e2404d78ddcf562bad1c8..e671dc5baf6ca870f1b9bf27d504ba61c2e79273 100644 (file)
@@ -21,8 +21,10 @@ import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
-import org.opendaylight.openflowjava.protocol.impl.util.CodingUtils;
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMaker;
+import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionRelatedTableFeatureProperty;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.InstructionRelatedTableFeatureProperty;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NextTableRelatedTableFeatureProperty;
@@ -141,15 +143,15 @@ public class MultipartRequestInputFactory implements OFSerializer<MultipartReque
         ByteBufUtils.updateOFHeaderLength(outBuffer);
     }
 
-       private void serializeExperimenterBody(MultipartRequestInput message,
-                       ByteBuf outBuffer) {
-               MultipartRequestExperimenterCase expCase =
-                               (MultipartRequestExperimenterCase) message.getMultipartRequestBody();
-               MultipartRequestExperimenter experimenter = expCase.getMultipartRequestExperimenter();
-               OFSerializer<MultipartRequestExperimenter> serializer = registry.getSerializer(
-                               new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MultipartRequestExperimenter.class));
-               serializer.serialize(experimenter, outBuffer);
-       }
+    private void serializeExperimenterBody(MultipartRequestInput message,
+            ByteBuf outBuffer) {
+        MultipartRequestExperimenterCase expCase =
+                (MultipartRequestExperimenterCase) message.getMultipartRequestBody();
+        MultipartRequestExperimenter experimenter = expCase.getMultipartRequestExperimenter();
+        OFSerializer<MultipartRequestExperimenter> serializer = registry.getSerializer(
+                new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MultipartRequestExperimenter.class));
+        serializer.serialize(experimenter, outBuffer);
+    }
 
     private static int createMultipartRequestFlagsBitmask(MultipartRequestFlags flags) {
         int multipartRequestFlagsBitmask = 0;
@@ -360,9 +362,9 @@ public class MultipartRequestInputFactory implements OFSerializer<MultipartReque
             }
             padding = paddingNeeded(length);
             output.writeShort(length);
-            HeaderSerializer<Instruction> instructionSerializer = registry.getSerializer(
-                    new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Instruction.class));
-            CodingUtils.serializeHeaders(instructions, instructionSerializer, output);
+            EnhancedTypeKeyMaker<Instruction> keyMaker = EnhancedTypeKeyMakerFactory
+                    .createInstructionKeyBuilder(EncodeConstants.OF13_VERSION_ID);
+            ListSerializer.serializeHeaderList(instructions, keyMaker, registry, output);
         } else {
             padding = paddingNeeded(length);
             output.writeShort(length);
@@ -418,9 +420,9 @@ public class MultipartRequestInputFactory implements OFSerializer<MultipartReque
             length += actions.size() * STRUCTURE_HEADER_LENGTH;
             padding += paddingNeeded(length);
             output.writeShort(length);
-            HeaderSerializer<Action> actionSerializer = registry.getSerializer(
-                    new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Action.class));
-            CodingUtils.serializeHeaders(actions, actionSerializer, output);
+            EnhancedTypeKeyMaker<Action> keyMaker = EnhancedTypeKeyMakerFactory
+                    .createActionKeyBuilder(EncodeConstants.OF13_VERSION_ID);
+            ListSerializer.serializeHeaderList(actions, keyMaker, registry, output);
         } else {
             padding = paddingNeeded(length);
             output.writeShort(length);
index e4f5601dd38822e94c9594adea2d1a7096137d92..2ab21093f94e629c2e234f0ee8af0b562c5bcf84 100644 (file)
@@ -18,8 +18,9 @@ import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
-import org.opendaylight.openflowjava.protocol.impl.util.CodingUtils;
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlagsV10;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;
@@ -47,7 +48,8 @@ public class OF10FlowModInputMessageFactory implements OFSerializer<FlowModInput
         outBuffer.writeInt(message.getBufferId().intValue());
         outBuffer.writeShort(message.getOutPort().getValue().intValue());
         outBuffer.writeShort(createFlowModFlagsBitmask(message.getFlagsV10()));
-        CodingUtils.serializeActions(message.getAction(), registry, outBuffer, EncodeConstants.OF10_VERSION_ID);
+        ListSerializer.serializeList(message.getAction(), EnhancedTypeKeyMakerFactory
+                .createActionKeyBuilder(EncodeConstants.OF10_VERSION_ID), registry, outBuffer);
         ByteBufUtils.updateOFHeaderLength(outBuffer);
     }
 
index a15124121c9b51952e07e540b389524fa7da5f1c..85a57c2e92ab1da3234eaea0f30d14279e6e5bca 100644 (file)
@@ -14,8 +14,9 @@ import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
-import org.opendaylight.openflowjava.protocol.impl.util.CodingUtils;
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;
 
 /**
@@ -35,7 +36,8 @@ public class OF10PacketOutInputMessageFactory implements OFSerializer<PacketOutI
         int actionsLengthIndex = outBuffer.writerIndex();
         outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);
         int actionsStartIndex = outBuffer.writerIndex();
-        CodingUtils.serializeActions(message.getAction(), registry, outBuffer, EncodeConstants.OF10_VERSION_ID);
+        ListSerializer.serializeList(message.getAction(), EnhancedTypeKeyMakerFactory
+                .createActionKeyBuilder(EncodeConstants.OF10_VERSION_ID), registry, outBuffer);
         outBuffer.setShort(actionsLengthIndex, outBuffer.writerIndex() - actionsStartIndex);
         byte[] data = message.getData();
         if (data != null) {
index 574987ffbc32c584cd62797ed06b33e65a763f55..a5620b8f70aa15118fcbb4e6dad66345fd097621 100644 (file)
@@ -14,8 +14,9 @@ import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
-import org.opendaylight.openflowjava.protocol.impl.util.CodingUtils;
 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;
+import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;
 
 /**
@@ -39,8 +40,8 @@ public class PacketOutInputMessageFactory implements OFSerializer<PacketOutInput
         outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);
         ByteBufUtils.padBuffer(PADDING_IN_PACKET_OUT_MESSAGE, outBuffer);
         int actionsStartIndex = outBuffer.writerIndex();
-        CodingUtils.serializeActions(message.getAction(), registry,
-                outBuffer, EncodeConstants.OF13_VERSION_ID);
+        ListSerializer.serializeList(message.getAction(), EnhancedTypeKeyMakerFactory
+                .createActionKeyBuilder(EncodeConstants.OF13_VERSION_ID), registry, outBuffer);
         outBuffer.setShort(actionsLengthIndex, outBuffer.writerIndex() - actionsStartIndex);
         byte[] data = message.getData();
         if (data != null) {
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/AbstractActionInstructionSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/AbstractActionInstructionSerializer.java
new file mode 100644 (file)
index 0000000..b9f3c1c
--- /dev/null
@@ -0,0 +1,62 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.instruction;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import java.util.List;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
+import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
+import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionsInstruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public abstract class AbstractActionInstructionSerializer extends AbstractInstructionSerializer\r
+        implements SerializerRegistryInjector {\r
+\r
+    private SerializerRegistry registry;\r
+\r
+    @Override\r
+    public void serialize(Instruction instruction, ByteBuf outBuffer) {\r
+        int startIndex = outBuffer.writerIndex();\r
+        outBuffer.writeShort(getType());\r
+        if (instruction.getAugmentation(ActionsInstruction.class) != null) {\r
+            List<Action> actions = instruction.getAugmentation(ActionsInstruction.class).getAction();\r
+            int lengthIndex = outBuffer.writerIndex();\r
+            outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);\r
+            ByteBufUtils.padBuffer(InstructionConstants.PADDING_IN_ACTIONS_INSTRUCTION, outBuffer);\r
+            ListSerializer.serializeList(actions, EnhancedTypeKeyMakerFactory\r
+                    .createActionKeyBuilder(EncodeConstants.OF13_VERSION_ID), getRegistry(), outBuffer);\r
+            int instructionLength = outBuffer.writerIndex() - startIndex;\r
+            outBuffer.setShort(lengthIndex, instructionLength);\r
+        } else {\r
+            outBuffer.writeShort(InstructionConstants.STANDARD_INSTRUCTION_LENGTH);\r
+            ByteBufUtils.padBuffer(InstructionConstants.PADDING_IN_ACTIONS_INSTRUCTION, outBuffer);\r
+        }\r
+    }\r
+\r
+    protected SerializerRegistry getRegistry() {\r
+        return registry;\r
+    }\r
+\r
+    @Override\r
+    public void injectSerializerRegistry(SerializerRegistry serializerRegistry) {\r
+        registry = serializerRegistry;\r
+    }\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/AbstractInstructionSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/AbstractInstructionSerializer.java
new file mode 100644 (file)
index 0000000..f672016
--- /dev/null
@@ -0,0 +1,36 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.instruction;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderSerializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public abstract class AbstractInstructionSerializer implements OFSerializer<Instruction>,\r
+        HeaderSerializer<Instruction> {\r
+\r
+    @Override\r
+    public void serializeHeader(Instruction input, ByteBuf outBuffer) {\r
+        outBuffer.writeShort(getType());\r
+        outBuffer.writeShort(InstructionConstants.INSTRUCTION_IDS_LENGTH);\r
+    }\r
+\r
+    /**\r
+     * @return numeric representation of action type\r
+     */\r
+    protected abstract int getType();\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/ApplyActionsInstructionSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/ApplyActionsInstructionSerializer.java
new file mode 100644 (file)
index 0000000..f2f4c27
--- /dev/null
@@ -0,0 +1,24 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.instruction;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class ApplyActionsInstructionSerializer extends AbstractActionInstructionSerializer {\r
+\r
+    @Override\r
+    protected int getType() {\r
+        return InstructionConstants.APPLY_ACTIONS_TYPE;\r
+    }\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/ClearActionsInstructionSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/ClearActionsInstructionSerializer.java
new file mode 100644 (file)
index 0000000..85e27d2
--- /dev/null
@@ -0,0 +1,24 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.instruction;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class ClearActionsInstructionSerializer extends AbstractActionInstructionSerializer {\r
+\r
+    @Override\r
+    protected int getType() {\r
+        return InstructionConstants.CLEAR_ACTIONS_TYPE;\r
+    }\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/GoToTableInstructionSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/GoToTableInstructionSerializer.java
new file mode 100644 (file)
index 0000000..57ae954
--- /dev/null
@@ -0,0 +1,37 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.instruction;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TableIdInstruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class GoToTableInstructionSerializer extends AbstractInstructionSerializer {\r
+\r
+    @Override\r
+    public void serialize(Instruction instruction, ByteBuf outBuffer) {\r
+        outBuffer.writeShort(getType());\r
+        outBuffer.writeShort(InstructionConstants.STANDARD_INSTRUCTION_LENGTH);\r
+        outBuffer.writeByte(instruction.getAugmentation(TableIdInstruction.class).getTableId());\r
+        ByteBufUtils.padBuffer(InstructionConstants.PADDING_IN_GOTO_TABLE, outBuffer);\r
+    }\r
+\r
+    @Override\r
+    protected int getType() {\r
+        return InstructionConstants.GOTO_TABLE_TYPE;\r
+    }\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/MeterInstructionSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/MeterInstructionSerializer.java
new file mode 100644 (file)
index 0000000..c171f50
--- /dev/null
@@ -0,0 +1,36 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.instruction;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MeterIdInstruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class MeterInstructionSerializer extends AbstractInstructionSerializer {\r
+\r
+    @Override\r
+    public void serialize(Instruction instruction, ByteBuf outBuffer) {\r
+        outBuffer.writeShort(getType());\r
+        outBuffer.writeShort(InstructionConstants.STANDARD_INSTRUCTION_LENGTH);\r
+        outBuffer.writeInt(instruction.\r
+                getAugmentation(MeterIdInstruction.class).getMeterId().intValue());\r
+    }\r
+\r
+    @Override\r
+    protected int getType() {\r
+        return InstructionConstants.METER_TYPE;\r
+    }\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/WriteActionsInstructionSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/WriteActionsInstructionSerializer.java
new file mode 100644 (file)
index 0000000..f4de32c
--- /dev/null
@@ -0,0 +1,24 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.instruction;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class WriteActionsInstructionSerializer extends AbstractActionInstructionSerializer {\r
+\r
+    @Override\r
+    protected int getType() {\r
+        return InstructionConstants.WRITE_ACTIONS_TYPE;\r
+    }\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/WriteMetadataInstructionSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/instruction/WriteMetadataInstructionSerializer.java
new file mode 100644 (file)
index 0000000..3725e04
--- /dev/null
@@ -0,0 +1,39 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.instruction;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
+import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataInstruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class WriteMetadataInstructionSerializer extends AbstractInstructionSerializer {\r
+\r
+    @Override\r
+    public void serialize(Instruction instruction, ByteBuf outBuffer) {\r
+        outBuffer.writeShort(getType());\r
+        outBuffer.writeShort(InstructionConstants.WRITE_METADATA_LENGTH);\r
+        ByteBufUtils.padBuffer(InstructionConstants.PADDING_IN_WRITE_METADATA, outBuffer);\r
+        MetadataInstruction metadata = instruction.getAugmentation(MetadataInstruction.class);\r
+        outBuffer.writeBytes(metadata.getMetadata());\r
+        outBuffer.writeBytes(metadata.getMetadataMask());\r
+    }\r
+\r
+    @Override\r
+    protected int getType() {\r
+        return InstructionConstants.WRITE_METADATA_TYPE;\r
+    }\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/AbstractEnhancedTypeKeyMaker.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/AbstractEnhancedTypeKeyMaker.java
new file mode 100644 (file)
index 0000000..787b7e0
--- /dev/null
@@ -0,0 +1,35 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ * @param <T> type the key maker is based on \r
+ */\r
+public abstract class AbstractEnhancedTypeKeyMaker<T> implements EnhancedTypeKeyMaker<T> {\r
+\r
+    private short version;\r
+\r
+    /**\r
+     * @param version openflow wire version\r
+     */\r
+    public AbstractEnhancedTypeKeyMaker(short version) {\r
+        this.version = version;\r
+        \r
+    }\r
+\r
+    /**\r
+     * @return the version\r
+     */\r
+    public short getVersion() {\r
+        return version;\r
+    }\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/CodingUtils.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/CodingUtils.java
deleted file mode 100644 (file)
index c0456d4..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*\r
- * Copyright (c) 2013 Pantheon Technologies s.r.o. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.openflowjava.protocol.impl.util;\r
-\r
-import io.netty.buffer.ByteBuf;\r
-\r
-import java.util.List;\r
-\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageTypeKey;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderSerializer;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
-import org.opendaylight.yangtools.yang.binding.DataObject;\r
-\r
-/**\r
- * Class for common serialization & deserialization operations\r
- * @author michal.polkorab\r
- */\r
-public abstract class CodingUtils {\r
-\r
-    /**\r
-     * Serializes list\r
-     * @param list list of items to be serialized\r
-     * @param serializer serializer that can serialize list items\r
-     * @param outBuffer output buffer\r
-     */\r
-    public static <T extends DataObject> void serializeList(List<T> list, OFSerializer<T> serializer, ByteBuf outBuffer){\r
-        if (list != null) {\r
-            for (T item : list) {\r
-                serializer.serialize(item, outBuffer);\r
-            }\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Serializes action list\r
-     * @param list actions to be serialized\r
-     * @param outBuffer output buffer\r
-     * @param version Openflow wire version\r
-     * @param serializer serializer that can serialize \r
-     */\r
-    public static void serializeActions(List<Action> list,\r
-            SerializerRegistry registry, ByteBuf outBuffer, short version){\r
-        if (list != null) {\r
-            for (Action action : list) {\r
-                OFSerializer<Action> serializer = registry.getSerializer(\r
-                        new EnhancedMessageTypeKey<>(version,\r
-                                Action.class, action.getType()));\r
-                serializer.serialize(action, outBuffer);\r
-            }\r
-        }\r
-    }\r
-\r
-    /**\r
-     * Serializes header fields for all objects in a list\r
-     * @param list list of items to be serialized\r
-     * @param serializer serializer that can serialize list items\r
-     * @param outBuffer output buffer\r
-     */\r
-    public static <T extends DataObject> void serializeHeaders(List<T> list, HeaderSerializer<T> serializer, ByteBuf outBuffer){\r
-        if (list != null) {\r
-            for (T item : list) {\r
-                serializer.serializeHeader(item, outBuffer);\r
-            }\r
-        }\r
-    }\r
-}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/EnhancedTypeKeyMaker.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/EnhancedTypeKeyMaker.java
new file mode 100644 (file)
index 0000000..3add815
--- /dev/null
@@ -0,0 +1,26 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageTypeKey;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ * @param <T> \r
+ */\r
+public interface EnhancedTypeKeyMaker<T> {\r
+\r
+    /**\r
+     * @param entry\r
+     * @return key that will be used for serializer lookup in \r
+     * the serializer registry\r
+     */\r
+    public abstract EnhancedMessageTypeKey<?,?> make(T entry);\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/EnhancedTypeKeyMakerFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/EnhancedTypeKeyMakerFactory.java
new file mode 100644 (file)
index 0000000..7c8e80e
--- /dev/null
@@ -0,0 +1,64 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageTypeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
+\r
+/**\r
+ * Creates KeyMakers\r
+ * @author michal.polkorab\r
+ */\r
+public abstract class EnhancedTypeKeyMakerFactory {\r
+\r
+    /**\r
+     * @param version openflow wire version that shall be used\r
+     *  in lookup key\r
+     * @return lookup key\r
+     */\r
+    public static EnhancedTypeKeyMaker<MatchEntries> createMatchEntriesKeyBuilder(short version) {\r
+        return new AbstractEnhancedTypeKeyMaker<MatchEntries>(version) {\r
+            @Override\r
+            public EnhancedMessageTypeKey<?, ?> make(MatchEntries entry) {\r
+                return new EnhancedMessageTypeKey<>(\r
+                        getVersion(), entry.getOxmClass(), entry.getOxmMatchField());\r
+            }\r
+        };\r
+    }\r
+\r
+    /**\r
+     * @param version openflow wire version that shall be used\r
+     *  in lookup key\r
+     * @return lookup key\r
+     */\r
+    public static EnhancedTypeKeyMaker<Action> createActionKeyBuilder(short version) {\r
+        return new AbstractEnhancedTypeKeyMaker<Action>(version) {\r
+            @Override\r
+            public EnhancedMessageTypeKey<?, ?> make(Action entry) {\r
+                return new EnhancedMessageTypeKey<>(getVersion(), Action.class, entry.getType());\r
+            }\r
+        };\r
+    }\r
+\r
+    /**\r
+     * @param version openflow wire version that shall be used\r
+     *  in lookup key\r
+     * @return lookup key\r
+     */\r
+    public static EnhancedTypeKeyMaker<Instruction> createInstructionKeyBuilder(short version) {\r
+        return new AbstractEnhancedTypeKeyMaker<Instruction>(version) {\r
+            @Override\r
+            public EnhancedMessageTypeKey<?, ?> make(Instruction entry) {\r
+                return new EnhancedMessageTypeKey<>(getVersion(), Instruction.class, entry.getType());\r
+            }\r
+        };\r
+    }\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/InstructionConstants.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/InstructionConstants.java
new file mode 100644 (file)
index 0000000..8e0ae6e
--- /dev/null
@@ -0,0 +1,44 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class InstructionConstants {\r
+\r
+    /** Openflow v1.3 OFPIT_GOTO_TABLE code */\r
+    public static final byte GOTO_TABLE_TYPE = 1;\r
+    /** Openflow v1.3 OFPIT_WRITE_METADATA code */\r
+    public static final byte WRITE_METADATA_TYPE = 2;\r
+    /** Openflow v1.3 OFPIT_WRITE_ACTIONS code */\r
+    public static final byte WRITE_ACTIONS_TYPE = 3;\r
+    /** Openflow v1.3 OFPIT_APPLY_ACTIONS code */\r
+    public static final byte APPLY_ACTIONS_TYPE = 4;\r
+    /** Openflow v1.3 OFPIT_CLEAR_ACTIONS code */\r
+    public static final byte CLEAR_ACTIONS_TYPE = 5;\r
+    /** Openflow v1.3 OFPIT_METER code */\r
+    public static final byte METER_TYPE = 6;\r
+\r
+    /** PADDING in OFPIT_GOTO_TABLE */\r
+    public static final byte PADDING_IN_GOTO_TABLE = 3;\r
+    /** PADDING in OFPIT_WRITE_METADATA */\r
+    public static final byte PADDING_IN_WRITE_METADATA = 4;\r
+    /** PADDING in OFPIT_WRITE_ACTIONS, OFPIT_APPLY_ACTIONS\r
+     *  and OFPIT_CLEAR_ACTIONS */\r
+    public static final byte PADDING_IN_ACTIONS_INSTRUCTION = 4;\r
+\r
+    /** Openflow v1.3 header length (padded) */\r
+    public static final byte STANDARD_INSTRUCTION_LENGTH = 8;\r
+    /** Openflow v1.3 OFPIT_WRITE_METADATA length */\r
+    public static final byte WRITE_METADATA_LENGTH = 24;\r
+    /** Openflow v1.3 header length (only type and length fields) */\r
+    public static final byte INSTRUCTION_IDS_LENGTH = 4;\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/InstructionsInitializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/InstructionsInitializer.java
new file mode 100644 (file)
index 0000000..43bc463
--- /dev/null
@@ -0,0 +1,49 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.instruction.ApplyActionsInstructionSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.instruction.ClearActionsInstructionSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.instruction.GoToTableInstructionSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.instruction.MeterInstructionSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.instruction.WriteActionsInstructionSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.instruction.WriteMetadataInstructionSerializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ApplyActions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ClearActions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.GotoTable;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.Meter;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteActions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteMetadata;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class InstructionsInitializer {\r
+\r
+    /**\r
+     * Registers instruction serializers into provided registry\r
+     * @param serializerRegistry registry to be initialized with instruction serializers\r
+     */\r
+    public static void registerInstructionSerializers(SerializerRegistry serializerRegistry) {\r
+        Class<Instruction> instructionClass = Instruction.class;\r
+        // register OF v1.3 instruction serializers\r
+        EnhancedKeyRegistryHelper<Instruction> helper =\r
+                new EnhancedKeyRegistryHelper<>(EncodeConstants.OF13_VERSION_ID,\r
+                        instructionClass, serializerRegistry);\r
+        helper.registerSerializer(GotoTable.class, new GoToTableInstructionSerializer());\r
+        helper.registerSerializer(WriteMetadata.class, new WriteMetadataInstructionSerializer());\r
+        helper.registerSerializer(WriteActions.class, new WriteActionsInstructionSerializer());\r
+        helper.registerSerializer(ApplyActions.class, new ApplyActionsInstructionSerializer());\r
+        helper.registerSerializer(ClearActions.class, new ClearActionsInstructionSerializer());\r
+        helper.registerSerializer(Meter.class, new MeterInstructionSerializer());\r
+    }\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/ListSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/ListSerializer.java
new file mode 100644 (file)
index 0000000..9285708
--- /dev/null
@@ -0,0 +1,61 @@
+/*\r
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowjava.protocol.impl.util;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import java.util.List;\r
+\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderSerializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
+import org.opendaylight.yangtools.yang.binding.DataObject;\r
+\r
+/**\r
+ * Serializes list items and their headers\r
+ * @author michal.polkorab\r
+ * @param <E> \r
+ */\r
+public abstract class ListSerializer {\r
+\r
+    /**\r
+     * Serializes item list\r
+     * @param list list of items to be serialized\r
+     * @param keyMaker creates key for registry lookup\r
+     * @param registry stores serializers\r
+     * @param outBuffer output buffer\r
+     */\r
+    public static <E extends DataObject> void serializeList(List<E> list,\r
+            EnhancedTypeKeyMaker<E> keyMaker, SerializerRegistry registry, ByteBuf outBuffer) {\r
+        if (list != null) {\r
+            for (E item : list) {\r
+                OFSerializer<E> serializer = registry.getSerializer(keyMaker.make(item));\r
+                serializer.serialize(item, outBuffer);\r
+            }\r
+        }\r
+    }\r
+\r
+    /**\r
+     * Serializes headers of items in list\r
+     * @param list list of items to be serialized\r
+     * @param keyMaker creates key for registry lookup\r
+     * @param registry stores serializers\r
+     * @param outBuffer output buffer\r
+     */\r
+    public static <E extends DataObject> void serializeHeaderList(List<E> list,\r
+            EnhancedTypeKeyMaker<E> keyMaker, SerializerRegistry registry, ByteBuf outBuffer) {\r
+        if (list != null) {\r
+            for (E item : list) {\r
+                HeaderSerializer<E> serializer = registry.getSerializer(keyMaker.make(item));\r
+                serializer.serializeHeader(item, outBuffer);\r
+            }\r
+        }\r
+    }\r
+\r
+}\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/OF13InstructionsSerializer.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/OF13InstructionsSerializer.java
deleted file mode 100644 (file)
index 2eeb045..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.openflowjava.protocol.impl.util;
-
-import io.netty.buffer.ByteBuf;
-
-import java.util.List;
-
-import org.opendaylight.openflowjava.protocol.api.extensibility.HeaderSerializer;
-import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
-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.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionsInstruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterInstruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataInstruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MeterIdInstruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TableIdInstruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ApplyActions;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ClearActions;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.Experimenter;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.GotoTable;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.Meter;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteActions;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteMetadata;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.InstructionBase;
-
-/**
- * Serializes ofp_instruction (OpenFlow v 1.3) structure
- * @author michal.polkorab
- * @author timotej.kubas
- */
-public class OF13InstructionsSerializer implements OFSerializer<Instruction>,
-        HeaderSerializer<Instruction>, SerializerRegistryInjector {
-
-    private static final byte GOTO_TABLE_TYPE = 1;
-    private static final byte WRITE_METADATA_TYPE = 2;
-    private static final byte WRITE_ACTIONS_TYPE = 3;
-    private static final byte APPLY_ACTIONS_TYPE = 4;
-    private static final byte CLEAR_ACTIONS_TYPE = 5;
-    private static final byte METER_TYPE = 6;
-    private static final byte GOTO_TABLE_LENGTH = 8;
-    private static final byte WRITE_METADATA_LENGTH = 24;
-    private static final byte METER_LENGTH = 8;
-    private static final byte ACTIONS_INSTRUCTION_LENGTH = 8;
-    private static final byte PADDING_IN_GOTO_TABLE = 3;
-    private static final byte PADDING_IN_WRITE_METADATA = 4;
-    private static final byte PADDING_IN_CLEAR_ACTIONS = 4;
-    private static final byte INSTRUCTION_IDS_LENGTH = 4;
-    private static final byte PADDING_IN_ACTIONS_INSTRUCTION = 4;
-    private SerializerRegistry registry;
-
-    private static void writeTypeAndLength(ByteBuf out, int type, int length) {
-        out.writeShort(type);
-        out.writeShort(length);
-    }
-
-    private void writeActionsInstruction(ByteBuf out,
-            Instruction instruction, int type) {
-        int instructionStartIndex = out.writerIndex();
-        out.writeShort(type);
-        if (instruction.getAugmentation(ActionsInstruction.class) != null) {
-            List<Action> actions = instruction.getAugmentation(ActionsInstruction.class).getAction();
-            int instructionLengthIndex = out.writerIndex();
-            out.writeShort(EncodeConstants.EMPTY_LENGTH);
-            ByteBufUtils.padBuffer(PADDING_IN_ACTIONS_INSTRUCTION, out);
-            CodingUtils.serializeActions(actions, registry,
-                    out, EncodeConstants.OF13_VERSION_ID);
-            int instructionLength = out.writerIndex() - instructionStartIndex;
-            out.setShort(instructionLengthIndex, instructionLength);
-        } else {
-            out.writeShort(ACTIONS_INSTRUCTION_LENGTH);
-            ByteBufUtils.padBuffer(PADDING_IN_ACTIONS_INSTRUCTION, out);
-        }
-    }
-
-    @Override
-    public void serialize(Instruction instruction, ByteBuf outBuffer) {
-        Class<? extends InstructionBase> type = instruction.getType();
-        if (type.isAssignableFrom(GotoTable.class)) {
-            writeTypeAndLength(outBuffer, GOTO_TABLE_TYPE, GOTO_TABLE_LENGTH);
-            outBuffer.writeByte(instruction.getAugmentation(TableIdInstruction.class).getTableId());
-            ByteBufUtils.padBuffer(PADDING_IN_GOTO_TABLE, outBuffer);
-        } else if (type.isAssignableFrom(WriteMetadata.class)) {
-            writeTypeAndLength(outBuffer, WRITE_METADATA_TYPE, WRITE_METADATA_LENGTH);
-            ByteBufUtils.padBuffer(PADDING_IN_WRITE_METADATA, outBuffer);
-            MetadataInstruction metadata = instruction.getAugmentation(MetadataInstruction.class);
-            outBuffer.writeBytes(metadata.getMetadata());
-            outBuffer.writeBytes(metadata.getMetadataMask());
-        } else if (type.isAssignableFrom(WriteActions.class)) {
-            writeActionsInstruction(outBuffer, instruction, WRITE_ACTIONS_TYPE);
-        } else if (type.isAssignableFrom(ApplyActions.class)) {
-            writeActionsInstruction(outBuffer, instruction, APPLY_ACTIONS_TYPE);
-        } else if (type.isAssignableFrom(ClearActions.class)) {
-            writeTypeAndLength(outBuffer, CLEAR_ACTIONS_TYPE, ACTIONS_INSTRUCTION_LENGTH);
-            ByteBufUtils.padBuffer(PADDING_IN_CLEAR_ACTIONS, outBuffer);
-        } else if (type.isAssignableFrom(Meter.class)) {
-            writeTypeAndLength(outBuffer, METER_TYPE, METER_LENGTH);
-            outBuffer.writeInt(instruction.getAugmentation(MeterIdInstruction.class).getMeterId().intValue());
-        } else if (type.isAssignableFrom(Experimenter.class)) {
-               int startIndex = outBuffer.writerIndex();
-               outBuffer.writeShort(EncodeConstants.EXPERIMENTER_VALUE);
-               int lengthIndex = outBuffer.writerIndex();
-               outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);
-               ExperimenterInstruction expInstruction =
-                               instruction.getAugmentation(ExperimenterInstruction.class);
-               outBuffer.writeInt(expInstruction.getExperimenter().intValue());
-            OFSerializer<ExperimenterInstruction> serializer = registry.getSerializer(new MessageTypeKey<>(
-                    EncodeConstants.OF13_VERSION_ID, ExperimenterInstruction.class));
-            serializer.serialize(expInstruction, outBuffer);
-            outBuffer.setShort(lengthIndex, outBuffer.writerIndex() - startIndex);
-        }
-    }
-
-    @Override
-    public void injectSerializerRegistry(SerializerRegistry serializerRegistry) {
-        this.registry = serializerRegistry;
-    }
-
-    @Override
-    public void serializeHeader(Instruction instruction, ByteBuf outBuffer) {
-        Class<? extends InstructionBase> type = instruction.getType();
-        if (type.isAssignableFrom(GotoTable.class)) {
-            writeTypeAndLength(outBuffer, GOTO_TABLE_TYPE, INSTRUCTION_IDS_LENGTH);
-        } else if (type.isAssignableFrom(WriteMetadata.class)) {
-            writeTypeAndLength(outBuffer, WRITE_METADATA_TYPE, INSTRUCTION_IDS_LENGTH);
-        } else if (type.isAssignableFrom(WriteActions.class)) {
-            writeTypeAndLength(outBuffer, WRITE_ACTIONS_TYPE, INSTRUCTION_IDS_LENGTH);
-        } else if (type.isAssignableFrom(ApplyActions.class)) {
-            writeTypeAndLength(outBuffer, APPLY_ACTIONS_TYPE, INSTRUCTION_IDS_LENGTH);
-        } else if (type.isAssignableFrom(ClearActions.class)) {
-            writeTypeAndLength(outBuffer, CLEAR_ACTIONS_TYPE, INSTRUCTION_IDS_LENGTH);
-        } else if (type.isAssignableFrom(Meter.class)) {
-            writeTypeAndLength(outBuffer, METER_TYPE, INSTRUCTION_IDS_LENGTH);
-        } else if (type.isAssignableFrom(Experimenter.class)) {
-               writeTypeAndLength(outBuffer, EncodeConstants.EXPERIMENTER_VALUE,
-                               EncodeConstants.EXPERIMENTER_IDS_LENGTH);
-               ExperimenterInstruction experimenter = 
-                               instruction.getAugmentation(ExperimenterInstruction.class);
-               outBuffer.writeInt(experimenter.getExperimenter().intValue());
-        }
-    }
-
-}
index a2b23054c5155ee44a690a0bd24ee2c7bb946afb..844dcddcc8c40c099cc9e19cf6fcc18f7e28761b 100644 (file)
@@ -76,8 +76,8 @@ public class FlowModInputMessageFactoryTest {
     public void startUp() {
         registry = new SerializerRegistryImpl();
         registry.init();
-        flowModFactory = registry.getSerializer(
-                new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, FlowModInput.class));
+        flowModFactory = registry.getSerializer(new MessageTypeKey<>(
+                EncodeConstants.OF13_VERSION_ID, FlowModInput.class));
     }
 
     /**
index 273868ff57a97cca5f32ac51dc5a4696809b3d50..b2d814c70c45f8264e1117581b9897361a2ffdb4 100644 (file)
@@ -169,7 +169,8 @@ public class OF10ActionsSerializerTest {
         actions.add(actionBuilder.build());\r
         \r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
-        CodingUtils.serializeActions(actions, registry, out, EncodeConstants.OF10_VERSION_ID);\r
+        ListSerializer.serializeList(actions, EnhancedTypeKeyMakerFactory\r
+                .createActionKeyBuilder(EncodeConstants.OF10_VERSION_ID), registry, out);\r
         \r
         Assert.assertEquals("Wrong action type", 0, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong action length", 8, out.readUnsignedShort());\r
index 99800d5dcae1c77dd7d3a85ef7a24520d75d9d55..9b9d30a30e0ec2725ae0f5ee46d8b5717f3f96e7 100644 (file)
@@ -193,7 +193,8 @@ public class OF13ActionsSerializerTest {
         actions.add(actionBuilder.build());\r
         \r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
-        CodingUtils.serializeActions(actions, registry, out, EncodeConstants.OF13_VERSION_ID);\r
+        ListSerializer.serializeList(actions, EnhancedTypeKeyMakerFactory\r
+                .createActionKeyBuilder(EncodeConstants.OF13_VERSION_ID), registry, out);\r
         \r
         Assert.assertEquals("Wrong action type", 0, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong action length", 16, out.readUnsignedShort());\r
index 1af814acdcb3be0fed480bc84afbccda4d8bb8b1..5dc7b2a48f04ea24e0f9ffebbcd5e37264b253a9 100644 (file)
@@ -16,8 +16,6 @@ import java.util.List;
 import org.junit.Assert;\r
 import org.junit.Before;\r
 import org.junit.Test;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionsInstruction;\r
@@ -60,7 +58,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 public class OF13InstructionsSerializerTest {\r
 \r
     private SerializerRegistry registry;\r
-    private OFSerializer<Instruction> instructionSerializer;\r
 \r
     /**\r
      * Initializes serializer table and stores correct factory in field\r
@@ -69,8 +66,6 @@ public class OF13InstructionsSerializerTest {
     public void startUp() {\r
         registry = new SerializerRegistryImpl();\r
         registry.init();\r
-        instructionSerializer = registry.getSerializer(\r
-                new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Instruction.class));\r
     }\r
 \r
     /**\r
@@ -147,7 +142,8 @@ public class OF13InstructionsSerializerTest {
         instructions.add(builder.build());\r
         \r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
-        CodingUtils.serializeList(instructions, instructionSerializer, out);\r
+        ListSerializer.serializeList(instructions, EnhancedTypeKeyMakerFactory\r
+                .createInstructionKeyBuilder(EncodeConstants.OF13_VERSION_ID), registry, out);\r
         \r
         Assert.assertEquals("Wrong instruction type", 1, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong instruction length", 8, out.readUnsignedShort());\r