Simplified the port handling logic for VM live migration case

Change-Id: Ib28978bb2ee62c4719261c38eebb72a006f81f19
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
index 18116a9..75cdea1 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHandler.java
@@ -69,6 +69,7 @@
 import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_TUNNEL_TAG_RULE;
 import static org.onosproject.openstacknetworking.api.Constants.STAT_FLAT_OUTBOUND_TABLE;
 import static org.onosproject.openstacknetworking.api.Constants.VTAG_TABLE;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.swapStaleLocation;
 import static org.onosproject.openstacknetworking.util.RulePopulatorUtil.buildExtension;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -608,39 +609,39 @@
             InstancePort instPort = event.subject();
 
             switch (event.type()) {
-                case OPENSTACK_INSTANCE_PORT_UPDATED:
                 case OPENSTACK_INSTANCE_PORT_DETECTED:
-                    log.info("Instance port detected MAC:{} IP:{}",
+                case OPENSTACK_INSTANCE_PORT_UPDATED:
+                    log.info("SwitchingHandler: Instance port detected MAC:{} IP:{}",
                                                         instPort.macAddress(),
                                                         instPort.ipAddress());
-                    eventExecutor.execute(() ->
-                        instPortDetected(instPort)
-                    );
+
+                    eventExecutor.execute(() -> instPortDetected(instPort));
 
                     break;
                 case OPENSTACK_INSTANCE_PORT_VANISHED:
-                    log.info("Instance port vanished MAC:{} IP:{}",
+                    log.info("SwitchingHandler: Instance port vanished MAC:{} IP:{}",
                                                         instPort.macAddress(),
                                                         instPort.ipAddress());
-                    eventExecutor.execute(() ->
-                        instPortRemoved(instPort)
-                    );
+
+                    eventExecutor.execute(() -> instPortRemoved(instPort));
 
                     break;
-
-                // we do not consider MIGRATION_STARTED case, because the rules
-                // will be installed to corresponding switches at
-                // OPENSTACK_INSTANCE_PORT_UPDATED phase
-
-                // TODO: we may need to consider to refactor the VM migration
-                // event detection logic for better code readability
-                case OPENSTACK_INSTANCE_MIGRATION_ENDED:
-                    log.info("Instance port vanished MAC:{} IP:{}, " +
-                                 "due to VM migration", instPort.macAddress(),
+                case OPENSTACK_INSTANCE_MIGRATION_STARTED:
+                    log.info("SwitchingHandler: Migration started for MAC:{} IP:{}",
+                                                        instPort.macAddress(),
                                                         instPort.ipAddress());
-                    eventExecutor.execute(() ->
-                        removeVportRules(instPort)
-                    );
+
+                    eventExecutor.execute(() -> instPortDetected(instPort));
+
+                    break;
+                case OPENSTACK_INSTANCE_MIGRATION_ENDED:
+                    log.info("SwitchingHandler: Migration finished for MAC:{} IP:{}",
+                                                        instPort.macAddress(),
+                                                        instPort.ipAddress());
+
+                    InstancePort revisedInstPort = swapStaleLocation(instPort);
+                    eventExecutor.execute(() -> removeVportRules(revisedInstPort));
+
                     break;
                 default:
                     break;