Implementing the UiLayoutManager.

Change-Id: I0a3424f7e3b13a3c18e668a5eed5151755bce4f9
diff --git a/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java b/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java
index 0aa7db0..989c807 100644
--- a/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java
+++ b/core/api/src/main/java/org/onosproject/ui/UiTopoLayoutService.java
@@ -16,8 +16,9 @@
 package org.onosproject.ui;
 
 import org.onosproject.ui.model.topo.UiTopoLayout;
+import org.onosproject.ui.model.topo.UiTopoLayoutId;
 
-import java.util.List;
+import java.util.Set;
 
 /**
  * Service for managing {@link UiTopoLayout} instances.
@@ -25,20 +26,28 @@
 public interface UiTopoLayoutService {
 
     /**
-     * Returns the list of available layouts.
+     * Returns the set of available layouts.
      *
-     * @return available layouts
+     * @return set of available layouts
      */
-    List<UiTopoLayout> getLayouts();
+    Set<UiTopoLayout> getLayouts();
 
     /**
-     * Adds a layout to the system.
+     * Adds a layout to the system or updates an existing one.
      *
-     * @param layout the layout to add
+     * @param layout the layout to add or update
      * @return an indication of success
      */
     boolean addLayout(UiTopoLayout layout);
 
+
+    /**
+     * Returns the layout with the specified identifier.
+     * @param layoutId layout identifier
+     * @return layout or null if no such layout is found
+     */
+    UiTopoLayout getLayout(UiTopoLayoutId layoutId);
+
     /**
      * Removes a layout from the system.
      *
diff --git a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayout.java b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayout.java
index 105b0da..289bb8f 100644
--- a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayout.java
+++ b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayout.java
@@ -24,6 +24,37 @@
  */
 public class UiTopoLayout {
 
-    private Region backingRegion;
+    private final UiTopoLayoutId id;
+    private final Region region;
 
+    /**
+     * Created a new UI topology layout.
+     *
+     * @param id     layout identifier
+     * @param region backing region
+     */
+    public UiTopoLayout(UiTopoLayoutId id, Region region) {
+        this.id = id;
+        this.region = region;
+    }
+
+    /**
+     * Returns the UI layout identifier.
+     *
+     * @return identifier of the layout
+     */
+    public UiTopoLayoutId id() {
+        return id;
+    }
+
+    /**
+     * Returns the backing region with which this layout is associated.
+     *
+     * @return backing region
+     */
+    public Region region() {
+        return region;
+    }
+
+    // TODO: additional properties pertinent to the layout
 }
diff --git a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java
new file mode 100644
index 0000000..2fa8717
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopoLayoutId.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.ui.model.topo;
+
+import org.onlab.util.Identifier;
+
+/**
+ * Identifier of a topology layout.
+ */
+public final class UiTopoLayoutId extends Identifier<String> {
+
+    // For serialization
+    private UiTopoLayoutId() {
+    }
+
+    private UiTopoLayoutId(String value) {
+        super(value);
+    }
+
+    /**
+     * Returns the layout identifier created from the specified value.
+     *
+     * @param value string value
+     * @return layout identifier
+     */
+    public static UiTopoLayoutId layoutId(String value) {
+        return new UiTopoLayoutId(value);
+    }
+}