Fixing a recent breakage in Flow programmer introduced by https://git.opendaylight...
[controller.git] / opendaylight / protocol_plugins / openflow / src / main / java / org / opendaylight / controller / protocol_plugin / openflow / internal / ReadServiceFilter.java
index b877eb0ee793626d2990e24855052653466aa4ba..b21a105f157809a94d7e4ff3530318c1921e9f4d 100644 (file)
@@ -27,6 +27,7 @@ import org.opendaylight.controller.sal.action.Action;
 import org.opendaylight.controller.sal.action.ActionType;
 import org.opendaylight.controller.sal.action.Output;
 import org.opendaylight.controller.sal.core.ContainerFlow;
+import org.opendaylight.controller.sal.core.IContainerAware;
 import org.opendaylight.controller.sal.core.IContainerListener;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
@@ -55,7 +56,7 @@ import org.slf4j.LoggerFactory;
  * Read Service shim layer which is in charge of filtering the flow statistics
  * based on container. It is a Global instance.
  */
-public class ReadServiceFilter implements IReadServiceFilter, IContainerListener, IOFStatisticsListener {
+public class ReadServiceFilter implements IReadServiceFilter, IContainerListener, IOFStatisticsListener, IContainerAware {
     private static final Logger logger = LoggerFactory
             .getLogger(ReadServiceFilter.class);
     private IController controller = null;
@@ -188,7 +189,7 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener
         List<FlowOnNode> flowOnNodeList = new FlowStatisticsConverter(ofList).getFlowOnNodeList(node);
         List<FlowOnNode> filteredList = filterFlowListPerContainer(container, node, flowOnNodeList);
 
-        return (filteredList == null || filteredList.isEmpty()) ? null : filteredList.get(0);
+        return (filteredList.isEmpty()) ? null : filteredList.get(0);
     }
 
     @Override
@@ -202,10 +203,8 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener
 
         // Convert and filter the statistics per container
         List<FlowOnNode> flowOnNodeList = new FlowStatisticsConverter(ofList).getFlowOnNodeList(node);
-        List<FlowOnNode> filteredList = filterFlowListPerContainer(container, node, flowOnNodeList);
-
-        return (filteredList == null) ? null : filteredList;
 
+        return filterFlowListPerContainer(container, node, flowOnNodeList);
     }
 
     @Override
@@ -232,10 +231,10 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener
      * @param list
      * @return
      */
-    public List<FlowOnNode> filterFlowListPerContainer(String container,
+    private List<FlowOnNode> filterFlowListPerContainer(String container,
             Node nodeId, List<FlowOnNode> list) {
         if (list == null) {
-            return null;
+            return Collections.emptyList();
         }
 
         // Create new filtered list of flows
@@ -259,9 +258,9 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener
      * @param list
      * @return
      */
-    public List<OFStatistics> filterPortListPerContainer(String container, long switchId, List<OFStatistics> list) {
+    private List<OFStatistics> filterPortListPerContainer(String container, long switchId, List<OFStatistics> list) {
         if (list == null) {
-            return null;
+            return Collections.emptyList();
         }
 
         // Create new filtered list of flows
@@ -280,10 +279,10 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener
     }
 
 
-    public List<OFStatistics> filterTableListPerContainer(
+    private List<OFStatistics> filterTableListPerContainer(
             String container, long switchId, List<OFStatistics> list) {
         if (list == null) {
-            return null;
+            return Collections.emptyList();
         }
 
         // Create new filtered list of node tables
@@ -632,4 +631,17 @@ public class ReadServiceFilter implements IReadServiceFilter, IContainerListener
             l.getValue().nodeTableStatisticsUpdated(node, tableStatsList);
         }
     }
+
+    @Override
+    public void containerCreate(String containerName) {
+        // do nothing
+    }
+
+    @Override
+    public void containerDestroy(String containerName) {
+        containerToNc.remove(containerName);
+        containerToNode.remove(containerName);
+        containerToNt.remove(containerName);
+        containerFlows.remove(containerName);
+    }
 }