ovsdb enable checkstyle on error
[ovsdb.git] / southbound / southbound-impl / src / main / java / org / opendaylight / ovsdb / southbound / ovsdb / transact / DataChangesManagedByOvsdbNodeEvent.java
index 15907ee492774d300552da0ea0333c1815d389a9..ee835e56808010f7df1095b55ac625cc58919c02 100644 (file)
@@ -1,14 +1,25 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
 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;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -17,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;
     }
@@ -32,13 +45,15 @@ 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());
             } else {
                 Class<?> type = entry.getKey().getTargetType();
-                if (type.equals(OvsdbNodeAugmentation.class)) {
+                if (type.equals(OvsdbNodeAugmentation.class)
+                        || type.equals(OvsdbTerminationPointAugmentation.class)
+                        || type.equals(Node.class)) {
                     result.put(entry.getKey(), entry.getValue());
                 }
             }
@@ -65,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);
@@ -94,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