ITM impl Organize Imports for Checkstyle compliance
[genius.git] / itm / itm-impl / src / main / java / org / opendaylight / genius / itm / confighelpers / ItmTepRemoveWorker.java
index 8c17a7089b8e1fb4fd3803eee00f71f1334b44ad..599e63a2fdeb463ed180788569dce53f17074c39 100644 (file)
@@ -8,18 +8,20 @@
 package org.opendaylight.genius.itm.confighelpers;
 
 import com.google.common.util.concurrent.ListenableFuture;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.genius.itm.impl.ItmUtils;
 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
 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.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPoints;
+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.transport.zones.TransportZone;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Callable;
-
 public class ItmTepRemoveWorker implements Callable<List<ListenableFuture<Void>>> {
     private static final Logger logger = LoggerFactory.getLogger(ItmTepRemoveWorker.class ) ;
     private DataBroker dataBroker;
@@ -28,13 +30,16 @@ public class ItmTepRemoveWorker implements Callable<List<ListenableFuture<Void>>
     private IdManagerService idManagerService;
     private IMdsalApiManager mdsalManager;
     private List<HwVtep> cfgdHwVteps;
+    private TransportZone originalTZone;
 
-    public ItmTepRemoveWorker(List<DPNTEPsInfo> delDpnList, List<HwVtep> delHwList, DataBroker broker, IdManagerService idManagerService, IMdsalApiManager mdsalManager) {
-        this.delDpnList = delDpnList ;
-        this.dataBroker = broker ;
+    public ItmTepRemoveWorker(List<DPNTEPsInfo> delDpnList, List<HwVtep> delHwList, TransportZone originalTZone,
+            DataBroker broker, IdManagerService idManagerService, IMdsalApiManager mdsalManager) {
+        this.delDpnList = delDpnList;
+        this.dataBroker = broker;
         this.idManagerService = idManagerService;
         this.mdsalManager = mdsalManager;
         this.cfgdHwVteps = delHwList;
+        this.originalTZone = originalTZone;
         logger.trace("ItmTepRemoveWorker initialized with  DpnList {}",delDpnList );
         logger.trace("ItmTepRemoveWorker initialized with  cfgdHwTeps {}",delHwList );
     }
@@ -46,7 +51,24 @@ public class ItmTepRemoveWorker implements Callable<List<ListenableFuture<Void>>
         futures.addAll( ItmInternalTunnelDeleteWorker.deleteTunnels(dataBroker, idManagerService, mdsalManager, delDpnList, meshedDpnList));
         logger.debug("Invoking Internal Tunnel delete method with DpnList to be deleted {} ; Meshed DpnList {} ",delDpnList, meshedDpnList );
         // IF EXTERNAL TUNNELS NEEDS TO BE DELETED, DO IT HERE, IT COULD BE TO DC GATEWAY OR TOR SWITCH
-        futures.addAll(ItmExternalTunnelDeleteWorker.deleteHwVtepsTunnels(dataBroker, idManagerService,delDpnList,cfgdHwVteps));
+        List<DcGatewayIp> dcGatewayIpList = ItmUtils.getDcGatewayIpList(dataBroker);
+        if(dcGatewayIpList != null && !dcGatewayIpList.isEmpty()){
+            List<DPNTEPsInfo>  dpnDeleteList = new ArrayList<>();
+            for( DPNTEPsInfo dpnTEPInfo : delDpnList){
+                List<TunnelEndPoints> tunnelEndPointsList = dpnTEPInfo.getTunnelEndPoints();
+                if(tunnelEndPointsList.size() == 1){
+                    dpnDeleteList.add(dpnTEPInfo);
+                }
+                else{
+                    logger.error("DPNTEPInfo not available in data store for dpnId" + dpnTEPInfo.getDPNID() + ". Unable to delete external tunnel for dpn ");
+                }
+            }
+            for(DcGatewayIp dcGatewayIp : dcGatewayIpList){
+                futures.addAll(ItmExternalTunnelDeleteWorker.deleteTunnels(dataBroker, idManagerService,  dpnDeleteList, dcGatewayIp.getIpAddress(), dcGatewayIp.getTunnnelType()));
+            }
+        }
+
+        futures.addAll(ItmExternalTunnelDeleteWorker.deleteHwVtepsTunnels(dataBroker, idManagerService,delDpnList,cfgdHwVteps, this.originalTZone));
         return futures ;
     }