BUG-2794 : refactored code to use BitArray
[bgpcep.git] / pcep / impl / src / main / java / org / opendaylight / protocol / pcep / impl / tlv / NoPathVectorTlvParser.java
index 84ad0f116e05c866bc74208ffb90630662208f37..f8822f8efb60a1fdbfdf62e7acbba3914a19e6b5 100644 (file)
@@ -10,13 +10,11 @@ package org.opendaylight.protocol.pcep.impl.tlv;
 import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-import java.util.BitSet;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvParser;
 import org.opendaylight.protocol.pcep.spi.TlvSerializer;
 import org.opendaylight.protocol.pcep.spi.TlvUtil;
-import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.protocol.util.ByteBufWriteUtil;
+import org.opendaylight.protocol.util.BitArray;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathVectorTlv.Flags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure._case.no.path.tlvs.NoPathVector;
@@ -29,7 +27,7 @@ public class NoPathVectorTlvParser implements TlvParser, TlvSerializer {
 
     public static final int TYPE = 1;
 
-    private static final int FLAGS_F_LENGTH = 4;
+    private static final int FLAGS_SIZE = 32;
 
     private static final int REACHABLITY_PROBLEM = 24;
     private static final int NO_GCO_SOLUTION = 25;
@@ -45,11 +43,11 @@ public class NoPathVectorTlvParser implements TlvParser, TlvSerializer {
         if (buffer == null) {
             return null;
         }
-        if (buffer.readableBytes() != FLAGS_F_LENGTH) {
+        if (buffer.readableBytes() != FLAGS_SIZE / Byte.SIZE) {
             throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.readableBytes() + "; Expected: >="
-                    + FLAGS_F_LENGTH + ".");
+                    + FLAGS_SIZE / Byte.SIZE + ".");
         }
-        final BitSet flags = ByteArray.bytesToBitSet(ByteArray.readAllBytes(buffer));
+        final BitArray flags = BitArray.valueOf(buffer, FLAGS_SIZE);
         return new NoPathVectorBuilder().setFlags(
                 new Flags(flags.get(CHAIN_UNAVAILABLE), flags.get(NO_GCO_MIGRATION_PATH), flags.get(NO_GCO_SOLUTION), flags.get(REACHABLITY_PROBLEM), flags.get(PATH_KEY), flags.get(PCE_UNAVAILABLE), flags.get(UNKNOWN_DEST), flags.get(UNKNOWN_SRC))).build();
     }
@@ -59,33 +57,17 @@ public class NoPathVectorTlvParser implements TlvParser, TlvSerializer {
         Preconditions.checkArgument(tlv instanceof NoPathVector, "NoPathVectorTlv is mandatory.");
         final NoPathVector noPath = (NoPathVector) tlv;
         final ByteBuf body = Unpooled.buffer();
-        final BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE);
-        Flags f = noPath.getFlags();
-        if (f.isP2mpUnreachable() != null) {
-            flags.set(REACHABLITY_PROBLEM, f.isP2mpUnreachable());
-        }
-        if (f.isNoGcoSolution() != null) {
-            flags.set(NO_GCO_SOLUTION, f.isNoGcoSolution());
-        }
-        if (f.isNoGcoMigration() != null) {
-            flags.set(NO_GCO_MIGRATION_PATH, f.isNoGcoMigration());
-        }
-        if (f.isPathKey() != null) {
-            flags.set(PATH_KEY, f.isPathKey());
-        }
-        if (f.isChainUnavailable() != null) {
-            flags.set(CHAIN_UNAVAILABLE, f.isChainUnavailable());
-        }
-        if (f.isUnknownSource() != null) {
-            flags.set(UNKNOWN_SRC, f.isUnknownSource());
-        }
-        if (f.isUnknownDestination() != null) {
-            flags.set(UNKNOWN_DEST, f.isUnknownDestination());
-        }
-        if (f.isPceUnavailable() != null) {
-            flags.set(PCE_UNAVAILABLE, f.isPceUnavailable());
-        }
-        ByteBufWriteUtil.writeBitSet(flags, FLAGS_F_LENGTH, body);
+        final BitArray flags = new BitArray(FLAGS_SIZE);
+        final Flags f = noPath.getFlags();
+        flags.set(REACHABLITY_PROBLEM, f.isP2mpUnreachable());
+        flags.set(NO_GCO_SOLUTION, f.isNoGcoSolution());
+        flags.set(NO_GCO_MIGRATION_PATH, f.isNoGcoMigration());
+        flags.set(PATH_KEY, f.isPathKey());
+        flags.set(CHAIN_UNAVAILABLE, f.isChainUnavailable());
+        flags.set(UNKNOWN_SRC, f.isUnknownSource());
+        flags.set(UNKNOWN_DEST, f.isUnknownDestination());
+        flags.set(PCE_UNAVAILABLE, f.isPceUnavailable());
+        flags.toByteBuf(body);
         TlvUtil.formatTlv(TYPE, body, buffer);
     }
 }