X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pcep%2Fietf-stateful07%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fpcep%2Fietf%2Fstateful07%2FStateful07ErrorMessageParser.java;h=187b7a7b0f77debbcdd4c8c5ad6c71930d30dede;hb=2894d2f6aaf1ed73ff9253cbd2fe283a4a471aa0;hp=0ce108f0e541ceebebd9ce4288cbc060c8331621;hpb=3121d059dc7b5d20f3b61c53490dd52fd098d6ec;p=bgpcep.git diff --git a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07ErrorMessageParser.java b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07ErrorMessageParser.java index 0ce108f0e5..187b7a7b0f 100644 --- a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07ErrorMessageParser.java +++ b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07ErrorMessageParser.java @@ -7,45 +7,43 @@ */ package org.opendaylight.protocol.pcep.ietf.stateful07; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; +import static com.google.common.base.Preconditions.checkArgument; + import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import java.util.ArrayList; import java.util.List; -import org.opendaylight.protocol.pcep.impl.message.PCEPErrorMessageParser; -import org.opendaylight.protocol.pcep.spi.MessageUtil; +import java.util.Optional; +import org.opendaylight.protocol.pcep.parser.message.PCEPErrorMessageParser; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; import org.opendaylight.protocol.pcep.spi.UnknownObject; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.StatefulCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.StatefulCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.stateful._case.StatefulBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.stateful._case.stateful.Srps; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.stateful._case.stateful.SrpsBuilder; -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.message.rev131007.PcerrBuilder; -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.PcerrMessage; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObject; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.RequestCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.RequestCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.SessionCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.SessionCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.request.Rps; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.request.RpsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.StatefulCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.StatefulCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.stateful._case.StatefulBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.stateful._case.stateful.Srps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.stateful._case.stateful.SrpsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.Srp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcerrBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Message; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Object; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.PcerrMessage; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.Open; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObject; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.PcerrMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.Errors; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.ErrorsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.RequestCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.RequestCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.SessionCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.request._case.request.Rps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.request._case.request.RpsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.Rp; /** - * Parser for {@link PcerrMessage} + * Parser for {@link PcerrMessage}. */ public final class Stateful07ErrorMessageParser extends PCEPErrorMessageParser { @@ -54,15 +52,8 @@ public final class Stateful07ErrorMessageParser extends PCEPErrorMessageParser { } @Override - public void serializeMessage(final Message message, final ByteBuf out) { - Preconditions.checkArgument(message instanceof PcerrMessage, "Wrong instance of Message. Passed instance of %s. Need ErrorMessage.", message.getClass()); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessage err = ((PcerrMessage) message).getPcerrMessage(); - - if (err.getErrors() == null || err.getErrors().isEmpty()) { - throw new IllegalArgumentException("Errors should not be empty."); - } - final ByteBuf buffer = Unpooled.buffer(); - + protected void serializeCases(final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types + .rev181109.pcerr.message.PcerrMessage err, final ByteBuf buffer) { if (err.getErrorType() instanceof RequestCase) { final List rps = ((RequestCase) err.getErrorType()).getRequest().getRps(); for (final Rps r : rps) { @@ -75,131 +66,115 @@ public final class Stateful07ErrorMessageParser extends PCEPErrorMessageParser { serializeObject(s.getSrp(), buffer); } } - for (final Errors e : err.getErrors()) { - serializeObject(e.getErrorObject(), buffer); - } - if (err.getErrorType() instanceof SessionCase) { - serializeObject(((SessionCase) err.getErrorType()).getSession().getOpen(), buffer); - } - MessageUtil.formatMessage(TYPE, buffer, out); } @Override - protected PcerrMessage validate(final List objects, final List errors) throws PCEPDeserializerException { - if (objects == null) { - throw new IllegalArgumentException("Passed list can't be null."); - } + protected PcerrMessage validate(final List objects, final List errors) + throws PCEPDeserializerException { + checkArgument(objects != null, "Passed list can't be null."); if (objects.isEmpty()) { throw new PCEPDeserializerException("Error message is empty."); } - final List requestParameters = new ArrayList<>(); final List srps = new ArrayList<>(); final List errorObjects = new ArrayList<>(); final PcerrMessageBuilder b = new PcerrMessageBuilder(); - - Object obj; - State state = State.Init; - obj = objects.get(0); - + Object obj = objects.get(0); + State state = State.INIT; if (obj instanceof ErrorObject) { final ErrorObject o = (ErrorObject) obj; errorObjects.add(new ErrorsBuilder().setErrorObject(o).build()); - state = State.ErrorIn; - objects.remove(0); + state = State.ERROR_IN; } else if (obj instanceof Rp) { final Rp o = (Rp) obj; if (o.isProcessingRule()) { - errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, Optional.absent())); + errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, Optional.empty())); return null; } requestParameters.add(new RpsBuilder().setRp(o).build()); - state = State.RpIn; - objects.remove(0); + state = State.RP_IN; } else if (obj instanceof Srp) { final Srp s = (Srp) obj; srps.add(new SrpsBuilder().setSrp(s).build()); - state = State.SrpIn; + state = State.SRP_IN; + } + if (!state.equals(State.INIT)) { objects.remove(0); } - - while (!objects.isEmpty()) { + while (!objects.isEmpty() && !state.equals(State.END)) { obj = objects.get(0); - if (obj instanceof UnknownObject) { - return new PcerrBuilder().setPcerrMessage(b.setErrors(((UnknownObject) obj).getErrors()).build()).build(); + return new PcerrBuilder().setPcerrMessage(b.setErrors(((UnknownObject) obj).getErrors()).build()) + .build(); + } + state = insertObject(state, obj, errorObjects, requestParameters, srps, b); + if (!state.equals(State.END)) { + objects.remove(0); } + } + if (errorObjects.isEmpty()) { + throw new PCEPDeserializerException("At least one PCEPErrorObject is mandatory."); + } + if (!objects.isEmpty()) { + throw new PCEPDeserializerException("Unprocessed Objects: " + objects); + } + if (!requestParameters.isEmpty()) { + b.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(requestParameters).build()) + .build()); + } + if (!srps.isEmpty()) { + b.setErrorType(new StatefulCaseBuilder().setStateful(new StatefulBuilder().setSrps(srps).build()).build()); + } + return new PcerrBuilder().setPcerrMessage(b.setErrors(errorObjects).build()).build(); + } - switch (state) { - case ErrorIn: - state = State.Open; + private static State insertObject(final State state, final Object obj, final List errorObjects, + final List requestParameters, final List srps, final PcerrMessageBuilder builder) { + switch (state) { + case ERROR_IN: if (obj instanceof ErrorObject) { final ErrorObject o = (ErrorObject) obj; errorObjects.add(new ErrorsBuilder().setErrorObject(o).build()); - state = State.ErrorIn; - break; + return State.ERROR_IN; } - case RpIn: - state = State.Error; + // fall through + case RP_IN: if (obj instanceof Rp) { - final Rp o = ((Rp) obj); + final Rp o = (Rp) obj; requestParameters.add(new RpsBuilder().setRp(o).build()); - state = State.RpIn; - break; + return State.RP_IN; } - case SrpIn: - state = State.Error; + // fall through + case SRP_IN: if (obj instanceof Srp) { - final Srp o = ((Srp) obj); + final Srp o = (Srp) obj; srps.add(new SrpsBuilder().setSrp(o).build()); - state = State.SrpIn; - break; + return State.SRP_IN; } - case Open: - state = State.OpenIn; + // fall through + case OPEN: if (obj instanceof Open) { - b.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder().setOpen((Open) obj).build()).build()); - break; + builder.setErrorType( + new SessionCaseBuilder().setSession(new SessionBuilder().setOpen((Open) obj).build()).build()); + return State.OPEN_IN; } - case Error: - state = State.OpenIn; + // fall through + case ERROR: if (obj instanceof ErrorObject) { final ErrorObject o = (ErrorObject) obj; errorObjects.add(new ErrorsBuilder().setErrorObject(o).build()); - state = State.Error; - break; + return State.ERROR; } - case OpenIn: - state = State.End; - break; - case End: - break; + // fall through + case OPEN_IN: + case END: + return State.END; default: - break; - } - if (!state.equals(State.End)) { - objects.remove(0); - } - } - - if (errorObjects.isEmpty()) { - throw new PCEPDeserializerException("At least one PCEPErrorObject is mandatory."); - } - - if (!objects.isEmpty()) { - throw new PCEPDeserializerException("Unprocessed Objects: " + objects); - } - if (!requestParameters.isEmpty()) { - b.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(requestParameters).build()).build()); - } - if (!srps.isEmpty()) { - b.setErrorType(new StatefulCaseBuilder().setStateful(new StatefulBuilder().setSrps(srps).build()).build()); + return state; } - - return new PcerrBuilder().setPcerrMessage(b.setErrors(errorObjects).build()).build(); } private enum State { - Init, ErrorIn, RpIn, SrpIn, Open, Error, OpenIn, End + INIT, ERROR_IN, RP_IN, SRP_IN, OPEN, ERROR, OPEN_IN, END } }