1 package org.opendaylight.unimgr.mef.nrp.ovs.tapi;
3 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
4 import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
5 import org.opendaylight.unimgr.utils.CapabilitiesService;
6 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
7 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
8 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
9 import org.opendaylight.yangtools.yang.binding.DataObject;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
13 import java.util.Collection;
14 import java.util.List;
16 import java.util.function.Function;
18 import static org.opendaylight.unimgr.utils.CapabilitiesService.Capability.Mode.AND;
19 import static org.opendaylight.unimgr.utils.CapabilitiesService.NodeContext.NodeCapability.OVSDB;
22 * Class created to classify object according to its modification types.
24 * @author marek.ryznar@amartus.com
26 public class DataObjectModificationQualifier {
27 private static final Logger LOG = LoggerFactory.getLogger(DataObjectModificationQualifier.class);
28 private CapabilitiesService capabilitiesService;
30 public DataObjectModificationQualifier(DataBroker dataBroker){
31 capabilitiesService = new CapabilitiesService(dataBroker);
34 private Function<Node,Boolean> isOvs = node -> capabilitiesService.node(node).isSupporting(AND, OVSDB);
36 protected void checkNodes(List<DataObjectModification> nodes, Map<TerminationPoint,String> toAddMap, Map<TerminationPoint,String> toUpdateMap, Map<TerminationPoint,String> toDeleteMap){
38 for(DataObjectModification node: nodes){
39 switch(node.getModificationType()){
42 n = (Node) node.getDataAfter();
43 if(!isOvs.apply(n) || n.getTerminationPoint()==null)
45 String bridgeName = n.getAugmentation(OvsdbBridgeAugmentation.class).getBridgeName().getValue();
46 n.getTerminationPoint().forEach(tp -> toAddMap.put(tp,bridgeName));
48 case SUBTREE_MODIFIED:{
49 checkTerminationPoints(node, toAddMap, toUpdateMap, toDeleteMap);
51 //whole ovs-node eg. s1 deleted
53 n = (Node) node.getDataBefore();
54 if(!isOvs.apply(n) || n.getTerminationPoint()==null)
56 String bridgeName = n.getAugmentation(OvsdbBridgeAugmentation.class).getBridgeName().getValue();
57 n.getTerminationPoint().forEach(tp -> toDeleteMap.put(tp,bridgeName));
60 LOG.debug("Not supported modification type: {}",node.getModificationType());
66 private void checkTerminationPoints(DataObjectModification node, Map<TerminationPoint,String> toAddMap, Map<TerminationPoint,String> toUpdateMap, Map<TerminationPoint,String> toDeleteMap){
67 Node n = (Node) node.getDataAfter();
70 String bridgeName = n.getAugmentation(OvsdbBridgeAugmentation.class).getBridgeName().getValue();
71 Collection<DataObjectModification<? extends DataObject>> modifiedChildren = node.getModifiedChildren();
73 TerminationPoint terminationPoint;
74 for(DataObjectModification tp: modifiedChildren) {
75 if(!tp.getDataType().equals(TerminationPoint.class))
77 switch (tp.getModificationType()) {
78 //new port added eg. s1-eth7
80 terminationPoint = (TerminationPoint) tp.getDataAfter();
81 toAddMap.put(terminationPoint,bridgeName);
83 case SUBTREE_MODIFIED: {
84 terminationPoint = (TerminationPoint) tp.getDataAfter();
85 if (!tp.getDataBefore().equals(tp.getDataAfter()))
86 toUpdateMap.put(terminationPoint,bridgeName);
89 terminationPoint = (TerminationPoint) tp.getDataBefore();
90 toDeleteMap.put(terminationPoint,bridgeName);
93 LOG.debug("Not supported modification type: SUBTREE_MODIFIED.{}",tp.getModificationType());