ONOS-4972: Augmented UiModelEvents to hold context and memo about the event subject.

Change-Id: Id0e28d8d5d3eb80fba36e0392cc80167effd39bc
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java
index 2a66b8e..80d134a 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/UiSharedTopologyModel.java
@@ -22,7 +22,6 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
-import org.onlab.util.Tools;
 import org.onosproject.cluster.ClusterEvent;
 import org.onosproject.cluster.ClusterEventListener;
 import org.onosproject.cluster.ClusterService;
@@ -61,6 +60,7 @@
 import org.onosproject.net.statistic.StatisticService;
 import org.onosproject.net.topology.TopologyService;
 import org.onosproject.ui.UiTopoLayoutService;
+import org.onosproject.ui.impl.topo.Topo2Jsonifier;
 import org.onosproject.ui.impl.topo.UiTopoSession;
 import org.onosproject.ui.model.ServiceBundle;
 import org.onosproject.ui.model.topo.UiClusterMember;
@@ -75,7 +75,9 @@
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
+
+import static java.util.concurrent.Executors.newSingleThreadExecutor;
+import static org.onlab.util.Tools.groupedThreads;
 
 /**
  * Service that creates and maintains the UI-model of the network topology.
@@ -143,7 +145,7 @@
     @Activate
     protected void activate() {
         cache = new ModelCache(new DefaultServiceBundle(), eventDispatcher);
-        eventHandler = Executors.newSingleThreadExecutor(Tools.groupedThreads("onos/ui/topo", "event-handler", log));
+        eventHandler = newSingleThreadExecutor(groupedThreads("onos/ui/topo", "event-handler", log));
 
         eventDispatcher.addSink(UiModelEvent.class, listenerRegistry);
 
@@ -182,6 +184,17 @@
         log.info("Stopped");
     }
 
+    /**
+     * Injects an instance of the JSON-ifier (which has been bound to the
+     * services (link, host, device, ...)) to be passed on to the Model Cache,
+     * for use in forming UiModelEvent payloads.
+     *
+     * @param t2json JSONifier
+     */
+    public void injectJsonifier(Topo2Jsonifier t2json) {
+        cache.injectJsonifier(t2json);
+    }
+
 
     /**
      * Registers a UI topology session with the topology model.