manually cherry pick this patch https://git.opendaylight.org/gerrit/#/c/34579/
[unimgr.git] / impl / src / main / java / org / opendaylight / unimgr / command / UniRemoveCommand.java
1 /*
2  * Copyright (c) 2016 CableLabs and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.unimgr.command;
10
11 import java.util.List;
12
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.unimgr.api.AbstractCommand;
17 import org.opendaylight.unimgr.impl.UnimgrMapper;
18 import org.opendaylight.unimgr.utils.MdsalUtils;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesKey;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.Queues;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QueuesKey;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 import com.google.common.base.Optional;
32
33 public class UniRemoveCommand extends AbstractCommand<Node> {
34
35     private static final Logger LOG = LoggerFactory.getLogger(UniRemoveCommand.class);
36
37     public UniRemoveCommand(final DataBroker dataBroker, final DataTreeModification<Node> removedUniNode) {
38         super(dataBroker, removedUniNode);
39     }
40
41     @Override
42     public void execute() {
43         final Node uniNode = dataObject.getRootNode().getDataBefore();
44         final UniAugmentation uniAugmentation = uniNode.getAugmentation(UniAugmentation.class);
45         final InstanceIdentifier<?> removedUniIid = dataObject.getRootPath().getRootIdentifier()
46                                                                     .firstIdentifierOf(UniAugmentation.class);
47         if (uniAugmentation != null) {
48             final OvsdbNodeRef ovsNodedRef = uniAugmentation.getOvsdbNodeRef();
49             final InstanceIdentifier<Node> ovsdbNodeIid = ovsNodedRef.getValue().firstIdentifierOf(Node.class);
50             final Optional<Node> optionalNode = MdsalUtils.readNode(dataBroker,
51                                                                LogicalDatastoreType.OPERATIONAL,
52                                                                ovsdbNodeIid);
53             if (optionalNode.isPresent()) {
54                 final Node ovsdbNode = optionalNode.get();
55                 LOG.info("Delete QoS and Queues entries");
56                 List<QosEntries> qosList = ovsdbNode
57                         .getAugmentation(OvsdbNodeAugmentation.class)
58                         .getQosEntries();
59                 QosEntriesKey qosEntryKey = null;
60                 for (final QosEntries qosEntry : qosList) {
61                     qosEntryKey = qosEntry.getKey();
62                     InstanceIdentifier<QosEntries> qosIid = UnimgrMapper.getOvsdbQoSEntriesIid(ovsdbNode, qosEntryKey);
63                     MdsalUtils.deleteNode(dataBroker, qosIid, LogicalDatastoreType.CONFIGURATION);
64                 }
65                 List<Queues> queuesList = ovsdbNode
66                         .getAugmentation(OvsdbNodeAugmentation.class)
67                         .getQueues();
68                 QueuesKey queuesKey = null;
69                 for (final Queues queue : queuesList) {
70                     queuesKey = queue.getKey();
71                     InstanceIdentifier<Queues> queuesIid = UnimgrMapper.getOvsdbQueuesIid(ovsdbNode, queuesKey);
72                     MdsalUtils.deleteNode(dataBroker, queuesIid, LogicalDatastoreType.CONFIGURATION);
73                 }
74                 LOG.info("Delete bride node");
75                 final InstanceIdentifier<Node> bridgeIid = UnimgrMapper.getOvsdbBridgeNodeIid(ovsdbNode);
76                 MdsalUtils.deleteNode(dataBroker, bridgeIid, LogicalDatastoreType.CONFIGURATION);
77             }
78             final InstanceIdentifier<Node> iidUni = UnimgrMapper.getUniIid(dataBroker, uniAugmentation.getIpAddress(),
79                                                                      LogicalDatastoreType.OPERATIONAL);
80             if (iidUni != null) {
81                 MdsalUtils.deleteNode(dataBroker, iidUni, LogicalDatastoreType.OPERATIONAL);
82             }
83         }
84         else {
85             LOG.info("Received Uni Augmentation is null", removedUniIid);
86         }
87     }
88
89 }