Clean up a few factories
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / MeterModInputMessageFactory.java
index 0196b4b42a412c3ac38347c32168c76ba1016100..3b24c92f27bebe287099e51b104e4318174eb93a 100644 (file)
@@ -7,6 +7,10 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import static java.util.Objects.requireNonNull;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint8;
+
 import io.netty.buffer.ByteBuf;
 import java.util.ArrayList;
 import java.util.List;
@@ -30,79 +34,81 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
 
 /**
- * @author giuseppex.petralia@intel.com
+ * Translates MeterModInput messages.
  *
+ * @author giuseppex.petralia@intel.com
  */
 public class MeterModInputMessageFactory implements OFDeserializer<MeterModInput>, DeserializerRegistryInjector {
-
-    private DeserializerRegistry registry;
     private static final byte PADDING_IN_METER_BAND_DROP_HEADER = 4;
     private static final byte PADDING_IN_METER_BAND_DSCP_HEADER = 3;
 
+    private DeserializerRegistry registry = null;
+
     @Override
-    public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) {
-        registry = deserializerRegistry;
+    public void injectDeserializerRegistry(final DeserializerRegistry deserializerRegistry) {
+        registry = requireNonNull(deserializerRegistry);
     }
 
     @Override
-    public MeterModInput deserialize(ByteBuf rawMessage) {
-        MeterModInputBuilder builder = new MeterModInputBuilder();
-        builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
-        builder.setXid(rawMessage.readUnsignedInt());
-        builder.setCommand(MeterModCommand.forValue(rawMessage.readUnsignedShort()));
-        builder.setFlags(createMeterFlags(rawMessage.readUnsignedShort()));
-        builder.setMeterId(new MeterId(rawMessage.readUnsignedInt()));
+    public MeterModInput deserialize(final ByteBuf rawMessage) {
+        MeterModInputBuilder builder = new MeterModInputBuilder()
+                .setVersion(EncodeConstants.OF_VERSION_1_3)
+                .setXid(readUint32(rawMessage))
+                .setCommand(MeterModCommand.forValue(rawMessage.readUnsignedShort()))
+                .setFlags(createMeterFlags(rawMessage.readUnsignedShort()))
+                .setMeterId(new MeterId(readUint32(rawMessage)));
         List<Bands> bandsList = new ArrayList<>();
         while (rawMessage.readableBytes() > 0) {
             BandsBuilder bandsBuilder = new BandsBuilder();
             int bandStartIndex = rawMessage.readerIndex();
             int bandType = rawMessage.readUnsignedShort();
             switch (bandType) {
-            case 1:
-                MeterBandDropCaseBuilder bandDropCaseBuilder = new MeterBandDropCaseBuilder();
-                MeterBandDropBuilder bandDropBuilder = new MeterBandDropBuilder();
-                bandDropBuilder.setType(MeterBandType.forValue(bandType));
-                rawMessage.readUnsignedShort();
-                bandDropBuilder.setRate(rawMessage.readUnsignedInt());
-                bandDropBuilder.setBurstSize(rawMessage.readUnsignedInt());
-                rawMessage.skipBytes(PADDING_IN_METER_BAND_DROP_HEADER);
-                bandDropCaseBuilder.setMeterBandDrop(bandDropBuilder.build());
-                bandsBuilder.setMeterBand(bandDropCaseBuilder.build());
-                break;
-            case 2:
-                MeterBandDscpRemarkCaseBuilder bandDscpRemarkCaseBuilder = new MeterBandDscpRemarkCaseBuilder();
-                MeterBandDscpRemarkBuilder bandDscpRemarkBuilder = new MeterBandDscpRemarkBuilder();
-                bandDscpRemarkBuilder.setType(MeterBandType.forValue(bandType));
-                rawMessage.readUnsignedShort();
-                bandDscpRemarkBuilder.setRate(rawMessage.readUnsignedInt());
-                bandDscpRemarkBuilder.setBurstSize(rawMessage.readUnsignedInt());
-                bandDscpRemarkBuilder.setPrecLevel(rawMessage.readUnsignedByte());
-                rawMessage.skipBytes(PADDING_IN_METER_BAND_DSCP_HEADER);
-                bandDscpRemarkCaseBuilder.setMeterBandDscpRemark(bandDscpRemarkBuilder.build());
-                bandsBuilder.setMeterBand(bandDscpRemarkCaseBuilder.build());
-                break;
-            case 0xFFFF:
-                long expId = rawMessage
-                        .getUnsignedInt(rawMessage.readerIndex() + 2 * EncodeConstants.SIZE_OF_INT_IN_BYTES);
-                rawMessage.readerIndex(bandStartIndex);
-                OFDeserializer<MeterBandExperimenterCase> deserializer = registry
-                        .getDeserializer(ExperimenterDeserializerKeyFactory
-                                .createMeterBandDeserializerKey(EncodeConstants.OF13_VERSION_ID, expId));
-                bandsBuilder.setMeterBand(deserializer.deserialize(rawMessage));
-                break;
+                case 1:
+                    rawMessage.readUnsignedShort();
+                    MeterBandDropBuilder bandDropBuilder = new MeterBandDropBuilder()
+                        .setType(MeterBandType.forValue(bandType))
+                        .setRate(readUint32(rawMessage))
+                        .setBurstSize(readUint32(rawMessage));
+                    rawMessage.skipBytes(PADDING_IN_METER_BAND_DROP_HEADER);
+
+                    bandsBuilder.setMeterBand(new MeterBandDropCaseBuilder()
+                        .setMeterBandDrop(bandDropBuilder.build())
+                        .build());
+                    break;
+                case 2:
+                    rawMessage.readUnsignedShort();
+                    MeterBandDscpRemarkBuilder bandDscpRemarkBuilder = new MeterBandDscpRemarkBuilder()
+                        .setType(MeterBandType.forValue(bandType))
+                        .setRate(readUint32(rawMessage))
+                        .setBurstSize(readUint32(rawMessage))
+                        .setPrecLevel(readUint8(rawMessage));
+                    rawMessage.skipBytes(PADDING_IN_METER_BAND_DSCP_HEADER);
+                    bandsBuilder.setMeterBand(new MeterBandDscpRemarkCaseBuilder()
+                        .setMeterBandDscpRemark(bandDscpRemarkBuilder.build())
+                        .build());
+                    break;
+                case 0xFFFF:
+                    long expId = rawMessage.getUnsignedInt(rawMessage.readerIndex() + 2 * Integer.BYTES);
+                    rawMessage.readerIndex(bandStartIndex);
+                    OFDeserializer<MeterBandExperimenterCase> deserializer = registry
+                            .getDeserializer(ExperimenterDeserializerKeyFactory
+                                    .createMeterBandDeserializerKey(EncodeConstants.OF13_VERSION_ID, expId));
+                    bandsBuilder.setMeterBand(deserializer.deserialize(rawMessage));
+                    break;
+                default:
+                    break;
             }
             bandsList.add(bandsBuilder.build());
         }
-        builder.setBands(bandsList);
-        return builder.build();
+        return builder.setBands(bandsList).build();
     }
 
-    private static MeterFlags createMeterFlags(int input) {
-        final Boolean mfKBPS = (input & (1 << 0)) != 0;
-        final Boolean mfPKTPS = (input & (1 << 1)) != 0;
-        final Boolean mfBURST = (input & (1 << 2)) != 0;
-        final Boolean mfSTATS = (input & (1 << 3)) != 0;
+    @SuppressWarnings("checkstyle:AbbreviationAsWordInName")
+    private static MeterFlags createMeterFlags(final int input) {
+        final Boolean mfKBPS = (input & 1 << 0) != 0;
+        final Boolean mfPKTPS = (input & 1 << 1) != 0;
+        final Boolean mfBURST = (input & 1 << 2) != 0;
+        final Boolean mfSTATS = (input & 1 << 3) != 0;
         return new MeterFlags(mfBURST, mfKBPS, mfPKTPS, mfSTATS);
     }
-
 }