Fix: remove network related flow rules on openstack network removal

Change-Id: I3f6501cfd2474665ed244ff10ae604e7aac2f801
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java
index 2cebd2f..474e6d1 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackNetworkStore.java
@@ -74,6 +74,7 @@
 import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.EXTERNAL_PEER_ROUTER_REMOVED;
 import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.EXTERNAL_PEER_ROUTER_UPDATED;
 import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_CREATED;
+import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_PRE_REMOVED;
 import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_REMOVED;
 import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_NETWORK_UPDATED;
 import static org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type.OPENSTACK_PORT_CREATED;
@@ -373,6 +374,20 @@
             notifyDelegate(new OpenstackNetworkEvent(
                     OPENSTACK_NETWORK_UPDATED,
                     event.newValue().value()));
+
+            Network oldValue = event.oldValue().value();
+            Network newValue = event.newValue().value();
+
+            // FIXME: before the network get removed eventually, neutron always
+            // issue network update event with removed (empty) segmentation ID
+            // this might be a bug of openstack or openstack4j, need to revisit later
+            if (oldValue.getProviderSegID() != null &&
+                    newValue.getProviderSegID() == null) {
+                log.debug("OpenStack network pre-removed");
+                notifyDelegate(new OpenstackNetworkEvent(
+                        OPENSTACK_NETWORK_PRE_REMOVED,
+                        event.oldValue().value()));
+            }
         }
 
         private void processNetworkMapInsertion(MapEvent<String, Network> event) {