[ONOS-5171] FlowRuleStore: add purgeFlowEntries

The FlowRuleStore exposes purgeFlowEntry(DeviceId),
which purges from the store by a specific device.

Add purgeFlowEntries, to purge entries from all devices.

Change-Id: I0ec50d2bbb8b39097189f9e332dc3efd281bc811
diff --git a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java
index bb8104d..f1cb90c 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/FlowRuleStore.java
@@ -111,7 +111,12 @@
      *
      * @param deviceId device id
      */
-    void purgeFlowRule(DeviceId deviceId);
+    default void purgeFlowRule(DeviceId deviceId) {}
+
+    /**
+     * Removes all flow entries from store.
+     */
+    void purgeFlowRules();
 
     /**
      * Updates the flow table statistics of the specified device using
diff --git a/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java b/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java
index 3706b4b..81c3105 100644
--- a/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java
+++ b/core/common/src/test/java/org/onosproject/store/trivial/SimpleFlowRuleStore.java
@@ -316,6 +316,11 @@
     }
 
     @Override
+    public void purgeFlowRules() {
+        flowEntries.clear();
+    }
+
+    @Override
     public void storeBatch(
             FlowRuleBatchOperation operation) {
         List<FlowRuleBatchEntry> toAdd = new ArrayList<>();
diff --git a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DistributedFlowRuleStore.java b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DistributedFlowRuleStore.java
index ef8bfe5..9e2c53d 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DistributedFlowRuleStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/flow/impl/DistributedFlowRuleStore.java
@@ -624,6 +624,11 @@
     }
 
     @Override
+    public void purgeFlowRules() {
+        flowTable.purgeFlowRules();
+    }
+
+    @Override
     public void batchOperationComplete(FlowRuleBatchEvent event) {
         //FIXME: need a per device pending response
         NodeId nodeId = pendingResponses.remove(event.subject().batchId());
@@ -872,6 +877,10 @@
             flowEntries.remove(deviceId);
         }
 
+        public void purgeFlowRules() {
+            flowEntries.clear();
+        }
+
         private List<NodeId> getBackupNodes(DeviceId deviceId) {
             // The returned backup node list is in the order of preference i.e. next likely master first.
             List<NodeId> allPossibleBackupNodes = replicaInfoManager.getReplicaInfoFor(deviceId).backups();