private static final Logger LOG = LoggerFactory.getLogger(EvpnNlriParser.class);
private static final NodeIdentifier EVPN_CHOICE_NID = new NodeIdentifier(EvpnChoice.QNAME);
+ @FunctionalInterface
+ private interface extractionInterface {
+ EvpnChoice check(EvpnRegistry reg, ChoiceNode cont);
+ }
+
public static EvpnDestination extractEvpnDestination(final DataContainerNode<? extends PathArgument> evpnChoice) {
+ return extractDestination(evpnChoice, (reg, cont) -> reg.serializeEvpnModel(cont));
+ }
+
+ private static EvpnDestination extractDestination(final DataContainerNode<? extends PathArgument> evpnChoice, final extractionInterface extract) {
final EvpnRegistry reg = SimpleEvpnNlriRegistry.getInstance();
- final ChoiceNode choiceCont = (ChoiceNode) evpnChoice.getChild(EVPN_CHOICE_NID).get();
- final EvpnChoice evpnValue = reg.serializeEvpnModel(choiceCont);
+ final ChoiceNode cont = (ChoiceNode) evpnChoice.getChild(EVPN_CHOICE_NID).get();
+ final EvpnChoice evpnValue = extract.check(reg, cont);
if (evpnValue == null) {
- LOG.warn("Unrecognized Nlri {}", choiceCont);
+ LOG.warn("Unrecognized Nlri {}", cont);
return null;
}
return new EvpnDestinationBuilder().setRouteDistinguisher(extractRouteDistinguisher(evpnChoice)).setEvpnChoice(evpnValue).build();
}
public static EvpnDestination extractRouteKeyDestination(final DataContainerNode<? extends PathArgument> evpnChoice) {
- final EvpnRegistry reg = SimpleEvpnNlriRegistry.getInstance();
- final ChoiceNode choiceCont = (ChoiceNode) evpnChoice.getChild(EVPN_CHOICE_NID).get();
- final EvpnChoice evpnValue = reg.serializeEvpnRouteKey(choiceCont);
- if (evpnValue == null) {
- LOG.warn("Unrecognized Nlri {}", choiceCont);
- return null;
- }
- return new EvpnDestinationBuilder().setRouteDistinguisher(extractRouteDistinguisher(evpnChoice)).setEvpnChoice(evpnValue).build();
+ return extractDestination(evpnChoice, (reg, cont) -> reg.serializeEvpnRouteKey(cont));
}
@Override
package org.opendaylight.protocol.bgp.evpn.spi.pojo;
import com.google.common.base.Preconditions;
+import com.google.common.collect.Iterables;
import io.netty.buffer.ByteBuf;
import org.opendaylight.protocol.bgp.evpn.spi.EsiParser;
import org.opendaylight.protocol.bgp.evpn.spi.EsiRegistry;
import org.opendaylight.yangtools.yang.binding.DataContainer;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Override
public Esi parseEsiModel(final ChoiceNode esiChoice) {
Preconditions.checkArgument(esiChoice != null && !esiChoice.getValue().isEmpty(), "ESI is mandatory. Can't be null or empty.");
- for (final DataContainerChild<? extends PathArgument, ?> entry : esiChoice.getValue()) {
- final EsiSerializer serializer = this.modelHandlers.get((NodeIdentifier) entry.getIdentifier());
- if (serializer != null) {
- return serializer.serializeEsi((ContainerNode) entry);
- }
+ final ContainerNode cont = (ContainerNode) Iterables.getOnlyElement(esiChoice.getValue());
+ final EsiSerializer serializer = this.modelHandlers.get(cont.getIdentifier());
+ if (serializer != null) {
+ return serializer.serializeEsi(cont);
}
+
LOG.warn("Unrecognized ESI {}", esiChoice);
return null;
}