diff options
Diffstat (limited to 'controller-server/src')
-rw-r--r-- | controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/TenantAndApplicationId.java | 94 |
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"); + } + +} |