BUG-3823 : fixed sonar issues in linkstate
[bgpcep.git] / bgp / linkstate / src / main / java / org / opendaylight / protocol / bgp / linkstate / attribute / PrefixAttributesParser.java
index 34045a441e9644cbd7a5809d3a9bebcedabd2c02..e5643e48fad616f9d8dbacf5eeea5237ae50dc90 100644 (file)
@@ -13,11 +13,11 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
 import io.netty.buffer.Unpooled;
 import java.util.ArrayList;
-import java.util.BitSet;
 import java.util.List;
 import java.util.Map.Entry;
 import org.opendaylight.protocol.bgp.linkstate.attribute.sr.SrPrefixAttributesParser;
 import org.opendaylight.protocol.bgp.linkstate.spi.TlvUtil;
+import org.opendaylight.protocol.util.BitArray;
 import org.opendaylight.protocol.util.ByteArray;
 import org.opendaylight.protocol.util.Ipv4Util;
 import org.opendaylight.protocol.util.Ipv6Util;
@@ -25,13 +25,13 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.ExtendedRouteTag;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.IgpBits.UpDown;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.RouteTag;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.linkstate.path.attribute.LinkStateAttribute;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.linkstate.path.attribute.link.state.attribute.PrefixAttributesCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.linkstate.path.attribute.link.state.attribute.PrefixAttributesCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.linkstate.path.attribute.link.state.attribute.prefix.attributes._case.PrefixAttributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.linkstate.path.attribute.link.state.attribute.prefix.attributes._case.PrefixAttributesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.IgpBitsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.prefix.state.SrPrefix;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.update.path.attributes.linkstate.path.attribute.LinkStateAttribute;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.update.path.attributes.linkstate.path.attribute.link.state.attribute.PrefixAttributesCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.update.path.attributes.linkstate.path.attribute.link.state.attribute.PrefixAttributesCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.update.path.attributes.linkstate.path.attribute.link.state.attribute.prefix.attributes._case.PrefixAttributes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.update.path.attributes.linkstate.path.attribute.link.state.attribute.prefix.attributes._case.PrefixAttributesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.IgpMetric;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -47,7 +47,9 @@ public final class PrefixAttributesParser {
 
     private static final int ROUTE_TAG_LENGTH = 4;
     private static final int EXTENDED_ROUTE_TAG_LENGTH = 8;
-    private static final int UP_DOWN_BIT = 7;
+
+    private static final int FLAGS_SIZE = 8;
+    private static final int UP_DOWN_BIT = 0;
 
     /* Prefix Attribute TLVs */
     private static final int IGP_FLAGS = 1152;
@@ -76,24 +78,16 @@ public final class PrefixAttributesParser {
             LOG.trace("Prefix attribute TLV {}", key);
             switch (key) {
             case IGP_FLAGS:
-                final BitSet flags = BitSet.valueOf(ByteArray.readAllBytes(value));
+                final BitArray flags = BitArray.valueOf(value, FLAGS_SIZE);
                 final boolean upDownBit = flags.get(UP_DOWN_BIT);
                 builder.setIgpBits(new IgpBitsBuilder().setUpDown(new UpDown(upDownBit)).build());
                 LOG.debug("Parsed IGP flag (up/down bit) : {}", upDownBit);
                 break;
             case ROUTE_TAG:
-                while (value.isReadable()) {
-                    final RouteTag routeTag = new RouteTag(ByteArray.readBytes(value, ROUTE_TAG_LENGTH));
-                    routeTags.add(routeTag);
-                    LOG.debug("Parsed Route Tag: {}", routeTag);
-                }
+                parseRouteTags(routeTags, value);
                 break;
             case EXTENDED_ROUTE_TAG:
-                while (value.isReadable()) {
-                    final ExtendedRouteTag exRouteTag = new ExtendedRouteTag(ByteArray.readBytes(value, EXTENDED_ROUTE_TAG_LENGTH));
-                    exRouteTags.add(exRouteTag);
-                    LOG.debug("Parsed Extended Route Tag: {}", exRouteTag);
-                }
+                parseExtendedRouteTags(exRouteTags, value);
                 break;
             case PREFIX_METRIC:
                 final IgpMetric metric = new IgpMetric(value.readUnsignedInt());
@@ -106,7 +100,9 @@ public final class PrefixAttributesParser {
                 LOG.debug("Parsed FWD Address: {}", fwdAddress);
                 break;
             case PREFIX_OPAQUE:
-                LOG.debug("Parsed Opaque value: {}, not preserving it", ByteBufUtil.hexDump(value));
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Parsed Opaque value: {}, not preserving it", ByteBufUtil.hexDump(value));
+                }
                 break;
             case PREFIX_SID:
                 final SrPrefix prefix = SrPrefixAttributesParser.parseSrPrefix(value);
@@ -123,6 +119,22 @@ public final class PrefixAttributesParser {
         return new PrefixAttributesCaseBuilder().setPrefixAttributes(builder.build()).build();
     }
 
+    private static void parseRouteTags(final List<RouteTag> routeTags, final ByteBuf value) {
+        while (value.isReadable()) {
+            final RouteTag routeTag = new RouteTag(ByteArray.readBytes(value, ROUTE_TAG_LENGTH));
+            routeTags.add(routeTag);
+            LOG.debug("Parsed Route Tag: {}", routeTag);
+        }
+    }
+
+    private static void parseExtendedRouteTags(final List<ExtendedRouteTag> exRouteTags, final ByteBuf value) {
+        while (value.isReadable()) {
+            final ExtendedRouteTag exRouteTag = new ExtendedRouteTag(ByteArray.readBytes(value, EXTENDED_ROUTE_TAG_LENGTH));
+            exRouteTags.add(exRouteTag);
+            LOG.debug("Parsed Extended Route Tag: {}", exRouteTag);
+        }
+    }
+
     private static IpAddress parseForwardingAddress(final ByteBuf value) {
         IpAddress fwdAddress = null;
         switch (value.readableBytes()) {
@@ -141,32 +153,16 @@ public final class PrefixAttributesParser {
     static void serializePrefixAttributes(final PrefixAttributesCase prefixAttributesCase, final ByteBuf byteAggregator) {
         final PrefixAttributes prefixAtrributes = prefixAttributesCase.getPrefixAttributes();
         if (prefixAtrributes.getIgpBits() != null) {
-            final BitSet igpBit = new BitSet();
-            final Boolean bit = prefixAtrributes.getIgpBits().getUpDown().isUpDown();
-            if (bit != null) {
-                igpBit.set(UP_DOWN_BIT, bit);
-            }
-            TlvUtil.writeTLV(IGP_FLAGS, Unpooled.wrappedBuffer(igpBit.toByteArray()), byteAggregator);
+            final BitArray igpBit = new BitArray(FLAGS_SIZE);
+            igpBit.set(UP_DOWN_BIT, prefixAtrributes.getIgpBits().getUpDown().isUpDown());
+            TlvUtil.writeTLV(IGP_FLAGS, Unpooled.wrappedBuffer(igpBit.array()), byteAggregator);
         }
-        if (prefixAtrributes.getRouteTags() != null) {
-            final ByteBuf routeTagsBuf = Unpooled.buffer();
-            for (final RouteTag routeTag : prefixAtrributes.getRouteTags()) {
-                routeTagsBuf.writeBytes(routeTag.getValue());
-            }
-            TlvUtil.writeTLV(ROUTE_TAG, routeTagsBuf, byteAggregator);
-        }
-        final List<ExtendedRouteTag> routeTagList = prefixAtrributes.getExtendedTags();
-        if (routeTagList != null) {
-            final ByteBuf extendedBuf = Unpooled.buffer();
-            for (final ExtendedRouteTag extendedRouteTag : routeTagList) {
-                extendedBuf.writeBytes(extendedRouteTag.getValue());
-            }
-            TlvUtil.writeTLV(EXTENDED_ROUTE_TAG, extendedBuf, byteAggregator);
-        }
-        serializeForwardingAddress(prefixAtrributes.getOspfForwardingAddress(), byteAggregator);
+        serializeRouteTags(prefixAtrributes.getRouteTags(), byteAggregator);
+        serializeExtendedRouteTags(prefixAtrributes.getExtendedTags(), byteAggregator);
         if (prefixAtrributes.getPrefixMetric() != null) {
             TlvUtil.writeTLV(PREFIX_METRIC, Unpooled.copyInt(prefixAtrributes.getPrefixMetric().getValue().intValue()), byteAggregator);
         }
+        serializeForwardingAddress(prefixAtrributes.getOspfForwardingAddress(), byteAggregator);
         if (prefixAtrributes.getSrPrefix() != null) {
             final ByteBuf b = Unpooled.buffer();
             SrPrefixAttributesParser.serializeSrPrefix(prefixAtrributes.getSrPrefix(), b);
@@ -175,6 +171,26 @@ public final class PrefixAttributesParser {
 
     }
 
+    private static void serializeRouteTags(final List<RouteTag> routeTags, final ByteBuf byteAggregator) {
+        if (routeTags != null) {
+            final ByteBuf routeTagsBuf = Unpooled.buffer();
+            for (final RouteTag routeTag : routeTags) {
+                routeTagsBuf.writeBytes(routeTag.getValue());
+            }
+            TlvUtil.writeTLV(ROUTE_TAG, routeTagsBuf, byteAggregator);
+        }
+    }
+
+    private static void serializeExtendedRouteTags(final List<ExtendedRouteTag> exRouteTags, final ByteBuf byteAggregator) {
+        if (exRouteTags != null) {
+            final ByteBuf extendedBuf = Unpooled.buffer();
+            for (final ExtendedRouteTag exRouteTag : exRouteTags) {
+                extendedBuf.writeBytes(exRouteTag.getValue());
+            }
+            TlvUtil.writeTLV(EXTENDED_ROUTE_TAG, extendedBuf, byteAggregator);
+        }
+    }
+
     private static void serializeForwardingAddress(final IpAddress forwardingAddress, final ByteBuf byteAggregator) {
         if (forwardingAddress != null) {
             final ByteBuf ospfBuf = Unpooled.buffer();