Sonar issue fixed. 68/24268/1
authorDana Kutenicsova <dkutenic@cisco.com>
Sun, 19 Jul 2015 20:13:20 +0000 (22:13 +0200)
committerDana Kutenicsova <dkutenic@cisco.com>
Sun, 19 Jul 2015 20:13:20 +0000 (22:13 +0200)
serializeNlri() was too complex, split it into
various small methods.

Change-Id: Ibc6623f379beaa077bee193b5d0721504d976dfe
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
bgp/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/FSNlriParser.java

index ba9459835538293e9ac78c15e053ecb743e15374..fe02d1cd0318183534fa43941db8c646ff42ba48 100644 (file)
@@ -250,63 +250,7 @@ public class FSNlriParser implements NlriParser, NlriSerializer {
     public static void serializeNlri(final List<Flowspec> flows, final ByteBuf buffer) {
         final ByteBuf nlriByteBuf = Unpooled.buffer();
         for (final Flowspec flow : flows) {
-            nlriByteBuf.writeByte(flow.getComponentType().getIntValue());
-            final FlowspecType value = flow.getFlowspecType();
-            switch (flow.getComponentType()) {
-            case DestinationPrefix:
-                nlriByteBuf.writeBytes(Ipv4Util.bytesForPrefixBegin(((DestinationPrefixCase) value).getDestinationPrefix()));
-                break;
-            case SourcePrefix:
-                nlriByteBuf.writeBytes(Ipv4Util.bytesForPrefixBegin(((SourcePrefixCase) value).getSourcePrefix()));
-                break;
-            case ProtocolIp:
-                serializeNumericTwoByteValue(((ProtocolIpCase) value).getProtocolIps(), nlriByteBuf);
-                break;
-            case Port:
-                serializeNumericTwoByteValue(((PortCase) value).getPorts(), nlriByteBuf);
-                break;
-            case DestinationPort:
-                serializeNumericTwoByteValue(((DestinationPortCase) value).getDestinationPorts(), nlriByteBuf);
-                break;
-            case SourcePort:
-                serializeNumericTwoByteValue(((SourcePortCase) value).getSourcePorts(), nlriByteBuf);
-                break;
-            case IcmpType:
-                serializeNumericOneByteValue(((IcmpTypeCase) value).getTypes(), nlriByteBuf);
-                break;
-            case IcmpCode:
-                serializeNumericOneByteValue(((IcmpCodeCase) value).getCodes(), nlriByteBuf);
-                break;
-            case TcpFlags:
-                final List<TcpFlags> flags = ((TcpFlagsCase) value).getTcpFlags();
-                for (final TcpFlags flag : flags) {
-                    final ByteBuf flagsBuf = Unpooled.buffer();
-                    writeShortest(flag.getValue(), flagsBuf);
-                    serializeBitmaskOperand(flag.getOp(), flagsBuf.readableBytes(), nlriByteBuf);
-                    nlriByteBuf.writeBytes(flagsBuf);
-                }
-                break;
-            case PacketLength:
-                serializeNumericTwoByteValue(((PacketLengthCase) value).getPacketLengths(), nlriByteBuf);
-                break;
-            case Dscp:
-                final List<Dscps> dscps = ((DscpCase) value).getDscps();
-                for (final Dscps dscp : dscps) {
-                    serializeNumericOperand(dscp.getOp(), 1, nlriByteBuf);
-                    writeShortest(dscp.getValue().getValue(), nlriByteBuf);
-                }
-                break;
-            case Fragment:
-                final List<Fragments> fragments = ((FragmentCase) value).getFragments();
-                for (final Fragments fragment : fragments) {
-                    serializeBitmaskOperand(fragment.getOp(), 1, nlriByteBuf);
-                    nlriByteBuf.writeByte(serializeFragment(fragment.getValue()));
-                }
-                break;
-            default:
-                LOG.warn("Unknown Component Type.");
-                break;
-            }
+            serializeFlowspec(flow, nlriByteBuf);
         }
         Preconditions.checkState(nlriByteBuf.readableBytes() <= MAX_NLRI_LENGTH, "Maximum length of Flowspec NLRI reached.");
         if (nlriByteBuf.readableBytes() <= MAX_NLRI_LENGTH_ONE_BYTE) {
@@ -317,6 +261,52 @@ public class FSNlriParser implements NlriParser, NlriSerializer {
         buffer.writeBytes(nlriByteBuf);
     }
 
+    private static void serializeFlowspec(final Flowspec flow, final ByteBuf nlriByteBuf) {
+        nlriByteBuf.writeByte(flow.getComponentType().getIntValue());
+        final FlowspecType value = flow.getFlowspecType();
+        switch (flow.getComponentType()) {
+        case DestinationPrefix:
+            nlriByteBuf.writeBytes(Ipv4Util.bytesForPrefixBegin(((DestinationPrefixCase) value).getDestinationPrefix()));
+            break;
+        case SourcePrefix:
+            nlriByteBuf.writeBytes(Ipv4Util.bytesForPrefixBegin(((SourcePrefixCase) value).getSourcePrefix()));
+            break;
+        case ProtocolIp:
+            serializeNumericTwoByteValue(((ProtocolIpCase) value).getProtocolIps(), nlriByteBuf);
+            break;
+        case Port:
+            serializeNumericTwoByteValue(((PortCase) value).getPorts(), nlriByteBuf);
+            break;
+        case DestinationPort:
+            serializeNumericTwoByteValue(((DestinationPortCase) value).getDestinationPorts(), nlriByteBuf);
+            break;
+        case SourcePort:
+            serializeNumericTwoByteValue(((SourcePortCase) value).getSourcePorts(), nlriByteBuf);
+            break;
+        case IcmpType:
+            serializeNumericOneByteValue(((IcmpTypeCase) value).getTypes(), nlriByteBuf);
+            break;
+        case IcmpCode:
+            serializeNumericOneByteValue(((IcmpCodeCase) value).getCodes(), nlriByteBuf);
+            break;
+        case TcpFlags:
+            serializeTcpFlags(((TcpFlagsCase) value).getTcpFlags(), nlriByteBuf);
+            break;
+        case PacketLength:
+            serializeNumericTwoByteValue(((PacketLengthCase) value).getPacketLengths(), nlriByteBuf);
+            break;
+        case Dscp:
+            serializeDscps(((DscpCase) value).getDscps(), nlriByteBuf);
+            break;
+        case Fragment:
+            serializeFragments(((FragmentCase) value).getFragments(), nlriByteBuf);
+            break;
+        default:
+            LOG.warn("Unknown Component Type.");
+            break;
+        }
+    }
+
     /**
      * Given the integer values, this method instead of writing the value
      * in 4B field, compresses the value to lowest required byte field
@@ -358,6 +348,29 @@ public class FSNlriParser implements NlriParser, NlriSerializer {
         buffer.writeByte(bs.toByte() | len);
     }
 
+    private static void serializeTcpFlags(final List<TcpFlags> flags, final ByteBuf nlriByteBuf) {
+        for (final TcpFlags flag : flags) {
+            final ByteBuf flagsBuf = Unpooled.buffer();
+            writeShortest(flag.getValue(), flagsBuf);
+            serializeBitmaskOperand(flag.getOp(), flagsBuf.readableBytes(), nlriByteBuf);
+            nlriByteBuf.writeBytes(flagsBuf);
+        }
+    }
+
+    private static void serializeDscps(final List<Dscps> dscps, final ByteBuf nlriByteBuf) {
+        for (final Dscps dscp : dscps) {
+            serializeNumericOperand(dscp.getOp(), 1, nlriByteBuf);
+            writeShortest(dscp.getValue().getValue(), nlriByteBuf);
+        }
+    }
+
+    private static void serializeFragments(final List<Fragments> fragments, final ByteBuf nlriByteBuf) {
+        for (final Fragments fragment : fragments) {
+            serializeBitmaskOperand(fragment.getOp(), 1, nlriByteBuf);
+            nlriByteBuf.writeByte(serializeFragment(fragment.getValue()));
+        }
+    }
+
     @Override
     public void parseNlri(final ByteBuf nlri, final MpUnreachNlriBuilder builder) throws BGPParsingException {
         if (!nlri.isReadable()) {