From daf00113bc58b4a0236332432016ee6b46f67db3 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Tue, 19 Jun 2018 14:17:07 +0200 Subject: Add data type for resource name --- .../yahoo/vespa/athenz/api/AthenzResourceName.java | 74 ++++++++++++++++++++++ .../vespa/athenz/api/AthenzResourceNameTest.java | 21 ++++++ 2 files changed, 95 insertions(+) create mode 100644 vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzResourceName.java create mode 100644 vespa-athenz/src/test/java/com/yahoo/vespa/athenz/api/AthenzResourceNameTest.java (limited to 'vespa-athenz') diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzResourceName.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzResourceName.java new file mode 100644 index 00000000000..f7aa2affc86 --- /dev/null +++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzResourceName.java @@ -0,0 +1,74 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.athenz.api; + +import java.util.Objects; + +/** + * Athenz resource name + * + * @author bjorncs + */ +public class AthenzResourceName { + + private final AthenzDomain domain; + private final String entityName; + + public AthenzResourceName(AthenzDomain domain, String entityName) { + this.domain = domain; + this.entityName = entityName; + } + + public AthenzResourceName(String domain, String entityName) { + this(new AthenzDomain(domain), entityName); + } + + /** + * @param resourceName A resource name string on format 'domain:entity' + * @return the parsed resource name + */ + public static AthenzResourceName fromString(String resourceName) { + String[] split = resourceName.split(":"); + if (split.length != 2 || split[0].isEmpty() || split[1].isEmpty()) { + throw new IllegalArgumentException("Invalid resource name: " + resourceName); + } + return new AthenzResourceName(split[0], split[1]); + } + + public AthenzDomain getDomain() { + return domain; + } + + public String getDomainName() { + return domain.getName(); + } + + public String getEntityName() { + return entityName; + } + + public String toResourceNameString() { + return String.format("%s:%s", domain.getName(), entityName); + } + + @Override + public String toString() { + return "AthenzResourceName{" + + "domain=" + domain + + ", entityName='" + entityName + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + AthenzResourceName that = (AthenzResourceName) o; + return Objects.equals(domain, that.domain) && + Objects.equals(entityName, that.entityName); + } + + @Override + public int hashCode() { + return Objects.hash(domain, entityName); + } +} diff --git a/vespa-athenz/src/test/java/com/yahoo/vespa/athenz/api/AthenzResourceNameTest.java b/vespa-athenz/src/test/java/com/yahoo/vespa/athenz/api/AthenzResourceNameTest.java new file mode 100644 index 00000000000..b9f4bd5369e --- /dev/null +++ b/vespa-athenz/src/test/java/com/yahoo/vespa/athenz/api/AthenzResourceNameTest.java @@ -0,0 +1,21 @@ +package com.yahoo.vespa.athenz.api; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * @author bjorncs + */ +public class AthenzResourceNameTest { + + @Test + public void can_serialize_and_deserialize_to_string() { + AthenzResourceName resourceName = new AthenzResourceName(new AthenzDomain("domain"), "entity"); + String resourceNameString = resourceName.toResourceNameString(); + assertEquals("domain:entity", resourceNameString); + AthenzResourceName deserializedResourceName = AthenzResourceName.fromString(resourceNameString); + assertEquals(deserializedResourceName, resourceName); + } + +} \ No newline at end of file -- cgit v1.2.3