Topo2: Refactored Maps and Sprites to be managed by a BackgroundService

Change-Id: I75965fc76734436ce0c68e06dd75663baa924287
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java
index c26c6fd..f6d62d5 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2Jsonifier.java
@@ -239,6 +239,20 @@
         addZoomPan(result, layout.id());
     }
 
+    private ObjectNode initialZoomForLayout(ObjectNode zoomPrefs, String id) {
+        ObjectNode zoomForLayout = defaultZoomForLayout();
+        zoomPrefs.set(id, zoomForLayout);
+        prefService.setPreference(userName, PKEY_TOPO_ZOOM, zoomPrefs);
+        return zoomPrefs;
+    }
+
+    private ObjectNode defaultZoomForLayout() {
+        return objectNode()
+            .put(ZOOM_SCALE, DEFAULT_SCALE)
+            .put(ZOOM_PAN_X, DEFAULT_PAN)
+            .put(ZOOM_PAN_Y, DEFAULT_PAN);
+    }
+
     private void addZoomPan(ObjectNode result, UiTopoLayoutId layoutId) {
         // need to look up topo_zoom settings from preferences service.
 
@@ -254,19 +268,16 @@
         ObjectNode zoomPrefs = userPrefs.get(PKEY_TOPO_ZOOM);
 
         if (zoomPrefs == null) {
-            // no zoom prefs structure yet.. so initialize..
-            ObjectNode zoomForLayout = objectNode()
-                    .put(ZOOM_SCALE, DEFAULT_SCALE)
-                    .put(ZOOM_PAN_X, DEFAULT_PAN)
-                    .put(ZOOM_PAN_Y, DEFAULT_PAN);
-
-            zoomPrefs = objectNode();
-            zoomPrefs.set(layoutId.id(), zoomForLayout);
-
-            prefService.setPreference(userName, PKEY_TOPO_ZOOM, zoomPrefs);
+            zoomPrefs = initialZoomForLayout(objectNode(), layoutId.id());
         }
+
         ObjectNode zoomData = (ObjectNode) zoomPrefs.get(layoutId.id());
 
+        if (zoomData == null) {
+            zoomPrefs = initialZoomForLayout(zoomPrefs, layoutId.id());
+            zoomData = (ObjectNode) zoomPrefs.get(layoutId.id());
+        }
+
         result.put("bgZoomScale", zoomData.get(ZOOM_SCALE).asText());
         result.put("bgZoomPanX", zoomData.get(ZOOM_PAN_X).asText());
         result.put("bgZoomPanY", zoomData.get(ZOOM_PAN_Y).asText());