Working on Bay-Area-Region Demo.
- added latitude / longitude parameters to regions, so the icons can be "placed" on a GEO-map

Change-Id: I5cf939f22597d4658ab603459b2b3059ba0db0c9
diff --git a/core/api/src/main/java/org/onosproject/net/region/DefaultRegion.java b/core/api/src/main/java/org/onosproject/net/region/DefaultRegion.java
index 1926a3d..d229e92 100644
--- a/core/api/src/main/java/org/onosproject/net/region/DefaultRegion.java
+++ b/core/api/src/main/java/org/onosproject/net/region/DefaultRegion.java
@@ -19,6 +19,8 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableList;
 import org.onosproject.cluster.NodeId;
+import org.onosproject.net.AbstractAnnotated;
+import org.onosproject.net.Annotations;
 
 import java.util.List;
 import java.util.Objects;
@@ -27,7 +29,7 @@
 /**
  * Default implementation of a region.
  */
-public final class DefaultRegion implements Region {
+public final class DefaultRegion extends AbstractAnnotated implements Region {
 
     private final RegionId id;
     private final String name;
@@ -40,9 +42,12 @@
      * @param id      region identifier
      * @param name    friendly name
      * @param type    region type
+     * @param annots  annotations
      * @param masters list of sets of cluster node identifiers; in order of mastership
      */
-    public DefaultRegion(RegionId id, String name, Type type, List<Set<NodeId>> masters) {
+    public DefaultRegion(RegionId id, String name, Type type,
+                         Annotations annots, List<Set<NodeId>> masters) {
+        super(annots);
         this.id = id;
         this.name = name;
         this.type = type;
diff --git a/core/api/src/main/java/org/onosproject/net/region/Region.java b/core/api/src/main/java/org/onosproject/net/region/Region.java
index afe1805..ed8fff18 100644
--- a/core/api/src/main/java/org/onosproject/net/region/Region.java
+++ b/core/api/src/main/java/org/onosproject/net/region/Region.java
@@ -17,6 +17,7 @@
 package org.onosproject.net.region;
 
 import org.onosproject.cluster.NodeId;
+import org.onosproject.net.Annotated;
 
 import java.util.List;
 import java.util.Set;
@@ -26,7 +27,7 @@
  * logical region. Optionally, devices in the region can share the same
  * cluster nodes mastership affinities.
  */
-public interface Region {
+public interface Region extends Annotated {
 
     /**
      * Coarse representation of the type of the region.
@@ -58,6 +59,11 @@
         BUILDING,
 
         /**
+         * Region represents a data center.
+         */
+        DATA_CENTER,
+
+        /**
          * Region represents a building floor.
          */
         FLOOR,
diff --git a/core/api/src/main/java/org/onosproject/net/region/RegionStore.java b/core/api/src/main/java/org/onosproject/net/region/RegionStore.java
index 49cc378..b8527c7 100644
--- a/core/api/src/main/java/org/onosproject/net/region/RegionStore.java
+++ b/core/api/src/main/java/org/onosproject/net/region/RegionStore.java
@@ -16,6 +16,7 @@
 package org.onosproject.net.region;
 
 import org.onosproject.cluster.NodeId;
+import org.onosproject.net.Annotations;
 import org.onosproject.net.DeviceId;
 import org.onosproject.store.Store;
 
@@ -67,12 +68,13 @@
      * @param regionId      region identifier
      * @param name          friendly name
      * @param type          region type
+     * @param annots        annotations
      * @param masterNodeIds list of master nodes; null implies empty list
      * @return new region descriptor
      * @throws IllegalArgumentException if item already exists
      */
     Region createRegion(RegionId regionId, String name, Region.Type type,
-                        List<Set<NodeId>> masterNodeIds);
+                        Annotations annots, List<Set<NodeId>> masterNodeIds);
 
     /**
      * Updates the specified new region using the supplied data.
@@ -80,12 +82,13 @@
      * @param regionId      region identifier
      * @param name          friendly name
      * @param type          region type
+     * @param annots        annotations
      * @param masterNodeIds list of master nodes; null implies empty list
      * @return new region descriptor
      * @throws IllegalArgumentException if item already exists
      */
     Region updateRegion(RegionId regionId, String name, Region.Type type,
-                        List<Set<NodeId>> masterNodeIds);
+                        Annotations annots, List<Set<NodeId>> masterNodeIds);
 
     /**
      * Removes the specified region using the new set of data.