2 * Copyright (c) 2015 CableLabs and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.unimgr.command;
10 import java.util.List;
12 import java.util.Map.Entry;
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
16 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
17 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
20 import org.opendaylight.unimgr.impl.UnimgrConstants;
21 import org.opendaylight.unimgr.impl.UnimgrUtils;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Evc;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.evc.UniDest;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.evc.UniSource;
25 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
27 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
28 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
29 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
30 import org.opendaylight.yangtools.yang.binding.DataObject;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
35 import com.google.common.base.Optional;
36 import com.google.common.util.concurrent.CheckedFuture;
38 public class EvcDeleteCommand extends AbstractDeleteCommand {
40 private static final Logger LOG = LoggerFactory.getLogger(EvcDeleteCommand.class);
42 public EvcDeleteCommand(DataBroker dataBroker,
43 AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
44 super.changes = changes;
45 super.dataBroker = dataBroker;
49 public void execute() {
50 Map<InstanceIdentifier<Evc>, Evc> originalEvcs = UnimgrUtils.extractOriginal(changes, Evc.class);
51 //Set<InstanceIdentifier<Evc>> removedEvcs = UnimgrUtils.extractRemoved(changes, Evc.class);
53 Set<InstanceIdentifier<?>> removedPaths = changes.getRemovedPaths();
54 if (!removedPaths.isEmpty()) {
55 for (InstanceIdentifier<?> removedPath: removedPaths) {
56 Class<?> type = removedPath.getTargetType();
57 LOG.trace("Removed paths instance identifier {}", type);
58 if (type.equals(Evc.class)) {
59 LOG.info("Removed paths instance identifier {}", type);
60 for (Entry<InstanceIdentifier<Evc>, Evc> evc: originalEvcs.entrySet()) {
61 if (evc.getKey().equals(type)) {
62 Evc data = evc.getValue();
63 List<UniSource> uniSourceLst = data.getUniSource();
64 for (UniSource uniSource : uniSourceLst) {
65 InstanceIdentifier<?> iidUni = uniSource.getUni();
66 Optional<Node> optionalOvsdbNode =
67 UnimgrUtils.readNode(dataBroker,
68 LogicalDatastoreType.OPERATIONAL,
70 if (optionalOvsdbNode.isPresent()) {
71 Node ovsdbNode = optionalOvsdbNode.get();
72 List<TerminationPoint> termPointList = ovsdbNode.getTerminationPoint();
73 for(TerminationPoint termPoint : termPointList) {
74 deleteTerminationPoint(termPoint, ovsdbNode);
78 LOG.info("Removed EVC Source {}", data.getUniSource());
79 List<UniDest> uniDestLst = data.getUniDest();
80 for (UniDest uniDest : uniDestLst) {
81 InstanceIdentifier<?> iidUni = uniDest.getUni();
82 Optional<Node> optionalOvsdbNode =
83 UnimgrUtils.readNode(dataBroker,
84 LogicalDatastoreType.OPERATIONAL,
86 if (optionalOvsdbNode.isPresent()) {
87 Node ovsdbNode = optionalOvsdbNode.get();
88 List<TerminationPoint> termPointList = ovsdbNode.getTerminationPoint();
89 for(TerminationPoint termPoint : termPointList) {
90 deleteTerminationPoint(termPoint, ovsdbNode);
94 LOG.info("Removed EVC Destination {}", data.getUniDest());
102 private boolean deleteTerminationPoint(TerminationPoint termPoint, Node ovsdbNode) {
103 boolean result = false;
104 InstanceIdentifier<TerminationPoint> terminationPointPath = InstanceIdentifier
105 .create(NetworkTopology.class)
106 .child(Topology.class, new TopologyKey(UnimgrConstants.OVSDB_TOPOLOGY_ID))
107 .child(Node.class,ovsdbNode.getKey())
108 .child(TerminationPoint.class, termPoint.getKey());
109 final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
110 transaction.delete(LogicalDatastoreType.OPERATIONAL, terminationPointPath);
111 CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
115 } catch (TransactionCommitFailedException e) {
116 LOG.warn("Failed to delete {} ", terminationPointPath, e);