Europe Region Demo data script written.
- Added LayoutLocation class
- Added RegionAddPeerLocCommand class
Note: still need to plumb through peer locations to UI JSON.

Change-Id: Ic3513a3880f50b440fe318dce6896b66d7e79704
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 24fda23..2377499 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
@@ -79,6 +79,10 @@
 
     private static final Logger log = LoggerFactory.getLogger(ModelCache.class);
 
+    // TODO: add NetworkConfigService to service bundle
+//    private final NetworkConfigService cfgService =
+//            DefaultServiceDirectory.getService(NetworkConfigService.class);
+
     private final ServiceBundle services;
     private final EventDispatcher dispatcher;
     private final UiTopology uiTopology = new UiTopology();
@@ -563,6 +567,11 @@
 
         services.region().getRegions().forEach(r -> {
             RegionId rid = r.id();
+
+//            BasicRegionConfig rcfg = cfgService.getConfig(rid, BasicRegionConfig.class);
+//            services.netcfg() ...
+            // TODO: figure out how to include peer-location data in UiRegion instance
+
             UiRegion region = uiTopology.findRegion(rid);
             if (region != null) {
                 reconcileDevicesAndHostsWithRegion(allDevices, allHosts, rid, region);
@@ -600,7 +609,7 @@
                 allDevices.remove(dev);
             } else {
                 log.warn("Region device ID {} but no UiDevice in topology",
-                        devId);
+                         devId);
             }
 
             Set<Host> hosts = services.host().getConnectedHosts(devId);
@@ -614,7 +623,7 @@
                     allHosts.remove(host);
                 } else {
                     log.warn("Region host ID {} but no UiHost in topology",
-                            hid);
+                             hid);
                 }
             }
         });
diff --git a/web/gui/src/main/webapp/app/fw/svg/spriteData.js b/web/gui/src/main/webapp/app/fw/svg/spriteData.js
index b806ae9..1625a46 100644
--- a/web/gui/src/main/webapp/app/fw/svg/spriteData.js
+++ b/web/gui/src/main/webapp/app/fw/svg/spriteData.js
@@ -71,6 +71,12 @@
             .addLabel('Segment Routing', 120, 10, {anchor: 'right'})
             .register();
 
+        ssApi.createLayout('segmentRoutingTwo', 70, 75)
+            .addSprite('rack', 10, 40, 20)
+            .addSprite('rack', 40, 40, 20)
+            .addLabel('Segment Routing 2', 120, 10, {anchor: 'right'})
+            .register();
+
         ssApi.dump();
         // ----------------------------------------------------------$$$
     }
diff --git a/web/gui/src/main/webapp/app/view/topo2/topo2-theme.css b/web/gui/src/main/webapp/app/view/topo2/topo2-theme.css
index bb26930..cdd84b3 100644
--- a/web/gui/src/main/webapp/app/view/topo2/topo2-theme.css
+++ b/web/gui/src/main/webapp/app/view/topo2/topo2-theme.css
@@ -196,7 +196,6 @@
 }
 
 #ov-topo2 svg .node.sub-region text {
-    stroke: #000000;
 }
 
 #ov-topo2 svg .node.sub-region use {
@@ -607,7 +606,6 @@
 }
 
 .dark #ov-topo2 svg .node.sub-region text {
-    stroke: #eeeeee;
 }
 
 .dark #ov-topo2 svg .node.sub-region use {