Convert itm-impl to use mdsal-binding-util
[genius.git] / itm / itm-impl / src / main / java / org / opendaylight / genius / itm / confighelpers / ItmTepAddWorker.java
index 131e7dc469f24391925e25e044ac13fdb073e593..e575f0bafa5c6477ebe15099c8e78f97bf5ef549 100644 (file)
@@ -7,22 +7,27 @@
  */
 package org.opendaylight.genius.itm.confighelpers;
 
+import static org.opendaylight.mdsal.binding.util.Datastore.CONFIGURATION;
+
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Optional;
 import java.util.concurrent.Callable;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.genius.itm.cache.DPNTEPsInfoCache;
 import org.opendaylight.genius.itm.impl.ItmUtils;
 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfig;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.util.Datastore;
+import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunner;
+import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunnerImpl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfo;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.dc.gateway.ip.list.DcGatewayIp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.DcGatewayIpList;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ItmTepAddWorker implements Callable<List<ListenableFuture<Void>>> {
+public class ItmTepAddWorker implements Callable<List<? extends ListenableFuture<?>>> {
 
     private static final Logger LOG = LoggerFactory.getLogger(ItmTepAddWorker.class);
 
@@ -31,46 +36,49 @@ public class ItmTepAddWorker implements Callable<List<ListenableFuture<Void>>> {
     private final List<DPNTEPsInfo> cfgdDpnList ;
     private final IMdsalApiManager mdsalManager;
     private final List<HwVtep> cfgdHwVteps;
-    private final ItmConfig itmConfig;
     private final ItmInternalTunnelAddWorker itmInternalTunnelAddWorker;
     private final ItmExternalTunnelAddWorker externalTunnelAddWorker;
-    private final DPNTEPsInfoCache dpnTEPsInfoCache;
+    private final ManagedNewTransactionRunner txRunner;
 
     public ItmTepAddWorker(List<DPNTEPsInfo> cfgdDpnList, List<HwVtep> hwVtepList, DataBroker broker,
-            IMdsalApiManager mdsalManager, ItmConfig itmConfig, ItmInternalTunnelAddWorker itmInternalTunnelAddWorker,
-            ItmExternalTunnelAddWorker externalTunnelAddWorker, DPNTEPsInfoCache dpnTEPsInfoCache) {
+                           IMdsalApiManager mdsalManager, ItmInternalTunnelAddWorker itmInternalTunnelAddWorker,
+                           ItmExternalTunnelAddWorker externalTunnelAddWorker) {
         this.cfgdDpnList = cfgdDpnList ;
         this.dataBroker = broker ;
         this.mdsalManager = mdsalManager;
         this.cfgdHwVteps = hwVtepList;
-        this.itmConfig = itmConfig;
         this.itmInternalTunnelAddWorker = itmInternalTunnelAddWorker;
         this.externalTunnelAddWorker = externalTunnelAddWorker;
-        this.dpnTEPsInfoCache = dpnTEPsInfoCache;
+        this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker);
         LOG.trace("ItmTepAddWorker initialized with  DpnList {}",cfgdDpnList);
         LOG.trace("ItmTepAddWorker initialized with  hwvteplist {}",hwVtepList);
     }
 
     @Override
-    public List<ListenableFuture<Void>> call() {
-        List<ListenableFuture<Void>> futures = new ArrayList<>() ;
-        this.meshedDpnList = dpnTEPsInfoCache.getAllPresent();
+    public List<? extends ListenableFuture<?>> call() {
+        List<ListenableFuture<?>> futures = new ArrayList<>() ;
+        this.meshedDpnList = ItmUtils.getDpnTEPsInfos(dataBroker);
         LOG.debug("Invoking Internal Tunnel build method with Configured DpnList {} ; Meshed DpnList {} ",
                 cfgdDpnList, meshedDpnList);
-        futures.addAll(itmInternalTunnelAddWorker.buildAllTunnels(mdsalManager, cfgdDpnList,
-                meshedDpnList)) ;
+        futures.addAll(itmInternalTunnelAddWorker.buildAllTunnels(mdsalManager, cfgdDpnList, meshedDpnList));
+
         // IF EXTERNAL TUNNELS NEEDS TO BE BUILT, DO IT HERE. IT COULD BE TO DC GATEWAY OR TOR SWITCH
-        List<DcGatewayIp> dcGatewayIpList = ItmUtils.getDcGatewayIpList(dataBroker);
-        if (dcGatewayIpList != null && !dcGatewayIpList.isEmpty()) {
-            for (DcGatewayIp dcGatewayIp : dcGatewayIpList) {
-                futures.addAll(externalTunnelAddWorker.buildTunnelsToExternalEndPoint(cfgdDpnList,
-                        dcGatewayIp.getIpAddress(), dcGatewayIp.getTunnnelType()));
+        futures.add(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION,
+            tx -> {
+                Optional<DcGatewayIpList> optional = tx.read(InstanceIdentifier.builder(DcGatewayIpList.class)
+                        .build()).get();
+                if (optional.isPresent()) {
+                    optional.get().getDcGatewayIp().values().forEach(dcGatewayIp ->
+                        externalTunnelAddWorker.buildTunnelsToExternalEndPoint(cfgdDpnList, dcGatewayIp.getIpAddress(),
+                        dcGatewayIp.getTunnnelType(), tx));
+                }
             }
-        }
+        ));
         //futures.addAll(ItmExternalTunnelAddWorker.buildTunnelsToExternalEndPoint(dataBroker,meshedDpnList, extIp) ;
         LOG.debug("invoking build hwVtepTunnels with hwVteplist {}", cfgdHwVteps);
-        futures.addAll(externalTunnelAddWorker.buildHwVtepsTunnels(cfgdDpnList,cfgdHwVteps));
-        return futures ;
+        futures.add(txRunner.callWithNewReadWriteTransactionAndSubmit(Datastore.CONFIGURATION,
+            tx -> externalTunnelAddWorker.buildHwVtepsTunnels(cfgdDpnList, cfgdHwVteps, tx)));
+        return futures;
     }
 
     @Override