ovsdb enable checkstyle on error
[ovsdb.git] / southbound / southbound-impl / src / main / java / org / opendaylight / ovsdb / southbound / ovsdb / transact / DataChangesManagedByOvsdbNodeEvent.java
index cc6b7d642ec641a8a45154c606bf7d24872fca1c..ee835e56808010f7df1095b55ac625cc58919c02 100644 (file)
@@ -8,13 +8,15 @@
 
 package org.opendaylight.ovsdb.southbound.ovsdb.transact;
 
+import com.google.common.base.Optional;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
-
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.ovsdb.southbound.SouthboundUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
@@ -26,14 +28,16 @@ public class DataChangesManagedByOvsdbNodeEvent implements
     AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> {
 
     private InstanceIdentifier<?> iid;
+    private DataBroker db;
     private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event;
     private Map<InstanceIdentifier<?>, DataObject> createdData = null;
     private Map<InstanceIdentifier<?>, DataObject> updatedData = null;
     private Map<InstanceIdentifier<?>, DataObject> originalData = null;
     private Set<InstanceIdentifier<?>> removedPaths;
 
-    public DataChangesManagedByOvsdbNodeEvent(InstanceIdentifier<?> iid,
-            AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event) {
+    public DataChangesManagedByOvsdbNodeEvent(DataBroker dataBroker, InstanceIdentifier<?> iid,
+                                              AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> event) {
+        this.db = dataBroker;
         this.iid = iid;
         this.event = event;
     }
@@ -41,7 +45,7 @@ public class DataChangesManagedByOvsdbNodeEvent implements
     private Map<InstanceIdentifier<?>, DataObject> filter(Map<InstanceIdentifier<?>,
             DataObject> data) {
         Map<InstanceIdentifier<?>, DataObject> result
-            = new HashMap<InstanceIdentifier<?>, DataObject>();
+            = new HashMap<>();
         for (Entry<InstanceIdentifier<?>, DataObject> entry: data.entrySet()) {
             if (isManagedBy(entry.getKey())) {
                 result.put(entry.getKey(),entry.getValue());
@@ -76,7 +80,7 @@ public class DataChangesManagedByOvsdbNodeEvent implements
     @Override
     public Set<InstanceIdentifier<?>> getRemovedPaths() {
         if (this.removedPaths == null) {
-            this.removedPaths = new HashSet<InstanceIdentifier<?>>();
+            this.removedPaths = new HashSet<>();
             for (InstanceIdentifier<?> path: event.getRemovedPaths()) {
                 if (isManagedBy(path)) {
                     this.removedPaths.add(path);
@@ -105,10 +109,30 @@ public class DataChangesManagedByOvsdbNodeEvent implements
         if (managedBy != null && managedBy.equals(iid)) {
             return true;
         }
+
+        managedBy = getManagedByIidFromOperDS(bridgeIid);
+        if (managedBy != null && managedBy.equals(iid)) {
+            return true;
+        }
         return false;
 
     }
 
+    private InstanceIdentifier<?> getManagedByIidFromOperDS(InstanceIdentifier<?> bridgeIid) {
+        // Get the InstanceIdentifier of the containing node
+        InstanceIdentifier<Node> nodeEntryIid = bridgeIid.firstIdentifierOf(Node.class);
+
+        Optional<?> bridgeNode =  SouthboundUtil.readNode(db.newReadWriteTransaction(),nodeEntryIid);
+        if (bridgeNode.isPresent() && bridgeNode.get() instanceof Node) {
+            Node node = (Node)bridgeNode.get();
+            OvsdbBridgeAugmentation bridge = node.getAugmentation(OvsdbBridgeAugmentation.class);
+            if (bridge != null && bridge.getManagedBy() != null) {
+                return bridge.getManagedBy().getValue();
+            }
+        }
+        return null;
+    }
+
     private InstanceIdentifier<?> getManagedByIid(Map<InstanceIdentifier<?>, DataObject> map,
             InstanceIdentifier<?> iidToCheck) {
         // Get the InstanceIdentifier of the containing node