*/
package org.opendaylight.protocol.pcep.ietf.initiated00;
+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.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.crabbe.initiated.rev131126.Pcinitiate;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.PcinitiateBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.PcinitiateMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.PcinitiateMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.Requests;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.RequestsBuilder;
/**
* Parser for {@link Pcinitiate}
*/
-public final class CInitiated00PCInitiateMessageParser extends AbstractMessageParser {
+public class CInitiated00PCInitiateMessageParser extends AbstractMessageParser {
public static final int TYPE = 12;
@Override
public void serializeMessage(final Message message, final ByteBuf out) {
- if (!(message instanceof PcinitiateMessage)) {
- throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass()
- + ". Needed PcinitiateMessage.");
- }
+ Preconditions.checkArgument(message instanceof Pcinitiate, "Wrong instance of Message. Passed instance of %s. Need PcinitiateMessage.", message.getClass());
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.PcinitiateMessage init = ((Pcinitiate) message).getPcinitiateMessage();
- ByteBuf buffer = Unpooled.buffer();
+ final ByteBuf buffer = Unpooled.buffer();
for (final Requests req : init.getRequests()) {
- buffer.writeBytes(serializeObject(req.getSrp()));
- buffer.writeBytes(serializeObject(req.getLsp()));
- if (req.getEndpointsObj() != null) {
- buffer.writeBytes(serializeObject(req.getEndpointsObj()));
- }
- if (req.getEro() != null) {
- buffer.writeBytes(serializeObject(req.getEro()));
- }
- if (req.getLspa() != null) {
- buffer.writeBytes(serializeObject(req.getLspa()));
- }
- if (req.getBandwidth() != null) {
- buffer.writeBytes(serializeObject(req.getBandwidth()));
- }
- if (req.getMetrics() != null && !req.getMetrics().isEmpty()) {
- for (final Metrics m : req.getMetrics()) {
- buffer.writeBytes(serializeObject(m.getMetric()));
- }
- }
- if (req.getIro() != null) {
- buffer.writeBytes(serializeObject(req.getIro()));
- }
+ serializeRequest(req, buffer);
}
MessageUtil.formatMessage(TYPE, buffer, out);
}
+ protected void serializeRequest(final Requests req, final ByteBuf buffer) {
+ serializeObject(req.getSrp(), buffer);
+ serializeObject(req.getLsp(), buffer);
+ serializeObject(req.getEndpointsObj(), buffer);
+ serializeObject(req.getEro(), buffer);
+ serializeObject(req.getLspa(), buffer);
+ serializeObject(req.getBandwidth(), buffer);
+ if (req.getMetrics() != null) {
+ for (final Metrics m : req.getMetrics()) {
+ serializeObject(m.getMetric(), buffer);
+ }
+ }
+ serializeObject(req.getIro(), buffer);
+ }
+
@Override
protected Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException {
if (objects == null) {
}
final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
final List<Requests> reqs = Lists.newArrayList();
- Requests req = null;
while (!objects.isEmpty()) {
- req = this.getValidRequest(objects);
- if (req == null) {
- break;
- }
- reqs.add(req);
+ reqs.add(this.getValidRequest(objects));
}
builder.setRequests(reqs);
return new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build();
}
- private Requests getValidRequest(final List<Object> objects) {
+ protected Requests getValidRequest(final List<Object> objects) {
final RequestsBuilder builder = new RequestsBuilder();
builder.setSrp((Srp) objects.get(0));
objects.remove(0);
final List<Metrics> metrics = Lists.newArrayList();
Object obj;
- State state = State.Init;
- while (!objects.isEmpty() && !state.equals(State.End)) {
+ State state = State.INIT;
+ while (!objects.isEmpty() && !state.equals(State.END)) {
obj = objects.get(0);
-
- switch (state) {
- case Init:
- state = State.EndpointsIn;
- if (obj instanceof EndpointsObj) {
- builder.setEndpointsObj((EndpointsObj) obj);
- break;
- }
- case EndpointsIn:
- state = State.EroIn;
- if (obj instanceof Ero) {
- builder.setEro((Ero) obj);
- break;
- }
- case EroIn:
- state = State.LspaIn;
- if (obj instanceof Lspa) {
- builder.setLspa((Lspa) obj);
- break;
- }
- case LspaIn:
- state = State.BandwidthIn;
- if (obj instanceof Bandwidth) {
- builder.setBandwidth((Bandwidth) obj);
- break;
- }
- case BandwidthIn:
- state = State.MetricIn;
- if (obj instanceof Metric) {
- metrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
- state = State.BandwidthIn;
- break;
- }
- case MetricIn:
- state = State.IroIn;
- if (obj instanceof Iro) {
- builder.setIro((Iro) obj);
- break;
- }
- case IroIn:
- state = State.End;
- break;
- case End:
- break;
- }
- if (!state.equals(State.End)) {
+ state = insertObject(state, obj, builder, metrics);
+ if (!state.equals(State.END)) {
objects.remove(0);
}
}
return builder.build();
}
+ private State insertObject(final State state, final Object obj, final RequestsBuilder builder, final List<Metrics> metrics) {
+ switch (state) {
+ case INIT:
+ if (obj instanceof EndpointsObj) {
+ builder.setEndpointsObj((EndpointsObj) obj);
+ return State.ENDPOINTS_IN;
+ }
+ case ENDPOINTS_IN:
+ if (obj instanceof Ero) {
+ builder.setEro((Ero) obj);
+ return State.ERO_IN;
+ }
+ case ERO_IN:
+ if (obj instanceof Lspa) {
+ builder.setLspa((Lspa) obj);
+ return State.LSPA_IN;
+ }
+ case LSPA_IN:
+ if (obj instanceof Bandwidth) {
+ builder.setBandwidth((Bandwidth) obj);
+ return State.BANDWIDTH_IN;
+ }
+ case BANDWIDTH_IN:
+ if (obj instanceof Metric) {
+ metrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
+ return State.BANDWIDTH_IN;
+ }
+ case METRIC_IN:
+ if (obj instanceof Iro) {
+ builder.setIro((Iro) obj);
+ return State.IRO_IN;
+ }
+ case IRO_IN:
+ case END:
+ return State.END;
+ default:
+ return state;
+ }
+ }
+
private enum State {
- Init, EndpointsIn, EroIn, LspaIn, BandwidthIn, MetricIn, IroIn, End
+ INIT, ENDPOINTS_IN, ERO_IN, LSPA_IN, BANDWIDTH_IN, METRIC_IN, IRO_IN, END
}
}