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;
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.controller.md.sal.common.api.data.TransactionCommitFailedException;
17 import org.opendaylight.unimgr.impl.UnimgrConstants;
18 import org.opendaylight.unimgr.impl.UnimgrMapper;
19 import org.opendaylight.unimgr.impl.UnimgrUtils;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Evc;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
23 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
25 import org.opendaylight.yangtools.yang.binding.DataObject;
26 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
30 import com.google.common.base.Optional;
31 import com.google.common.util.concurrent.CheckedFuture;
33 public class EvcDeleteCommand extends AbstractDeleteCommand {
35 private static final Logger LOG = LoggerFactory.getLogger(EvcDeleteCommand.class);
37 public EvcDeleteCommand(DataBroker dataBroker,
38 AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
39 super.changes = changes;
40 super.dataBroker = dataBroker;
44 public void execute() {
45 Map<InstanceIdentifier<?>, DataObject> originalData = changes.getOriginalData();
46 Set<InstanceIdentifier<?>> removedIids = changes.getRemovedPaths();
47 for (InstanceIdentifier<?> evcIid : removedIids) {
48 DataObject removedDataObject = originalData.get(evcIid);
49 if (removedDataObject instanceof Evc) {
50 Evc evc = (Evc)removedDataObject;
51 Optional<Node> optionalSourceUniNode = UnimgrUtils.readNode(dataBroker,
52 LogicalDatastoreType.OPERATIONAL,
57 Optional<Node> optionalDestinationUniNode = UnimgrUtils.readNode(dataBroker,
58 LogicalDatastoreType.OPERATIONAL,
63 if (optionalSourceUniNode.isPresent()
64 && optionalDestinationUniNode.isPresent()) {
65 Node sourceUniNode = optionalSourceUniNode.get();
66 Node destUniNode = optionalDestinationUniNode.get();
67 UniAugmentation sourceUniAugmentation = sourceUniNode
68 .getAugmentation(UniAugmentation.class);
69 UniAugmentation destUniAugmentation = destUniNode
70 .getAugmentation(UniAugmentation.class);
71 InstanceIdentifier<Node> sourceOvsdbIid =
75 .firstIdentifierOf(Node.class);
76 InstanceIdentifier<Node> destOvsdbIid =
80 .firstIdentifierOf(Node.class);
81 Optional<Node> optionalSourceOvsdNode =
82 UnimgrUtils.readNode(dataBroker,
83 LogicalDatastoreType.OPERATIONAL,
85 Optional<Node> optionalDestinationOvsdbNode =
86 UnimgrUtils.readNode(dataBroker,
87 LogicalDatastoreType.OPERATIONAL,
89 if (optionalSourceOvsdNode.isPresent()
90 && optionalDestinationOvsdbNode.isPresent()) {
91 Node sourceOvsdbNode = optionalSourceOvsdNode.get();
92 Node destinationOvsdbNode = optionalDestinationOvsdbNode.get();
93 OvsdbNodeAugmentation sourceOvsdbNodeAugmentation = sourceOvsdbNode
94 .getAugmentation(OvsdbNodeAugmentation.class);
95 OvsdbNodeAugmentation destinationOvsdbNodeAugmentation = destinationOvsdbNode
96 .getAugmentation(OvsdbNodeAugmentation.class);
97 InstanceIdentifier<Node> sourceBridgeIid = sourceOvsdbNodeAugmentation.getManagedNodeEntry()
98 .iterator().next().getBridgeRef().getValue().firstIdentifierOf(Node.class);
99 InstanceIdentifier<Node> destinationBridgeIid = destinationOvsdbNodeAugmentation
100 .getManagedNodeEntry().iterator().next().getBridgeRef().getValue()
101 .firstIdentifierOf(Node.class);
102 CheckedFuture<Void, TransactionCommitFailedException> deleteOperNodeResult = UnimgrUtils
103 .deleteNode(dataBroker, sourceBridgeIid, LogicalDatastoreType.CONFIGURATION);
104 CheckedFuture<Void, TransactionCommitFailedException> deleteConfigNodeResult = UnimgrUtils
105 .deleteNode(dataBroker, destinationBridgeIid, LogicalDatastoreType.CONFIGURATION);
107 deleteOperNodeResult.checkedGet();
108 deleteConfigNodeResult.checkedGet();
109 if (deleteOperNodeResult.isDone() && deleteConfigNodeResult.isDone()) {
110 UnimgrUtils.createBridgeNode(dataBroker, sourceOvsdbIid,
111 sourceUniNode.getAugmentation(UniAugmentation.class),
112 UnimgrConstants.DEFAULT_BRIDGE_NAME);
113 UnimgrUtils.createBridgeNode(dataBroker, destOvsdbIid,
114 destUniNode.getAugmentation(UniAugmentation.class),
115 UnimgrConstants.DEFAULT_BRIDGE_NAME);
117 } catch (TransactionCommitFailedException e) {
118 LOG.error("Unable to delete bridges.");
121 LOG.info("Unable to retrieve the Ovsdb node source and/or destination.");
124 LOG.info("Unable to retrieve the Uni source and/or destination.");