Created experimenter subtype for vendor's actions
[openflowjava.git] / openflow-extension-nicira / src / main / java / org / opendaylight / openflowjava / nx / codec / action / ActionDeserializer.java
similarity index 55%
rename from openflow-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/ActionCodec.java
rename to openflow-extension-nicira/src/main/java/org/opendaylight/openflowjava/nx/codec/action/ActionDeserializer.java
index 3d58439cc93fc22273d3e62b2aa55588e2080d89..43e3de0924aae4c93d169335198fdf766745ad71 100644 (file)
@@ -4,9 +4,7 @@ import io.netty.buffer.ByteBuf;
 
 import org.opendaylight.openflowjava.nx.NiciraConstants;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
-import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionDeserializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionSerializerKey;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdActionBuilder;
@@ -14,44 +12,19 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
 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.action.rev130731.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.extension.nicira.action.rev140421.NxmNxRegLoad;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.extension.nicira.action.rev140421.NxmNxRegMove;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.extension.nicira.action.rev140421.OfjAugNxAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.extension.nicira.action.rev140421.OfjAugNxActionBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ActionCodec implements OFSerializer<Action>, OFDeserializer<Action> {
+public class ActionDeserializer implements OFDeserializer<Action> {
 
-    private static final Logger LOG = LoggerFactory.getLogger(ActionCodec.class);
+    private static final Logger LOG = LoggerFactory.getLogger(ActionDeserializer.class);
 
-    public static final ExperimenterActionSerializerKey SERIALIZER_KEY = new ExperimenterActionSerializerKey(EncodeConstants.OF13_VERSION_ID, NiciraConstants.NX_VENDOR_ID); 
-    public static final ExperimenterActionDeserializerKey DESERIALIZER_KEY = new ExperimenterActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, NiciraConstants.NX_VENDOR_ID);
-    private static final RegMoveCodec regMoveCodec = new RegMoveCodec();
-    private static final RegLoadCodec regLoadCodec = new RegLoadCodec();
-    
-    @Override
-    public void serialize(Action input, ByteBuf outBuffer) {
-        outBuffer.writeShort(EncodeConstants.EXPERIMENTER_VALUE);
-        OfjAugNxAction augNxAction = input.getAugmentation(OfjAugNxAction.class);
-        if (augNxAction == null) {
-            LOG.info("Action {} does not have any serializer.", input.getClass());
-            return;
-        }
-        if (augNxAction.getActionRegMove() != null) {
-            writeMsgLengthVendorIdSubtypeToBuffer(RegMoveCodec.LENGTH, RegMoveCodec.SUBTYPE, outBuffer);
-            regMoveCodec.serialize(augNxAction.getActionRegMove(), outBuffer);
-        } else if (augNxAction.getActionRegLoad() != null) {
-            writeMsgLengthVendorIdSubtypeToBuffer(RegLoadCodec.LENGTH, RegLoadCodec.SUBTYPE, outBuffer);
-            regLoadCodec.serialize(augNxAction.getActionRegLoad(), outBuffer);
-        } else {
-            LOG.info("Action {} does not have any serializer.", input.getClass());
-        }
-    }
-
-    private final static void writeMsgLengthVendorIdSubtypeToBuffer(int msgLength, int subtype, ByteBuf outBuffer) {
-        outBuffer.writeShort(msgLength);
-        outBuffer.writeInt(NiciraConstants.NX_VENDOR_ID.intValue());
-        outBuffer.writeShort(subtype);
-    }
+    public static final ExperimenterActionDeserializerKey DESERIALIZER_KEY = new ExperimenterActionDeserializerKey(
+            EncodeConstants.OF13_VERSION_ID, NiciraConstants.NX_VENDOR_ID);
 
     @Override
     public Action deserialize(ByteBuf message) {
@@ -65,10 +38,12 @@ public class ActionCodec implements OFSerializer<Action>, OFDeserializer<Action>
         OfjAugNxActionBuilder augNxActionBuilder = new OfjAugNxActionBuilder();
         switch (subtype) {
         case RegMoveCodec.SUBTYPE:
-            augNxActionBuilder.setActionRegMove(regMoveCodec.deserialize(message));
+            augNxActionBuilder.setActionRegMove(NiciraActionCodecs.REG_MOVE_CODEC.deserialize(message));
+            expIdBuilder.setSubType(NxmNxRegMove.class);
             break;
         case RegLoadCodec.SUBTYPE:
-            augNxActionBuilder.setActionRegLoad(regLoadCodec.deserialize(message));
+            augNxActionBuilder.setActionRegLoad(NiciraActionCodecs.REG_LOAD_CODEC.deserialize(message));
+            expIdBuilder.setSubType(NxmNxRegLoad.class);
             break;
         default:
             LOG.info("Action {} does not have any deserializer.", subtype);