MRI version bumpup for Aluminium
[netvirt.git] / natservice / impl / src / main / java / org / opendaylight / netvirt / natservice / internal / NatVpnMapsChangeListener.java
index 6d71511c30e1e4ee94b5d125d8a003905e946211..f30f9aefbc2e1f93d4e50e5d83cea4fb2a512c58 100644 (file)
@@ -9,20 +9,22 @@ package org.opendaylight.netvirt.natservice.internal;
 
 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
 
-import com.google.common.base.Optional;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
-import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
 import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
+import org.opendaylight.infrautils.utils.concurrent.Executors;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.serviceutils.tools.listener.AbstractAsyncDataTreeChangeListener;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.ProviderTypes;
@@ -39,7 +41,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Singleton
-public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<VpnMap, NatVpnMapsChangeListener> {
+public class NatVpnMapsChangeListener extends AbstractAsyncDataTreeChangeListener<VpnMap> {
     private static final Logger LOG = LoggerFactory.getLogger(NatVpnMapsChangeListener.class);
     private final DataBroker dataBroker;
     private final ManagedNewTransactionRunner txRunner;
@@ -52,7 +54,9 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<Vp
                                final FloatingIPListener floatingIpListener,
                                final OdlInterfaceRpcService interfaceManager,
                                final ExternalRoutersListener externalRoutersListener) {
-        super(VpnMap.class, NatVpnMapsChangeListener.class);
+        super(dataBroker, LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(VpnMaps.class)
+                .child(VpnMap.class),
+                Executors.newListeningSingleThreadExecutor("NatVpnMapsChangeListener", LOG));
         this.dataBroker = dataBroker;
         this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker);
         this.floatingIpListener = floatingIpListener;
@@ -60,24 +64,23 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<Vp
         this.externalRoutersListener = externalRoutersListener;
     }
 
-    @Override
-    @PostConstruct
     public void init() {
         LOG.info("{} init", getClass().getSimpleName());
-        registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker);
     }
 
     @Override
-    protected InstanceIdentifier<VpnMap> getWildCardPath() {
-        return InstanceIdentifier.create(VpnMaps.class).child(VpnMap.class);
+    @PreDestroy
+    public void close() {
+        super.close();
+        Executors.shutdownAndAwaitTermination(getExecutorService());
     }
 
     @Override
-    protected void add(InstanceIdentifier<VpnMap> identifier, VpnMap vpnMap) {
+    public void add(InstanceIdentifier<VpnMap> identifier, VpnMap vpnMap) {
         Uuid vpnUuid = vpnMap.getVpnId();
         String vpnName = vpnUuid.getValue();
         if (vpnMap.getRouterIds() != null) {
-            vpnMap.getRouterIds().stream()
+            vpnMap.getRouterIds().values().stream()
                 .filter(router -> !(Objects.equals(router.getRouterId(), vpnUuid)))
                 .forEach(router -> {
                     String routerName = router.getRouterId().getValue();
@@ -88,11 +91,11 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<Vp
     }
 
     @Override
-    protected void remove(InstanceIdentifier<VpnMap> identifier, VpnMap vpnMap) {
+    public void remove(InstanceIdentifier<VpnMap> identifier, VpnMap vpnMap) {
         Uuid vpnUuid = vpnMap.getVpnId();
         String vpnName = vpnUuid.getValue();
         if (vpnMap.getRouterIds() != null) {
-            vpnMap.getRouterIds().stream()
+            vpnMap.getRouterIds().values().stream()
                 .filter(router -> !(Objects.equals(router.getRouterId(), vpnUuid)))
                 .forEach(router -> {
                     String routerName = router.getRouterId().getValue();
@@ -103,12 +106,12 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<Vp
     }
 
     @Override
-    protected void update(InstanceIdentifier<VpnMap> identifier, VpnMap original, VpnMap updated) {
+    public void update(InstanceIdentifier<VpnMap> identifier, VpnMap original, VpnMap updated) {
         Uuid vpnUuid = updated.getVpnId();
         String vpnName = vpnUuid.getValue();
 
-        List<RouterIds> updatedRouterIdList = updated.getRouterIds();
-        List<RouterIds> originalRouterIdList = original.getRouterIds();
+        List<RouterIds> updatedRouterIdList = new ArrayList<RouterIds>(updated.getRouterIds().values());
+        List<RouterIds> originalRouterIdList = new ArrayList<RouterIds>(original.getRouterIds().values());
         List<RouterIds> routersAddedList = null;
         List<RouterIds> routersRemovedList = null;
 
@@ -147,11 +150,6 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<Vp
         }
     }
 
-    @Override
-    protected NatVpnMapsChangeListener getDataTreeChangeListener() {
-        return this;
-    }
-
     public void onRouterAssociatedToVpn(String vpnName, String routerName) {
 
         //check router is associated to external network
@@ -234,7 +232,7 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<Vp
             return;
         }
         Uuid networkId = Uuid.getDefaultInstance(externalNetwork);
-        for (Ports port : optRouterPorts.get().nonnullPorts()) {
+        for (Ports port : optRouterPorts.get().nonnullPorts().values()) {
             String portName = port.getPortName();
             Uint64 dpnId = NatUtil.getDpnForInterface(interfaceManager, portName);
             if (dpnId.equals(Uint64.ZERO)) {
@@ -243,7 +241,7 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<Vp
                 continue;
             }
 
-            for (InternalToExternalPortMap intExtPortMap : port.nonnullInternalToExternalPortMap()) {
+            for (InternalToExternalPortMap intExtPortMap : port.nonnullInternalToExternalPortMap().values()) {
                 //remove all NAT related entries with routerName
                 //floatingIpListener.removeNATOnlyFlowEntries(dpnId, portName, routerName, null,
                 // intExtPortMap.getInternalIp(), externalIp);
@@ -266,7 +264,7 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<Vp
             return;
         }
         Uuid networkId = Uuid.getDefaultInstance(externalNetwork);
-        for (Ports port : optRouterPorts.get().nonnullPorts()) {
+        for (Ports port : optRouterPorts.get().nonnullPorts().values()) {
             String portName = port.getPortName();
             Uint64 dpnId = NatUtil.getDpnForInterface(interfaceManager, portName);
             if (dpnId.equals(Uint64.ZERO)) {
@@ -274,7 +272,7 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBase<Vp
                         + "skip handling of router {} association with vpn {}", portName, routerName, vpnName);
                 continue;
             }
-            for (InternalToExternalPortMap intExtPortMap : port.nonnullInternalToExternalPortMap()) {
+            for (InternalToExternalPortMap intExtPortMap : port.nonnullInternalToExternalPortMap().values()) {
                 //remove all NAT related entries with routerName
                 //floatingIpListener.removeNATOnlyFlowEntries(dpnId, portName, routerName, vpnName,
                 // intExtPortMap.getInternalIp(), externalIp);