EVC delete Command 09/29209/5
authorMohamed El-Serngawy <melserngawy@inocybe.com>
Tue, 3 Nov 2015 17:02:30 +0000 (12:02 -0500)
committermelserngawy <melserngawy@inocybe.com>
Wed, 4 Nov 2015 16:31:58 +0000 (11:31 -0500)
Change-Id: I3278a6e06e02860ef61287627d7a80acfcdfc667
Signed-off-by: Mohamed El-Serngawy <melserngawy@inocybe.com>
impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java

index 3114f8233a5ee3b481ea59c99a854146b2179a14..c02449e6ba27b8b672574cd02be846fb3f3a7428 100644 (file)
@@ -7,19 +7,34 @@
  */
 package org.opendaylight.unimgr.command;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.unimgr.impl.UnimgrConstants;
 import org.opendaylight.unimgr.impl.UnimgrUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Evc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.evc.UniDest;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.evc.UniSource;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+
 public class EvcDeleteCommand extends AbstractDeleteCommand {
 
     private static final Logger LOG = LoggerFactory.getLogger(EvcDeleteCommand.class);
@@ -45,11 +60,57 @@ public class EvcDeleteCommand extends AbstractDeleteCommand {
                     for (Entry<InstanceIdentifier<Evc>, Evc> evc: originalEvcs.entrySet()) {
                         if (evc.getKey().equals(type)) {
                             Evc data = evc.getValue();
-                            LOG.info("Removed EVC {}", data.getUniSource());
+                            List<UniSource> uniSourceLst = data.getUniSource();
+                            for (UniSource uniSource : uniSourceLst) {
+                                InstanceIdentifier<?> iidUni = uniSource.getUni();
+                                Node ovsdbNd = getUniOvsdbNode(iidUni);
+                                List<TerminationPoint> termPointList = ovsdbNd.getTerminationPoint();
+                                for(TerminationPoint termPoint : termPointList) {
+                                    deleteTerminationPoint(termPoint, ovsdbNd);
+                                }
+                            }
+                            LOG.info("Removed EVC Source {}", data.getUniSource());
+                            List<UniDest> uniDestLst = data.getUniDest();
+                            for (UniDest uniDest : uniDestLst) {
+                                InstanceIdentifier<?> iidUni = uniDest.getUni();
+                                Node ovsdbNd = getUniOvsdbNode(iidUni);
+                                List<TerminationPoint> termPointList = ovsdbNd.getTerminationPoint();
+                                for(TerminationPoint termPoint : termPointList) {
+                                    deleteTerminationPoint(termPoint, ovsdbNd);
+                                }
+                            }
+                            LOG.info("Removed EVC Destination {}", data.getUniDest());
                         }
                     }
                 }
             }
         }
     }
+
+    private Node getUniOvsdbNode(InstanceIdentifier<?> iidUni) {
+        Optional<Node> nodeOpt = UnimgrUtils.readNode(dataBroker, iidUni);
+        if (nodeOpt.isPresent()) {
+            return  nodeOpt.get();
+        }
+        return null;
+    }
+
+    private boolean deleteTerminationPoint(TerminationPoint termPoint, Node ovsdbNode) {
+        boolean result = false;
+        InstanceIdentifier<TerminationPoint> terminationPointPath = InstanceIdentifier
+                .create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(UnimgrConstants.OVSDB_TOPOLOGY_ID))
+                .child(Node.class,ovsdbNode.getKey())
+                .child(TerminationPoint.class, termPoint.getKey());
+        final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
+        transaction.delete(LogicalDatastoreType.OPERATIONAL, terminationPointPath);
+        CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
+        try {
+            future.checkedGet();
+            result = true;
+        } catch (TransactionCommitFailedException e) {
+            LOG.warn("Failed to delete {} ", terminationPointPath, e);
+        }
+        return result;
+    }
 }