Enhance the RM logic for Kubevirt Networking App

Change-Id: I84fa678c75ba1e738c68c72ffbc89c54e5309997
(cherry picked from commit 842b3031e5b82a95d1f292fc952e8f091cc1e20b)
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
index b829980..c3ba661 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
@@ -1088,6 +1088,8 @@
             if (!isRelevantHelper()) {
                 return;
             }
+            log.info("###### processRouterGatewayNodeAttached called for router {} and new router is {}",
+                    router.name(), associatedGateway);
 
             KubevirtNode gatewayNode = nodeService.node(associatedGateway);
             if (gatewayNode == null) {
@@ -1151,7 +1153,7 @@
                 KubevirtNetwork network = networkService.network(networkName);
 
                 if (network != null) {
-                    initGatewayNodeForInternalNetwork(network, router, oldGatewayNode, true);
+                    initGatewayNodeForInternalNetwork(network, router, newGatewayNode, true);
                 }
             });
         }
@@ -1263,10 +1265,10 @@
                 case KUBEVIRT_NODE_COMPLETE:
                     eventExecutor.execute(() -> processNodeCompletion(event.subject()));
                     break;
+                case KUBEVIRT_NODE_INCOMPLETE:
                 case KUBEVIRT_NODE_REMOVED:
                     eventExecutor.execute(() -> processNodeDeletion(event.subject()));
                     break;
-                case KUBEVIRT_NODE_INCOMPLETE:
                 case KUBEVIRT_NODE_UPDATED:
                 default:
                     // do nothing
@@ -1304,19 +1306,6 @@
                 }
             } else if (node.type().equals(GATEWAY)) {
                 updateGatewayNodeForRouter();
-                for (KubevirtNetwork network : networkService.networks()) {
-                    switch (network.type()) {
-                        case FLAT:
-                        case VLAN:
-                            break;
-                        case VXLAN:
-                        case GRE:
-                        case GENEVE:
-                        default:
-                            // do nothing
-                            break;
-                    }
-                }
             }
         }
 
@@ -1324,22 +1313,20 @@
             if (!isRelevantHelper()) {
                 return;
             }
-
             if (node.type().equals(GATEWAY)) {
+                kubevirtRouterService.routers()
+                        .stream()
+                        .filter(router -> router.electedGateway().equals(node.hostname()))
+                        .forEach(router -> {
+                            router.internal().forEach(networkName -> {
+                                KubevirtNetwork network = networkService.network(networkName);
+
+                                if (network != null) {
+                                    initGatewayNodeForInternalNetwork(network, router, node, false);
+                                }
+                            });
+                        });
                 updateGatewayNodeForRouter();
-                for (KubevirtNetwork network : networkService.networks()) {
-                    switch (network.type()) {
-                        case FLAT:
-                        case VLAN:
-                            break;
-                        case VXLAN:
-                        case GRE:
-                        case GENEVE:
-                        default:
-                            // do nothing
-                            break;
-                    }
-                }
             }
         }