Implemented EVC delete
[unimgr.git] / impl / src / main / java / org / opendaylight / unimgr / command / EvcDeleteCommand.java
1 /*
2  * Copyright (c) 2015 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 package org.opendaylight.unimgr.command;
9
10 import java.util.Map;
11 import java.util.Set;
12
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.unimgr.impl.UnimgrMapper;
17 import org.opendaylight.unimgr.impl.UnimgrUtils;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Evc;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
21 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
22 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
23 import org.opendaylight.yangtools.yang.binding.DataObject;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27
28 import com.google.common.base.Optional;
29
30 public class EvcDeleteCommand extends AbstractDeleteCommand {
31
32     private static final Logger LOG = LoggerFactory.getLogger(EvcDeleteCommand.class);
33
34     public EvcDeleteCommand(DataBroker dataBroker,
35             AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
36         super.changes = changes;
37         super.dataBroker = dataBroker;
38     }
39
40     @Override
41     public void execute() {
42         Map<InstanceIdentifier<?>, DataObject> originalData = changes.getOriginalData();
43         Set<InstanceIdentifier<?>> removedIids = changes.getRemovedPaths();
44         for (InstanceIdentifier<?> evcIid : removedIids) {
45             DataObject removedDataObject = originalData.get(evcIid);
46             if (removedDataObject instanceof Evc) {
47                 Evc evc = (Evc)removedDataObject;
48                 Optional<Node> optionalSourceUniNode = UnimgrUtils.readNode(dataBroker,
49                                                                              LogicalDatastoreType.OPERATIONAL,
50                                                                              evc.getUniSource()
51                                                                                 .iterator()
52                                                                                 .next()
53                                                                                 .getUni());
54                 Optional<Node> optionalDestinationUniNode = UnimgrUtils.readNode(dataBroker,
55                                                                                    LogicalDatastoreType.OPERATIONAL,
56                                                                                    evc.getUniDest()
57                                                                                       .iterator()
58                                                                                       .next()
59                                                                                       .getUni());
60                 if (optionalSourceUniNode.isPresent()
61                         && optionalDestinationUniNode.isPresent()) {
62                     Node sourceUniNode = optionalSourceUniNode.get();
63                     Node destUniNode = optionalDestinationUniNode.get();
64                     UniAugmentation sourceUniAugmentation = sourceUniNode
65                                                                 .getAugmentation(UniAugmentation.class);
66                     UniAugmentation destUniAugmentation = destUniNode
67                                                               .getAugmentation(UniAugmentation.class);
68                     InstanceIdentifier<Node> sourceOvsdbIid =
69                                                  sourceUniAugmentation
70                                                      .getOvsdbNodeRef()
71                                                      .getValue()
72                                                      .firstIdentifierOf(Node.class);
73                     InstanceIdentifier<Node> destOvsdbIid =
74                                                  destUniAugmentation
75                                                      .getOvsdbNodeRef()
76                                                      .getValue()
77                                                      .firstIdentifierOf(Node.class);
78                     Optional<Node> optionalSourceOvsdNode =
79                                        UnimgrUtils.readNode(dataBroker,
80                                                             LogicalDatastoreType.OPERATIONAL,
81                                                             sourceOvsdbIid);
82                     Optional<Node> optionalDestinationOvsdbNode =
83                                        UnimgrUtils.readNode(dataBroker,
84                                                             LogicalDatastoreType.OPERATIONAL,
85                                                             destOvsdbIid);
86                     if (optionalSourceOvsdNode.isPresent()
87                             && optionalDestinationOvsdbNode.isPresent()) {
88                         Node sourceOvsdbNode = optionalSourceOvsdNode.get();
89                         Node destinationOvsdbNode = optionalDestinationOvsdbNode.get();
90                         OvsdbNodeAugmentation sourceOvsdbNodeAugmentation =
91                                                   sourceOvsdbNode.getAugmentation(OvsdbNodeAugmentation.class);
92                         OvsdbNodeAugmentation destinationOvsdbNodeAugmentation =
93                                                   destinationOvsdbNode.getAugmentation(OvsdbNodeAugmentation.class);
94                         InstanceIdentifier<Node> sourceBridgeIid =
95                                                      sourceOvsdbNodeAugmentation
96                                                          .getManagedNodeEntry()
97                                                          .iterator()
98                                                          .next()
99                                                          .getBridgeRef()
100                                                          .getValue()
101                                                          .firstIdentifierOf(Node.class);
102                         InstanceIdentifier<Node> destinationBridgeIid =
103                                                      destinationOvsdbNodeAugmentation
104                                                          .getManagedNodeEntry()
105                                                          .iterator()
106                                                          .next()
107                                                          .getBridgeRef()
108                                                          .getValue()
109                                                          .firstIdentifierOf(Node.class);
110                         Optional<Node> optionalSourceBridgeNode = UnimgrUtils.readNode(dataBroker,
111                                                                                        LogicalDatastoreType.OPERATIONAL,
112                                                                                        sourceBridgeIid);
113                         Optional<Node>  optionalDestinationBridgeNode = UnimgrUtils.readNode(dataBroker,
114                                                                                              LogicalDatastoreType.OPERATIONAL,
115                                                                                              destinationBridgeIid);
116                         if (optionalSourceBridgeNode.isPresent()
117                                 && optionalDestinationBridgeNode.isPresent()) {
118                             Node sourceBridgeNode = optionalSourceBridgeNode.get();
119                             Node destinationBridgeNode = optionalSourceBridgeNode.get();
120                             TpId sourceTp = sourceBridgeNode.getTerminationPoint().iterator().next().getTpId();
121                             TpId destTp = destinationBridgeNode.getTerminationPoint().iterator().next().getTpId();
122                             InstanceIdentifier<?> sourceTpIid = UnimgrMapper.getTerminationPointIid(sourceBridgeNode,
123                                                                                                     sourceTp);
124                             InstanceIdentifier<?> destinationTpIid = UnimgrMapper.getTerminationPointIid(destinationBridgeNode,
125                                                                                                          destTp);
126                             UnimgrUtils.deleteNode(dataBroker, sourceTpIid, LogicalDatastoreType.CONFIGURATION);
127                             UnimgrUtils.deleteNode(dataBroker, destinationTpIid, LogicalDatastoreType.CONFIGURATION);
128                             UnimgrUtils.deleteNode(dataBroker, sourceTpIid, LogicalDatastoreType.OPERATIONAL);
129                             UnimgrUtils.deleteNode(dataBroker, destinationTpIid, LogicalDatastoreType.OPERATIONAL);
130                         } else {
131                             LOG.info("Unable to retrieve the Ovsdb Bridge node source and/or destination.");
132                         }
133                     } else {
134                         LOG.info("Unable to retrieve the Ovsdb node source and/or destination.");
135                     }
136                 } else {
137                     LOG.info("Unable to retrieve the Uni source and/or destination.");
138                 }
139             }
140         }
141     }
142 }