import org.opendaylight.protocol.pcep.spi.AbstractMessageParser;
import org.opendaylight.protocol.pcep.spi.MessageUtil;
import org.opendaylight.protocol.pcep.spi.ObjectRegistry;
+import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.Pcinitiate;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.PcinitiateBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.pcinitiate.message.PcinitiateMessageBuilder;
}
@Override
- protected Message validate(final List<Object> objects, final List<Message> errors) {
+ protected Message validate(final List<Object> objects, final List<Message> errors)
+ throws PCEPDeserializerException {
checkArgument(objects != null, "Passed list can't be null.");
final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
final List<Requests> reqs = new ArrayList<>();
return new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build();
}
- protected Requests getValidRequest(final List<Object> objects) {
- final RequestsBuilder builder = new RequestsBuilder();
- builder.setSrp((Srp) objects.get(0));
- objects.remove(0);
-
- builder.setLsp((Lsp) objects.get(0));
- objects.remove(0);
+ protected Requests getValidRequest(final List<Object> objects) throws PCEPDeserializerException {
+ final RequestsBuilder builder = new RequestsBuilder()
+ .setSrp(consumeObject(objects, Srp.class))
+ .setLsp(consumeObject(objects, Lsp.class));
final List<Metrics> metrics = new ArrayList<>();
return builder.build();
}
+ private static <T extends Object> T consumeObject(final List<Object> objects, final Class<T> expectedClass)
+ throws PCEPDeserializerException {
+ final Object obj;
+ try {
+ obj = objects.remove(0);
+ } catch (IndexOutOfBoundsException e) {
+ throw new PCEPDeserializerException("No objects left when expecting " + expectedClass.getSimpleName(), e);
+ }
+ try {
+ return expectedClass.cast(obj);
+ } catch (ClassCastException e) {
+ throw new PCEPDeserializerException("Cannot interpret " + obj, e);
+ }
+ }
+
private static State insertObject(final State state, final Object obj, final RequestsBuilder builder,
final List<Metrics> metrics) {
switch (state) {