diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java index dceed74681..1cb00dc01d 100644 --- a/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java +++ b/core/api/src/main/java/org/onosproject/net/config/basics/BasicElementConfig.java @@ -15,7 +15,11 @@ */ package org.onosproject.net.config.basics; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.google.common.collect.ImmutableSet; + import java.util.Objects; +import java.util.Set; /** * Basic configuration for network elements, e.g. devices, hosts. Such elements @@ -69,6 +73,11 @@ public abstract class BasicElementConfig extends AllowedEntityConfig { */ protected static final String OWNER = "owner"; + /** + * Key for roles. + */ + protected static final String ROLES = "roles"; + /** * Threshold for detecting double value is zero. */ @@ -288,6 +297,30 @@ public abstract class BasicElementConfig extends AllowedEntityConfig { return (BasicElementConfig) setOrClear(OWNER, owner); } + /** + * Returns set of roles assigned to the element. + * + * @return set of roles + */ + public Set roles() { + ImmutableSet.Builder roles = ImmutableSet.builder(); + if (object.has(ROLES)) { + ArrayNode roleNodes = (ArrayNode) object.path(ROLES); + roleNodes.forEach(r -> roles.add(r.asText())); + } + return roles.build(); + } + + /** + * Sets the roles of the element. + * + * @param roles new roles; null to clear + * @return self + */ + public BasicElementConfig roles(Set roles) { + return (BasicElementConfig) setOrClear(ROLES, roles); + } + @Override public boolean isValid() { return isValidLength(NAME, NAME_MAX_LENGTH) diff --git a/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java b/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java index 8c56a8ce14..0d65eb9ec1 100644 --- a/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java +++ b/core/api/src/test/java/org/onosproject/net/config/basics/BasicElementConfigTest.java @@ -17,12 +17,11 @@ package org.onosproject.net.config.basics; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.ImmutableSet; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import static org.onosproject.net.config.basics.BasicElementConfig.ZERO_THRESHOLD; /** @@ -35,10 +34,12 @@ public class BasicElementConfigTest { private static final String E1 = "e1"; private static final String GEO = "geo"; private static final String GRID = "grid"; + public static final ImmutableSet ROLES = ImmutableSet.of("spine", "primary"); // concrete subclass of abstract class we are testing private static class ElmCfg extends BasicElementConfig { ElmCfg() { + mapper = MAPPER; object = MAPPER.createObjectNode(); } @@ -150,4 +151,11 @@ public class BasicElementConfigTest { print(cfg); assertEquals("not geo", GEO, cfg.locType()); } + + @Test + public void roles() { + cfg.roles(ROLES); + print(cfg); + assertEquals("not roles", ROLES, cfg.roles()); + } }