Merge "Simplified inheritance within stateful module."
authorRobert Varga <nite@hq.sk>
Tue, 31 Mar 2015 14:47:01 +0000 (14:47 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 31 Mar 2015 14:47:02 +0000 (14:47 +0000)
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/initiated00/CInitiated00LspObjectParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/initiated00/CInitiated00SrpObjectParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/initiated00/CInitiated00StatefulCapabilityTlvParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07LspObjectParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07SrpObjectParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07StatefulCapabilityTlvParser.java

index bd55317c29db3aa22e2898ab1093447b47370c2f..d1ef66b29df7066bc8db5f4b7d69e3530e8f7fd5 100644 (file)
@@ -7,27 +7,16 @@
  */
 package org.opendaylight.protocol.pcep.ietf.initiated00;
 
-import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeMedium;
-
-import com.google.common.base.Preconditions;
-import com.google.common.primitives.UnsignedBytes;
 import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07LspObjectParser;
-import org.opendaylight.protocol.pcep.spi.ObjectUtil;
-import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvRegistry;
 import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry;
 import org.opendaylight.protocol.util.BitArray;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.Lsp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
 
 /**
  * Parser for {@link Lsp}
@@ -41,13 +30,7 @@ public class CInitiated00LspObjectParser extends Stateful07LspObjectParser {
     }
 
     @Override
-    public Lsp parseObject(final ObjectHeader header, final ByteBuf bytes) throws PCEPDeserializerException {
-        Preconditions.checkArgument(bytes != null && bytes.isReadable(), "Array of bytes is mandatory. Can't be null or empty.");
-        final LspBuilder builder = new LspBuilder();
-        builder.setIgnore(header.isIgnore());
-        builder.setProcessingRule(header.isProcessingRule());
-        final int[] plspIdRaw = new int[] { bytes.readUnsignedByte(), bytes.readUnsignedByte(), bytes.getUnsignedByte(2), };
-        builder.setPlspId(new PlspId((long) ((plspIdRaw[0] << FLAGS_SIZE) | (plspIdRaw[1] << FOUR_BITS_SHIFT) | (plspIdRaw[2] >> FOUR_BITS_SHIFT))));
+    protected void parseFlags(final LspBuilder builder, final ByteBuf bytes) {
         final BitArray flags = BitArray.valueOf(bytes, FLAGS_SIZE);
         builder.setDelegate(flags.get(DELEGATE));
         builder.setSync(flags.get(SYNC));
@@ -59,19 +42,10 @@ public class CInitiated00LspObjectParser extends Stateful07LspObjectParser {
         s |= (flags.get(OPERATIONAL + 1) ? 1 : 0) << 1;
         s |= (flags.get(OPERATIONAL) ? 1 : 0) << 2;
         builder.setOperational(OperationalStatus.forValue(s));
-        final TlvsBuilder b = new TlvsBuilder();
-        parseTlvs(b, bytes.slice());
-        builder.setTlvs(b.build());
-        return builder.build();
     }
 
     @Override
-    public void serializeObject(final Object object, final ByteBuf buffer) {
-        Preconditions.checkArgument(object instanceof Lsp, "Wrong instance of PCEPObject. Passed %s. Needed LspObject.", object.getClass());
-        final Lsp specObj = (Lsp) object;
-        final ByteBuf body = Unpooled.buffer();
-        Preconditions.checkArgument(specObj.getPlspId() != null, "PLSP-ID not present");
-        writeMedium(specObj.getPlspId().getValue().intValue() << FOUR_BITS_SHIFT, body);
+    protected BitArray serializeFlags(final Lsp specObj) {
         final BitArray flags = new BitArray(FLAGS_SIZE);
         flags.set(DELEGATE, specObj.isDelegate());
         flags.set(REMOVE, specObj.isRemove());
@@ -80,15 +54,6 @@ public class CInitiated00LspObjectParser extends Stateful07LspObjectParser {
         if (specObj.getAugmentation(Lsp1.class) != null) {
             flags.set(CREATE_FLAG_OFFSET, specObj.getAugmentation(Lsp1.class).isCreate());
         }
-        byte op = 0;
-        if (specObj.getOperational() != null) {
-            op = UnsignedBytes.checkedCast(specObj.getOperational().getIntValue());
-            op = (byte) (op << FOUR_BITS_SHIFT);
-        }
-        final byte[] res = flags.array();
-        res[res.length -1] = (byte) (res[res.length -1] | op);
-        body.writeByte(res[res.length -1]);
-        serializeTlvs(specObj.getTlvs(), body);
-        ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), body, buffer);
+        return flags;
     }
 }
index 42c726fa9363ce406baeb5039a13c05ee3e0d09f..3229aca7b6d9ecb6a12376d516f0e48f15d8adcc 100644 (file)
@@ -7,25 +7,15 @@
  */
 package org.opendaylight.protocol.pcep.ietf.initiated00;
 
-import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedInt;
-
-import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07SrpObjectParser;
-import org.opendaylight.protocol.pcep.spi.ObjectUtil;
-import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvRegistry;
 import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry;
 import org.opendaylight.protocol.util.BitArray;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.Srp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
 
 /**
  * Parser for {@link Srp}
@@ -39,37 +29,17 @@ public class CInitiated00SrpObjectParser extends Stateful07SrpObjectParser {
     }
 
     @Override
-    public Srp parseObject(final ObjectHeader header, final ByteBuf bytes) throws PCEPDeserializerException {
-        Preconditions.checkArgument(bytes != null && bytes.isReadable(), "Array of bytes is mandatory. Can't be null or empty.");
-        if (bytes.readableBytes() < MIN_SIZE) {
-            throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + bytes.readableBytes() + "; Expected: >="
-                    + MIN_SIZE + ".");
-        }
-        final SrpBuilder builder = new SrpBuilder();
-        builder.setIgnore(header.isIgnore());
-        builder.setProcessingRule(header.isProcessingRule());
+    protected void parseFlags(final SrpBuilder builder, final ByteBuf bytes) {
         final BitArray flags = BitArray.valueOf(bytes, FLAGS_SIZE);
         builder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(flags.get(REMOVE_FLAG)).build());
-        builder.setOperationId(new SrpIdNumber(bytes.readUnsignedInt()));
-        final TlvsBuilder tlvsBuilder = new TlvsBuilder();
-        parseTlvs(tlvsBuilder, bytes.slice());
-        builder.setTlvs(tlvsBuilder.build());
-        return builder.build();
     }
 
     @Override
-    public void serializeObject(final Object object, final ByteBuf buffer) {
-        Preconditions.checkArgument(object instanceof Srp, "Wrong instance of PCEPObject. Passed %s. Needed SrpObject.", object.getClass());
-        final Srp srp = (Srp) object;
-        final ByteBuf body = Unpooled.buffer();
+    protected void serializeFlags(final Srp srp, final ByteBuf body) {
         final BitArray flags = new BitArray(FLAGS_SIZE);
         if (srp.getAugmentation(Srp1.class) != null) {
             flags.set(REMOVE_FLAG, srp.getAugmentation(Srp1.class).isRemove());
         }
         flags.toByteBuf(body);
-        Preconditions.checkArgument(srp.getOperationId() != null, "OperationId is mandatory.");
-        writeUnsignedInt(srp.getOperationId().getValue(), body);
-        serializeTlvs(srp.getTlvs(), body);
-        ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), body, buffer);
     }
 }
index 493b9e7bd3a5854d4cd691d369d57b458bf17c1b..1935c3a155862e12bb1372cbcad7ee89900fdae3 100644 (file)
@@ -7,18 +7,13 @@
  */
 package org.opendaylight.protocol.pcep.ietf.initiated00;
 
-import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07StatefulCapabilityTlvParser;
-import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.spi.TlvUtil;
 import org.opendaylight.protocol.util.BitArray;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Stateful1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Stateful1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.Stateful;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
 
 /**
  * Parser for {@link Stateful}
@@ -28,33 +23,22 @@ public final class CInitiated00StatefulCapabilityTlvParser extends Stateful07Sta
     private static final int I_FLAG_OFFSET = 29;
 
     @Override
-    public Stateful parseTlv(final ByteBuf buffer) throws PCEPDeserializerException {
-        if (buffer == null) {
-            return null;
-        }
-        if (buffer.readableBytes() < FLAGS_F_LENGTH / Byte.SIZE) {
-            throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.readableBytes() + "; Expected: >= "
-                    + FLAGS_F_LENGTH / Byte.SIZE + ".");
-        }
+    protected void parseFlags(final StatefulBuilder sb, final ByteBuf buffer) {
         final BitArray flags = BitArray.valueOf(buffer, FLAGS_F_LENGTH);
-        final StatefulBuilder sb = new StatefulBuilder();
         sb.setLspUpdateCapability(flags.get(U_FLAG_OFFSET));
         if (flags.get(I_FLAG_OFFSET)) {
             sb.addAugmentation(Stateful1.class, new Stateful1Builder().setInitiation(Boolean.TRUE).build());
         }
-        return sb.build();
     }
 
     @Override
-    public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
-        Preconditions.checkArgument(tlv instanceof Stateful, "StatefulCapabilityTlv is mandatory.");
-        final Stateful sct = (Stateful) tlv;
+    protected BitArray serializeFlags(final Stateful sct) {
         final BitArray flags = new BitArray(FLAGS_F_LENGTH);
         final Stateful1 sfi = sct.getAugmentation(Stateful1.class);
         if (sfi != null) {
             flags.set(I_FLAG_OFFSET, sfi.isInitiation());
         }
         flags.set(U_FLAG_OFFSET, sct.isLspUpdateCapability());
-        TlvUtil.formatTlv(TYPE, Unpooled.wrappedBuffer(flags.array()), buffer);
+        return flags;
     }
 }
index 824659286faa66fc6957ea5a7f9e6f72442e3ffb..e4b496fd634f9b3a9e940e23a4fcfbff856e5029 100644 (file)
@@ -69,6 +69,14 @@ public class Stateful07LspObjectParser extends AbstractObjectWithTlvsParser<Tlvs
         builder.setProcessingRule(header.isProcessingRule());
         final int[] plspIdRaw = new int[] { bytes.readUnsignedByte(), bytes.readUnsignedByte(), bytes.getUnsignedByte(2), };
         builder.setPlspId(new PlspId((long) ((plspIdRaw[0] << FLAGS_SIZE) | (plspIdRaw[1] << FOUR_BITS_SHIFT) | (plspIdRaw[2] >> FOUR_BITS_SHIFT))));
+        parseFlags(builder, bytes);
+        final TlvsBuilder b = new TlvsBuilder();
+        parseTlvs(b, bytes.slice());
+        builder.setTlvs(b.build());
+        return builder.build();
+    }
+
+    protected void parseFlags(final LspBuilder builder, final ByteBuf bytes) {
         final BitArray flags = BitArray.valueOf(bytes, FLAGS_SIZE);
         builder.setDelegate(flags.get(DELEGATE));
         builder.setSync(flags.get(SYNC));
@@ -79,10 +87,6 @@ public class Stateful07LspObjectParser extends AbstractObjectWithTlvsParser<Tlvs
         s |= (flags.get(OPERATIONAL + 1) ? 1 : 0) << 1;
         s |= (flags.get(OPERATIONAL) ? 1 : 0) << 2;
         builder.setOperational(OperationalStatus.forValue(s));
-        final TlvsBuilder b = new TlvsBuilder();
-        parseTlvs(b, bytes.slice());
-        builder.setTlvs(b.build());
-        return builder.build();
     }
 
     @Override
@@ -107,11 +111,7 @@ public class Stateful07LspObjectParser extends AbstractObjectWithTlvsParser<Tlvs
         final ByteBuf body = Unpooled.buffer();
         Preconditions.checkArgument(specObj.getPlspId() != null, "PLSP-ID not present");
         writeMedium(specObj.getPlspId().getValue().intValue() << FOUR_BITS_SHIFT, body);
-        final BitArray flags = new BitArray(FLAGS_SIZE);
-        flags.set(DELEGATE, specObj.isDelegate());
-        flags.set(REMOVE, specObj.isRemove());
-        flags.set(SYNC, specObj.isSync());
-        flags.set(ADMINISTRATIVE, specObj.isAdministrative());
+        final BitArray flags = serializeFlags(specObj);
         byte op = 0;
         if (specObj.getOperational() != null) {
             op = UnsignedBytes.checkedCast(specObj.getOperational().getIntValue());
@@ -124,6 +124,15 @@ public class Stateful07LspObjectParser extends AbstractObjectWithTlvsParser<Tlvs
         ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), body, buffer);
     }
 
+    protected BitArray serializeFlags(final Lsp specObj) {
+        final BitArray flags = new BitArray(FLAGS_SIZE);
+        flags.set(DELEGATE, specObj.isDelegate());
+        flags.set(REMOVE, specObj.isRemove());
+        flags.set(SYNC, specObj.isSync());
+        flags.set(ADMINISTRATIVE, specObj.isAdministrative());
+        return flags;
+    }
+
     public void serializeTlvs(final Tlvs tlvs, final ByteBuf body) {
         if (tlvs == null) {
             return;
index 184271776c8d6674c4deae87ef77a1ffd0a2bb19..2016f37a829ea36ec4758196653e2cda20855d85 100644 (file)
@@ -59,7 +59,7 @@ public class Stateful07SrpObjectParser extends AbstractObjectWithTlvsParser<Tlvs
         final SrpBuilder builder = new SrpBuilder();
         builder.setIgnore(header.isIgnore());
         builder.setProcessingRule(header.isProcessingRule());
-        bytes.skipBytes(FLAGS_SIZE / Byte.SIZE);
+        parseFlags(builder, bytes);
         builder.setOperationId(new SrpIdNumber(bytes.readUnsignedInt()));
         final TlvsBuilder tlvsBuilder = new TlvsBuilder();
         parseTlvs(tlvsBuilder, bytes.slice());
@@ -67,6 +67,10 @@ public class Stateful07SrpObjectParser extends AbstractObjectWithTlvsParser<Tlvs
         return builder.build();
     }
 
+    protected void parseFlags(final SrpBuilder builder, final ByteBuf bytes) {
+        bytes.skipBytes(FLAGS_SIZE / Byte.SIZE);
+    }
+
     @Override
     public void addTlv(final TlvsBuilder builder, final Tlv tlv) {
         if (tlv instanceof SymbolicPathName) {
@@ -82,7 +86,7 @@ public class Stateful07SrpObjectParser extends AbstractObjectWithTlvsParser<Tlvs
         Preconditions.checkArgument(object instanceof Srp, "Wrong instance of PCEPObject. Passed %s . Needed SrpObject.", object.getClass());
         final Srp srp = (Srp) object;
         final ByteBuf body = Unpooled.buffer();
-        body.writeZero(FLAGS_SIZE / Byte.SIZE);
+        serializeFlags(srp, body);
         final SrpIdNumber srpId = srp.getOperationId();
         Preconditions.checkArgument(srpId != null, "SrpId is mandatory.");
         writeUnsignedInt(srpId.getValue(), body);
@@ -90,6 +94,10 @@ public class Stateful07SrpObjectParser extends AbstractObjectWithTlvsParser<Tlvs
         ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), body, buffer);
     }
 
+    protected void serializeFlags(final Srp srp, final ByteBuf body) {
+        body.writeZero(FLAGS_SIZE / Byte.SIZE);
+    }
+
     public void serializeTlvs(final Tlvs tlvs, final ByteBuf body) {
         if (tlvs == null) {
             return;
index ba863fbedc55f6cb3ec282d3daec33683a30201e..a1883d828adc2d72ac84eef33baed77761d14caf 100644 (file)
@@ -39,18 +39,26 @@ public class Stateful07StatefulCapabilityTlvParser implements TlvParser, TlvSeri
             throw new PCEPDeserializerException("Wrong length of array of bytes. Passed: " + buffer.readableBytes() + "; Expected: >= "
                     + FLAGS_F_LENGTH / Byte.SIZE + ".");
         }
-        final BitArray flags = BitArray.valueOf(buffer, FLAGS_F_LENGTH);
         final StatefulBuilder sb = new StatefulBuilder();
-        sb.setLspUpdateCapability(flags.get(U_FLAG_OFFSET));
+        parseFlags(sb, buffer);
         return sb.build();
     }
 
+    protected void parseFlags(final StatefulBuilder sb, final ByteBuf buffer) {
+        final BitArray flags = BitArray.valueOf(buffer, FLAGS_F_LENGTH);
+        sb.setLspUpdateCapability(flags.get(U_FLAG_OFFSET));
+    }
+
     @Override
     public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
         Preconditions.checkArgument(tlv instanceof Stateful, "StatefulCapabilityTlv is mandatory.");
         final Stateful sct = (Stateful) tlv;
+        TlvUtil.formatTlv(TYPE, Unpooled.wrappedBuffer(serializeFlags(sct).array()), buffer);
+    }
+
+    protected BitArray serializeFlags(final Stateful sct) {
         final BitArray flags = new BitArray(FLAGS_F_LENGTH);
         flags.set(U_FLAG_OFFSET, sct.isLspUpdateCapability());
-        TlvUtil.formatTlv(TYPE, Unpooled.wrappedBuffer(flags.array()), buffer);
+        return flags;
     }
 }