Flow stats collection optimization - Flag introduced to stop periodic collection and collect only in 3 scenarios (Flows Add/Delete/Mod, Switch Add/Change, Mastership Change)

Change-Id: I1ad143a416f34135a622818c60dbc97310fe905e
diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowSwitchListener.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowSwitchListener.java
index 5ad5a4f..41ec50b 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowSwitchListener.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowSwitchListener.java
@@ -55,4 +55,11 @@
      * @param response role reply from the switch
      */
     void receivedRoleReply(Dpid dpid, RoleState requested, RoleState response);
+
+    /**
+     * Notify that role of the switch changed to Master.
+     *
+     * @param dpid the switch for which the role is changed
+     */
+    default void roleChangedToMaster(Dpid dpid) {}
 }
diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
index 8431068..9434c59 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
@@ -340,6 +340,7 @@
             }
             // perform role transition after clearing messages queue
             this.role = RoleState.MASTER;
+            this.agent.roleChangedToMaster(dpid);
         }
     }
 
diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java
index 4451b19..d6bda5d 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowAgent.java
@@ -124,4 +124,11 @@
      * @param listener the OpenFlow classifier listener
      */
     void removeClassifierListener(OpenFlowClassifierListener listener);
+
+    /**
+     * Notify that role of the switch changed to Master.
+     *
+     * @param dpid the switch for which the role is changed
+     */
+    default void roleChangedToMaster(Dpid dpid) {}
 }