ONOS-4971: Synthetic Link Data -- WIP
- Enhancing UiRegion to capture the hierarchical (parent/child) relationships captured in the UiTopoLayouts.
Change-Id: I152e0d52d4580b14b679f3387402077f16f61e6a
diff --git a/core/api/src/main/java/org/onosproject/ui/model/ServiceBundle.java b/core/api/src/main/java/org/onosproject/ui/model/ServiceBundle.java
index 61cf721..6986cf7 100644
--- a/core/api/src/main/java/org/onosproject/ui/model/ServiceBundle.java
+++ b/core/api/src/main/java/org/onosproject/ui/model/ServiceBundle.java
@@ -24,11 +24,20 @@
import org.onosproject.net.intent.IntentService;
import org.onosproject.net.link.LinkService;
import org.onosproject.net.region.RegionService;
+import org.onosproject.ui.UiTopoLayoutService;
/**
* A bundle of services to pass to elements that might need a reference to them.
*/
public interface ServiceBundle {
+
+ /**
+ * Reference to a UI Topology Layout service implementation.
+ *
+ * @return layout service
+ */
+ UiTopoLayoutService layout();
+
/**
* Reference to a cluster service implementation.
*
diff --git a/core/api/src/main/java/org/onosproject/ui/model/topo/UiRegion.java b/core/api/src/main/java/org/onosproject/ui/model/topo/UiRegion.java
index c478424..b3185f1 100644
--- a/core/api/src/main/java/org/onosproject/ui/model/topo/UiRegion.java
+++ b/core/api/src/main/java/org/onosproject/ui/model/topo/UiRegion.java
@@ -61,6 +61,10 @@
private final Region region;
+ // keep track of hierarchy (inferred from UiTopoLayoutService)
+ private RegionId parent;
+ private final Set<RegionId> kids = new HashSet<>();
+
/**
* Constructs a UI region, with a reference to the specified backing region.
*
@@ -103,6 +107,52 @@
return region == null ? NULL_ID : region.id();
}
+ /**
+ * Returns the identity of the parent region.
+ *
+ * @return parent region ID
+ */
+ public RegionId parent() {
+ return parent;
+ }
+
+ /**
+ * Returns true if this is the root (default) region.
+ *
+ * @return true if root region
+ */
+ public boolean isRoot() {
+ return id().equals(parent);
+ }
+
+ /**
+ * Returns the identities of the child regions.
+ *
+ * @return child region IDs
+ */
+ public Set<RegionId> children() {
+ return ImmutableSet.copyOf(kids);
+ }
+
+ /**
+ * Sets the parent ID for this region.
+ *
+ * @param parentId parent ID
+ */
+ public void setParent(RegionId parentId) {
+ parent = parentId;
+ }
+
+ /**
+ * Sets the children IDs for this region.
+ *
+ * @param children children IDs
+ */
+ public void setChildren(Set<RegionId> children) {
+ kids.clear();
+ kids.addAll(children);
+ }
+
@Override
public String idAsString() {
return id().toString();
@@ -138,6 +188,8 @@
return toStringHelper(this)
.add("id", id())
.add("name", name())
+ .add("parent", parent)
+ .add("kids", kids)
.add("devices", deviceIds)
.add("#hosts", hostIds.size())
.add("#links", uiLinkIds.size())
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 12c9de6..ade86e1 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
@@ -68,13 +68,16 @@
}
/**
- * Returns the identifier of the backing region. Will be null if the
- * region is null.
+ * Returns the identifier of the backing region. If this is the default
+ * layout, the null-region ID will be returned, otherwise the ID of the
+ * backing region for this layout will be returned; null in the case that
+ * there is no backing region.
*
* @return backing region identifier
*/
public RegionId regionId() {
- return region == null ? null : region.id();
+ return isRoot() ? UiRegion.NULL_ID
+ : (region == null ? null : region.id());
}
/**
diff --git a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopology.java b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopology.java
index 585e658..708fd18 100644
--- a/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopology.java
+++ b/core/api/src/main/java/org/onosproject/ui/model/topo/UiTopology.java
@@ -151,7 +151,8 @@
/**
- * Returns all regions in the model.
+ * Returns all regions in the model (except the
+ * {@link #nullRegion() null region}).
*
* @return all regions
*/
@@ -177,7 +178,7 @@
* @return corresponding UI region
*/
public UiRegion findRegion(RegionId id) {
- return regionLookup.get(id);
+ return UiRegion.NULL_ID.equals(id) ? nullRegion() : regionLookup.get(id);
}
/**