From 4525ec974a68b896e4c15f800d0b3622dbfe77bd Mon Sep 17 00:00:00 2001 From: Mohamed El-Serngawy Date: Tue, 3 Nov 2015 12:02:30 -0500 Subject: [PATCH] EVC delete Command Change-Id: I3278a6e06e02860ef61287627d7a80acfcdfc667 Signed-off-by: Mohamed El-Serngawy --- .../unimgr/command/EvcDeleteCommand.java | 63 ++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java b/impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java index 3114f823..c02449e6 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java +++ b/impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java @@ -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, Evc> evc: originalEvcs.entrySet()) { if (evc.getKey().equals(type)) { Evc data = evc.getValue(); - LOG.info("Removed EVC {}", data.getUniSource()); + List uniSourceLst = data.getUniSource(); + for (UniSource uniSource : uniSourceLst) { + InstanceIdentifier iidUni = uniSource.getUni(); + Node ovsdbNd = getUniOvsdbNode(iidUni); + List termPointList = ovsdbNd.getTerminationPoint(); + for(TerminationPoint termPoint : termPointList) { + deleteTerminationPoint(termPoint, ovsdbNd); + } + } + LOG.info("Removed EVC Source {}", data.getUniSource()); + List uniDestLst = data.getUniDest(); + for (UniDest uniDest : uniDestLst) { + InstanceIdentifier iidUni = uniDest.getUni(); + Node ovsdbNd = getUniOvsdbNode(iidUni); + List termPointList = ovsdbNd.getTerminationPoint(); + for(TerminationPoint termPoint : termPointList) { + deleteTerminationPoint(termPoint, ovsdbNd); + } + } + LOG.info("Removed EVC Destination {}", data.getUniDest()); } } } } } } + + private Node getUniOvsdbNode(InstanceIdentifier iidUni) { + Optional nodeOpt = UnimgrUtils.readNode(dataBroker, iidUni); + if (nodeOpt.isPresent()) { + return nodeOpt.get(); + } + return null; + } + + private boolean deleteTerminationPoint(TerminationPoint termPoint, Node ovsdbNode) { + boolean result = false; + InstanceIdentifier 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 future = transaction.submit(); + try { + future.checkedGet(); + result = true; + } catch (TransactionCommitFailedException e) { + LOG.warn("Failed to delete {} ", terminationPointPath, e); + } + return result; + } } -- 2.36.6