Fix: resolve an issue of installing rules before purging them

Change-Id: I0be44707d2fec1b4a97a9fbe1c61eee4da0b4ce6
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java
index be72076..49c31cb 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/cli/OpenstackPurgeRulesCommand.java
@@ -22,6 +22,10 @@
 import org.onosproject.net.flow.FlowRuleService;
 import org.onosproject.openstacknetworking.api.Constants;
 
+import java.util.stream.Stream;
+
+import static java.util.stream.StreamSupport.stream;
+
 /**
  * Purges all existing network states.
  */
@@ -39,6 +43,15 @@
             return;
         }
         flowRuleService.removeFlowRulesById(appId);
+
+        // we make sure all flow rules are removed from the store
+        while (true) {
+            Stream stream = stream(flowRuleService.getFlowEntriesById(appId).spliterator(), false);
+            if (stream.count() == 0) {
+                break;
+            }
+        }
+
         print("Successfully purged flow rules installed by OpenStack networking application.");
     }
 }
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
index 2c36b2e..7834a82 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackManagementWebResource.java
@@ -53,8 +53,10 @@
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.stream.Stream;
 
 import static java.lang.Thread.sleep;
+import static java.util.stream.StreamSupport.stream;
 import static org.onlab.util.Tools.nullIsIllegal;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.addRouterIface;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkActivationFlag;
@@ -359,6 +361,14 @@
             throw new ItemNotFoundException("application not found");
         }
         flowRuleService.removeFlowRulesById(appId);
+
+        // we make sure all flow rules are removed from the store
+        while (true) {
+            Stream stream = stream(flowRuleService.getFlowEntriesById(appId).spliterator(), false);
+            if (stream.count() == 0) {
+                break;
+            }
+        }
     }
 
     private void configArpModeBase(String arpMode) {