GUI2 Fixed bug of edge link not being added dynamically

Change-Id: If5a2b546f23274bbdac09a55bdd18357c72414fe
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java
index 41e6090..1399847 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java
@@ -511,6 +511,9 @@
         updateHost(uiHost, host);
 
         postEvent(HOST_ADDED_OR_UPDATED, uiHost, memo);
+        // Link event must be sent after the host event
+        UiEdgeLink uiEdgeLink = uiTopology.findEdgeLink(uiHost.edgeLinkId());
+        postEvent(LINK_ADDED_OR_UPDATED, uiEdgeLink, memo);
     }
 
     // invoked from UiSharedTopologyModel host listener
@@ -536,6 +539,7 @@
         if (uiHost != null) {
             UiEdgeLink edgeLink = uiTopology.findEdgeLink(uiHost.edgeLinkId());
             uiTopology.remove(edgeLink);
+            postEvent(LINK_REMOVED, edgeLink, MEMO_REMOVED);
             uiTopology.remove(uiHost);
             postEvent(HOST_REMOVED, uiHost, MEMO_REMOVED);
         } else {
diff --git a/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/ModelCacheTest.java b/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/ModelCacheTest.java
index 84068ba..ea82b9a 100644
--- a/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/ModelCacheTest.java
+++ b/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/ModelCacheTest.java
@@ -310,22 +310,24 @@
 
         // add a host
         cache.addOrUpdateHost(hostA);
-        dispatcher.assertLast(Type.HOST_ADDED_OR_UPDATED, hostA.id().toString());
-        dispatcher.assertEventCount(1);
+        UiLinkId hostALinkId = cache.accessHost(hostA.id()).edgeLinkId();
+        dispatcher.assertLast(Type.LINK_ADDED_OR_UPDATED, hostALinkId.toString());
+        dispatcher.assertEventCount(2);
         assertHostLinkCounts(1, 1);
         assertLocation(hostA.id(), DEVID_1, 101);
 
         // add a second host
         cache.addOrUpdateHost(hostB);
-        dispatcher.assertLast(Type.HOST_ADDED_OR_UPDATED, hostB.id().toString());
-        dispatcher.assertEventCount(2);
+        UiLinkId hostBLinkId = cache.accessHost(hostB.id()).edgeLinkId();
+        dispatcher.assertLast(Type.LINK_ADDED_OR_UPDATED, hostBLinkId.toString());
+        dispatcher.assertEventCount(4);
         assertHostLinkCounts(2, 2);
         assertLocation(hostB.id(), DEVID_1, 102);
 
         // update the first host
         cache.addOrUpdateHost(hostA);
-        dispatcher.assertLast(Type.HOST_ADDED_OR_UPDATED, hostA.id().toString());
-        dispatcher.assertEventCount(3);
+        dispatcher.assertLast(Type.LINK_ADDED_OR_UPDATED, hostALinkId.toString());
+        dispatcher.assertEventCount(6);
         assertHostLinkCounts(2, 2);
         assertLocation(hostA.id(), DEVID_1, 101);
 
@@ -334,7 +336,7 @@
         // remove the second host
         cache.removeHost(hostB);
         dispatcher.assertLast(Type.HOST_REMOVED, hostB.id().toString());
-        dispatcher.assertEventCount(4);
+        dispatcher.assertEventCount(8);
         assertHostLinkCounts(1, 1);
         assertNull("still host B?", cache.accessHost(hostB.id()));
 
@@ -350,7 +352,7 @@
 
         cache.moveHost(movedHost, hostA);
         dispatcher.assertLast(Type.HOST_MOVED, hostA.id().toString());
-        dispatcher.assertEventCount(5);
+        dispatcher.assertEventCount(9);
         assertHostLinkCounts(1, 1);
 
         assertLocation(hostA.id(), DEVID_1, 200);
@@ -362,7 +364,7 @@
 
         cache.moveHost(movedAgain, movedHost);
         dispatcher.assertLast(Type.HOST_MOVED, hostA.id().toString());
-        dispatcher.assertEventCount(6);
+        dispatcher.assertEventCount(10);
         assertHostLinkCounts(1, 1);
 
         assertLocation(hostA.id(), DEVID_8, 800);