Bump MRI upstreams
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / FlowModInputMessageFactory.java
index 966b30ace8317b8794bbf2c142412cac9a3a0c77..3642c54b0fa06b01417cf06e847e247086077bb4 100644 (file)
@@ -7,18 +7,20 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import static java.util.Objects.requireNonNull;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint16;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint64;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint8;
+
 import io.netty.buffer.ByteBuf;
-import java.math.BigInteger;
-import java.util.List;
 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.keys.MessageCodeKey;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.openflowjava.protocol.impl.util.CodeKeyMaker;
 import org.opendaylight.openflowjava.protocol.impl.util.CodeKeyMakerFactory;
 import org.opendaylight.openflowjava.protocol.impl.util.ListDeserializer;
-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.FlowModCommand;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
@@ -31,54 +33,50 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  * Translates FlowModInput messages.
  */
 public class FlowModInputMessageFactory implements OFDeserializer<FlowModInput>, DeserializerRegistryInjector {
-
     private static final byte PADDING = 2;
-    private DeserializerRegistry registry;
+
+    private DeserializerRegistry registry = null;
 
     @Override
-    public FlowModInput deserialize(ByteBuf rawMessage) {
-        FlowModInputBuilder builder = new FlowModInputBuilder();
-        builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
-        builder.setXid(rawMessage.readUnsignedInt());
-        byte[] cookie = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
-        rawMessage.readBytes(cookie);
-        builder.setCookie(new BigInteger(1, cookie));
-        final byte[] cookieMask = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
-        rawMessage.readBytes(cookieMask);
-        builder.setCookieMask(new BigInteger(1, cookieMask));
-        builder.setTableId(new TableId((long) rawMessage.readUnsignedByte()));
-        builder.setCommand(FlowModCommand.forValue(rawMessage.readUnsignedByte()));
-        builder.setIdleTimeout(rawMessage.readUnsignedShort());
-        builder.setHardTimeout(rawMessage.readUnsignedShort());
-        builder.setPriority(rawMessage.readUnsignedShort());
-        builder.setBufferId(rawMessage.readUnsignedInt());
-        builder.setOutPort(new PortNumber(rawMessage.readUnsignedInt()));
-        builder.setOutGroup(rawMessage.readUnsignedInt());
-        builder.setFlags(createFlowModFlagsFromBitmap(rawMessage.readUnsignedShort()));
+    public FlowModInput deserialize(final ByteBuf rawMessage) {
+        FlowModInputBuilder builder = new FlowModInputBuilder()
+                .setVersion(EncodeConstants.OF_VERSION_1_3)
+                .setXid(readUint32(rawMessage))
+                .setCookie(readUint64(rawMessage))
+                .setCookieMask(readUint64(rawMessage))
+                .setTableId(new TableId(readUint8(rawMessage).toUint32()))
+                .setCommand(FlowModCommand.forValue(rawMessage.readUnsignedByte()))
+                .setIdleTimeout(readUint16(rawMessage))
+                .setHardTimeout(readUint16(rawMessage))
+                .setPriority(readUint16(rawMessage))
+                .setBufferId(readUint32(rawMessage))
+                .setOutPort(new PortNumber(readUint32(rawMessage)))
+                .setOutGroup(readUint32(rawMessage))
+                .setFlags(createFlowModFlagsFromBitmap(rawMessage.readUnsignedShort()));
         rawMessage.skipBytes(PADDING);
         OFDeserializer<Match> matchDeserializer = registry.getDeserializer(
-                new MessageCodeKey(EncodeConstants.OF13_VERSION_ID, EncodeConstants.EMPTY_VALUE, Match.class));
-        builder.setMatch(matchDeserializer.deserialize(rawMessage));
-        CodeKeyMaker keyMaker = CodeKeyMakerFactory.createInstructionsKeyMaker(EncodeConstants.OF13_VERSION_ID);
-        List<Instruction> instructions = ListDeserializer.deserializeList(EncodeConstants.OF13_VERSION_ID,
-                rawMessage.readableBytes(), rawMessage, keyMaker, registry);
-        builder.setInstruction(instructions);
-        return builder.build();
+                new MessageCodeKey(EncodeConstants.OF_VERSION_1_3, EncodeConstants.EMPTY_VALUE, Match.class));
+        return builder
+            .setMatch(matchDeserializer.deserialize(rawMessage))
+            .setInstruction(ListDeserializer.deserializeList(EncodeConstants.OF13_VERSION_ID,
+                rawMessage.readableBytes(), rawMessage,
+                CodeKeyMakerFactory.createInstructionsKeyMaker(EncodeConstants.OF_VERSION_1_3), registry))
+            .build();
     }
 
     @SuppressWarnings("checkstyle:AbbreviationAsWordInName")
-    private static FlowModFlags createFlowModFlagsFromBitmap(int input) {
-        final Boolean _oFPFFSENDFLOWREM = (input & 1 << 0) > 0;
-        final Boolean _oFPFFCHECKOVERLAP = (input & 1 << 1) > 0;
-        final Boolean _oFPFFRESETCOUNTS = (input & 1 << 2) > 0;
-        final Boolean _oFPFFNOPKTCOUNTS = (input & 1 << 3) > 0;
-        final Boolean _oFPFFNOBYTCOUNTS = (input & 1 << 4) > 0;
+    private static FlowModFlags createFlowModFlagsFromBitmap(final int input) {
+        final Boolean _oFPFFSENDFLOWREM = (input & 1 << 0) != 0;
+        final Boolean _oFPFFCHECKOVERLAP = (input & 1 << 1) != 0;
+        final Boolean _oFPFFRESETCOUNTS = (input & 1 << 2) != 0;
+        final Boolean _oFPFFNOPKTCOUNTS = (input & 1 << 3) != 0;
+        final Boolean _oFPFFNOBYTCOUNTS = (input & 1 << 4) != 0;
         return new FlowModFlags(_oFPFFCHECKOVERLAP, _oFPFFNOBYTCOUNTS, _oFPFFNOPKTCOUNTS, _oFPFFRESETCOUNTS,
                 _oFPFFSENDFLOWREM);
     }
 
     @Override
-    public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) {
-        registry = deserializerRegistry;
+    public void injectDeserializerRegistry(final DeserializerRegistry deserializerRegistry) {
+        registry = requireNonNull(deserializerRegistry);
     }
 }