BUG-4826: Remove duplicate Code on Evpn Esi registry 01/38001/3
authorClaudio D. Gasparini <cgaspari@cisco.com>
Tue, 19 Apr 2016 14:33:15 +0000 (16:33 +0200)
committerMilos Fabian <milfabia@cisco.com>
Mon, 25 Apr 2016 08:07:36 +0000 (08:07 +0000)
Remove duplicate Code on Evpn Esi registry

Change-Id: I5d47b4133e289516453a3d1e822edd4d7f26bf64
Signed-off-by: Claudio D. Gasparini <cgaspari@cisco.com>
bgp/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/nlri/EvpnNlriParser.java
bgp/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/spi/pojo/SimpleEsiTypeRegistry.java

index 5dc0d0cff4423f3b42eb9886a2ec7cfbeb268fbe..adfc4335676a0bd54f398474de2bb51066a60cdb 100644 (file)
@@ -51,26 +51,28 @@ public final class EvpnNlriParser implements NlriParser, NlriSerializer {
     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
index 0af770f249e9f0b0a1df1640e613bd77f95460f6..c584aba4682c5f187782198f9596b8099c63b4a3 100644 (file)
@@ -9,6 +9,7 @@
 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;
@@ -20,10 +21,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn
 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;
 
@@ -69,12 +68,12 @@ public final class SimpleEsiTypeRegistry implements EsiRegistry {
     @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;
     }