Topo2: Correctly track location of nodes PER Region.
- User's chosen drag location overrides script-configured choice.

Change-Id: If25c28c01ad79a33d0c44817351868a600870235
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java
index d9e9c47..801a970d 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2ViewMessageHandler.java
@@ -19,6 +19,7 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.ImmutableSet;
 import org.onlab.osgi.ServiceDirectory;
+import org.onosproject.net.region.Region;
 import org.onosproject.ui.RequestHandler;
 import org.onosproject.ui.UiConnection;
 import org.onosproject.ui.UiMessageHandler;
@@ -94,6 +95,10 @@
 
     // ==================================================================
 
+    private String safeId(Region r) {
+        return r == null ? "(root)" : r.id().toString();
+    }
+
 
     private ObjectNode mkLayoutMessage(UiTopoLayout currentLayout) {
         List<UiTopoLayout> crumbs = topoSession.breadCrumbs();
@@ -109,8 +114,9 @@
 
     private ObjectNode mkPeersMessage(UiTopoLayout currentLayout) {
         Set<UiNode> peers = topoSession.getPeerNodes(currentLayout);
+        String ridStr = safeId(topoSession.currentLayout().region());
         ObjectNode peersPayload = objectNode();
-        peersPayload.set("peers", t2json.closedNodes(peers));
+        peersPayload.set("peers", t2json.closedNodes(ridStr, peers));
         return peersPayload;
     }
 
@@ -204,7 +210,10 @@
 
         @Override
         public void process(ObjectNode payload) {
-            t2json.updateMeta(payload);
+            // NOTE: metadata for a node is stored within the context of the
+            //       current region.
+            String ridStr = safeId(topoSession.currentLayout().region());
+            t2json.updateMeta(ridStr, payload);
         }
     }