BUG-2982 : moved path-attributes container to grouping
[bgpcep.git] / bgp / parser-impl / src / main / java / org / opendaylight / protocol / bgp / parser / impl / message / update / ClusterIdAttributeParser.java
index 97f68e8da0a8c4dcbb708f3755c17cf0b50de9e7..495c1d1c5f6958171bcfb5fed3083be600cee5b4 100644 (file)
@@ -7,47 +7,46 @@
  */
 package org.opendaylight.protocol.bgp.parser.impl.message.update;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import java.util.List;
-import org.opendaylight.protocol.bgp.parser.AttributeFlags;
 import org.opendaylight.protocol.bgp.parser.spi.AttributeParser;
 import org.opendaylight.protocol.bgp.parser.spi.AttributeSerializer;
-import org.opendaylight.protocol.util.ByteArray;
+import org.opendaylight.protocol.bgp.parser.spi.AttributeUtil;
 import org.opendaylight.protocol.util.Ipv4Util;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.PathAttributes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.PathAttributesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.Attributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AttributesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.ClusterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.ClusterIdBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ClusterIdentifier;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 
 public final class ClusterIdAttributeParser implements AttributeParser, AttributeSerializer {
 
     public static final int TYPE = 10;
-    public static final int ATTR_LENGTH = 4;
 
     @Override
-    public void parseAttribute(final ByteBuf buffer, final PathAttributesBuilder builder) {
+    public void parseAttribute(final ByteBuf buffer, final AttributesBuilder builder) {
         final List<ClusterIdentifier> list = Lists.newArrayList();
         while (buffer.isReadable()) {
-            list.add(new ClusterIdentifier(Ipv4Util.addressForBytes(ByteArray.readBytes(buffer, ATTR_LENGTH))));
+            list.add(new ClusterIdentifier(Ipv4Util.addressForByteBuf(buffer)));
         }
-        builder.setClusterId(list);
+        builder.setClusterId(new ClusterIdBuilder().setCluster(list).build());
     }
 
     @Override
-    public void serializeAttribute(DataObject attribute, ByteBuf byteAggregator) {
-        PathAttributes pathAttributes = (PathAttributes) attribute;
-        if (pathAttributes.getClusterId() == null) {
+    public void serializeAttribute(final DataObject attribute, final ByteBuf byteAggregator) {
+        Preconditions.checkArgument(attribute instanceof Attributes, "Attribute parameter is not a PathAttribute object.");
+        final ClusterId cid = ((Attributes) attribute).getClusterId();
+        if (cid == null) {
             return;
         }
-        ByteBuf clusterIdBuffer = Unpooled.buffer();
-        for (ClusterIdentifier clusterIdentifier : pathAttributes.getClusterId()) {
+        final ByteBuf clusterIdBuffer = Unpooled.buffer();
+        for (final ClusterIdentifier clusterIdentifier : cid.getCluster()) {
             clusterIdBuffer.writeBytes(Ipv4Util.bytesForAddress(clusterIdentifier));
         }
-        byteAggregator.writeByte(AttributeFlags.OPTIONAL);
-        byteAggregator.writeByte(TYPE);
-        byteAggregator.writeByte(clusterIdBuffer.writerIndex());
-        byteAggregator.writeBytes(clusterIdBuffer);
+        AttributeUtil.formatAttribute(AttributeUtil.OPTIONAL, TYPE, clusterIdBuffer, byteAggregator);
     }
 }