summaryrefslogtreecommitdiffstats
path: root/vespa-athenz
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@oath.com>2018-06-19 14:17:07 +0200
committerBjørn Christian Seime <bjorncs@oath.com>2018-06-20 13:15:11 +0200
commitdaf00113bc58b4a0236332432016ee6b46f67db3 (patch)
tree38c405bb5f10ac0ba3ec66faec7162f8c7991e9f /vespa-athenz
parent990369df1dd4adb0183998238dd13e0a9d79ff0e (diff)
Add data type for resource name
Diffstat (limited to 'vespa-athenz')
-rw-r--r--vespa-athenz/src/main/java/com/yahoo/vespa/athenz/api/AthenzResourceName.java74
-rw-r--r--vespa-athenz/src/test/java/com/yahoo/vespa/athenz/api/AthenzResourceNameTest.java21
2 files changed, 95 insertions, 0 deletions
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