summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2019-09-19 10:19:30 +0200
committerJon Marius Venstad <venstad@gmail.com>2019-09-24 08:21:52 +0200
commitff7e21c1674e5afc02a1d384da087d2201cd8a67 (patch)
treea1ee988129411109bdc60d7776d6585bddb7cce0 /controller-server
parent85a1670715c0cf8c83302c5423a78f42dfc41cda (diff)
Add TenantAndApplicationId for controller tenant.app references
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/TenantAndApplicationId.java94
1 files changed, 94 insertions, 0 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/TenantAndApplicationId.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/TenantAndApplicationId.java
new file mode 100644
index 00000000000..081ce02e52d
--- /dev/null
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/TenantAndApplicationId.java
@@ -0,0 +1,94 @@
+package com.yahoo.vespa.hosted.controller.application;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.ApplicationName;
+import com.yahoo.config.provision.InstanceName;
+import com.yahoo.config.provision.TenantName;
+
+import java.util.Objects;
+
+/**
+ * Tenant and application name pair.
+ *
+ * TODO jonmv: rename to ApplicationId if ApplicationId is renamed.
+ */
+public class TenantAndApplicationId implements Comparable<TenantAndApplicationId> {
+
+ private final TenantName tenant;
+ private final ApplicationName application;
+
+ private TenantAndApplicationId(TenantName tenant, ApplicationName application) {
+ requireNonBlank(tenant.value(), "Tenant name");
+ requireNonBlank(application.value(), "Application name");
+ this.tenant = tenant;
+ this.application = application;
+ }
+
+ public static TenantAndApplicationId from(TenantName tenant, ApplicationName application) {
+ return new TenantAndApplicationId(tenant, application);
+ }
+
+ public static TenantAndApplicationId from(String tenant, String application) {
+ return from(TenantName.from(tenant), ApplicationName.from(application));
+ }
+
+ public static TenantAndApplicationId fromSerialized(String value) {
+ String[] parts = value.split(":");
+ if (parts.length != 2)
+ throw new IllegalArgumentException("Serialized value should be '<tenant>:<application>', but was '" + value + "'");
+
+ return from(parts[0], parts[1]);
+ }
+
+ public static TenantAndApplicationId from(ApplicationId id) {
+ return from(id.tenant(), id.application());
+ }
+
+ public ApplicationId defaultInstance() {
+ return ApplicationId.from(tenant, application, InstanceName.defaultName());
+ }
+
+ public String serialized() {
+ return tenant.value() + ":" + application.value();
+ }
+
+ public TenantName tenant() {
+ return tenant;
+ }
+
+ public ApplicationName application() {
+ return application;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (this == other) return true;
+ if (other == null || getClass() != other.getClass()) return false;
+ TenantAndApplicationId that = (TenantAndApplicationId) other;
+ return tenant.equals(that.tenant) &&
+ application.equals(that.application);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(tenant, application);
+ }
+
+ @Override
+ public int compareTo(TenantAndApplicationId other) {
+ int tenantComparison = tenant.compareTo(other.tenant);
+ return tenantComparison != 0 ? tenantComparison : application.compareTo(other.application);
+ }
+
+ @Override
+ public String toString() {
+ return tenant.value() + "." + application.value();
+ }
+
+ private static void requireNonBlank(String value, String name) {
+ Objects.requireNonNull(value, name + " cannot be null");
+ if (name.isBlank())
+ throw new IllegalArgumentException(name + " cannot be blank");
+ }
+
+}