X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pcep%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fpcep%2Fimpl%2Fobject%2FPCEPExplicitRouteObjectParser.java;h=108f417244d73317c7936f81a63e434a89bdf061;hb=4ebe944f0814f27a0b15204ead13e554dc89fa36;hp=bec1f4c5f59d642c6a21765ebba5772d8c41f2dd;hpb=b7985ae58fb4050cccbe361f11d195b9b37a0357;p=bgpcep.git diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/object/PCEPExplicitRouteObjectParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/object/PCEPExplicitRouteObjectParser.java index bec1f4c5f5..108f417244 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/object/PCEPExplicitRouteObjectParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/object/PCEPExplicitRouteObjectParser.java @@ -7,7 +7,12 @@ */ package org.opendaylight.protocol.pcep.impl.object; -import org.opendaylight.protocol.pcep.spi.EROSubobjectHandlerRegistry; +import com.google.common.base.Preconditions; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +import org.opendaylight.protocol.pcep.spi.EROSubobjectRegistry; import org.opendaylight.protocol.pcep.spi.ObjectUtil; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object; @@ -20,47 +25,33 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ */ public class PCEPExplicitRouteObjectParser extends AbstractEROWithSubobjectsParser { - public static final int CLASS = 7; - - public static final int TYPE = 1; - - public PCEPExplicitRouteObjectParser(final EROSubobjectHandlerRegistry subobjReg) { - super(subobjReg); - } - - @Override - public Ero parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException { - if (bytes == null || bytes.length == 0) { - throw new IllegalArgumentException("Byte array is mandatory. Can't be null or empty."); - } - final EroBuilder builder = new EroBuilder(); - builder.setIgnore(header.isIgnore()); - builder.setProcessingRule(header.isProcessingRule()); - builder.setSubobject(parseSubobjects(bytes)); - return builder.build(); - } - - @Override - public byte[] serializeObject(final Object object) { - if (!(object instanceof Ero)) { - throw new IllegalArgumentException("Wrong instance of PCEPObject. Passed " + object.getClass() - + ". Needed ExplicitRouteObject."); - } - final Ero ero = ((Ero) object); - - assert !(ero.getSubobject().isEmpty()) : "Empty Explicit Route Object."; - - return ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), - serializeSubobject(ero.getSubobject())); - } - - @Override - public int getObjectType() { - return TYPE; - } - - @Override - public int getObjectClass() { - return CLASS; - } + public static final int CLASS = 7; + + public static final int TYPE = 1; + + public PCEPExplicitRouteObjectParser(final EROSubobjectRegistry subobjReg) { + super(subobjReg); + } + + @Override + public Ero parseObject(final ObjectHeader header, final ByteBuf buffer) throws PCEPDeserializerException { + // Explicit approval of empty ERO + Preconditions.checkArgument(buffer != null, "Array of bytes is mandatory. Can't be null."); + final EroBuilder builder = new EroBuilder(); + builder.setIgnore(header.isIgnore()); + builder.setProcessingRule(header.isProcessingRule()); + builder.setSubobject(parseSubobjects(buffer)); + return builder.build(); + } + + @Override + public void serializeObject(final Object object, final ByteBuf buffer) { + Preconditions.checkArgument(object instanceof Ero, "Wrong instance of PCEPObject. Passed %s. Needed EroObject.", object.getClass()); + final Ero ero = ((Ero) object); + final ByteBuf body = Unpooled.buffer(); + // FIXME: switch to ByteBuf + final byte[] bytes = serializeSubobject(ero.getSubobject()); + body.writeBytes(bytes); + ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), body, buffer); + } }