X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pcep%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fpcep%2Fimpl%2Fmessage%2FPCEPCloseMessageParser.java;h=1a166cd4e70a49ee6193b479d9d9a4771a641c8c;hb=d7652fb4ef69e193b271e39e864228b033bba8bc;hp=9f280e5bf04c9566e6f2a29dd4826702f0cb1afa;hpb=1629d0aca5f297b9522f60c671e00f71e6945376;p=bgpcep.git diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPCloseMessageParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPCloseMessageParser.java index 9f280e5bf0..1a166cd4e7 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPCloseMessageParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPCloseMessageParser.java @@ -7,23 +7,65 @@ */ package org.opendaylight.protocol.pcep.impl.message; -import org.opendaylight.protocol.pcep.PCEPMessage; -import org.opendaylight.protocol.pcep.impl.PCEPMessageParser; -import org.opendaylight.protocol.pcep.impl.PCEPObjectFactory; -import org.opendaylight.protocol.pcep.message.PCEPCloseMessage; +import io.netty.buffer.ByteBuf; + +import java.util.List; + +import org.opendaylight.protocol.pcep.PCEPDeserializerException; +import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Close; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.CloseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.CloseMessage; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message; +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.close.message.CCloseMessage; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.close.message.CCloseMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.close.object.CClose; /** - * Parser for {@link org.opendaylight.protocol.pcep.message.PCEPCloseMessage - * PCEPCloseMessage} + * Parser for {@link CloseMessage} */ -public class PCEPCloseMessageParser implements PCEPMessageParser { +public class PCEPCloseMessageParser extends AbstractMessageParser { + + public static final int TYPE = 7; + + public PCEPCloseMessageParser(final ObjectHandlerRegistry registry) { + super(registry); + } + + @Override + public void serializeMessage(final Message message, final ByteBuf buffer) { + if (!(message instanceof CloseMessage)) { + throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass() + + ". Nedded CloseMessage."); + } + final CCloseMessage close = ((CloseMessage) message).getCCloseMessage(); - @Override - public byte[] put(PCEPMessage msg) { - if (!(msg instanceof PCEPCloseMessage)) - throw new IllegalArgumentException("Wrong instance of PCEPMessage. Passed instance of " + msg.getClass() + ". Nedded PCEPCloseMessage."); + if (close.getCClose() == null) { + throw new IllegalArgumentException("Close Object must be present in Close Message."); + } + buffer.writeBytes(serializeObject(close.getCClose())); + } - return PCEPObjectFactory.put(((PCEPCloseMessage) msg).getAllObjects()); - } + @Override + protected Close validate(final List objects, final List errors) throws PCEPDeserializerException { + if (objects == null) { + throw new IllegalArgumentException("Passed list can't be null."); + } + if (objects.isEmpty() || !(objects.get(0) instanceof CClose)) { + throw new PCEPDeserializerException("Close message doesn't contain CLOSE object."); + } + final Object o = objects.get(0); + final CCloseMessage msg = new CCloseMessageBuilder().setCClose((CClose) o).build(); + objects.remove(0); + if (!objects.isEmpty()) { + throw new PCEPDeserializerException("Unprocessed Objects: " + objects); + } + return new CloseBuilder().setCCloseMessage(msg).build(); + } + @Override + public int getMessageType() { + return TYPE; + } }