From b4415a853699322f051e0d88c6592a34bc8d56d3 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Tue, 14 May 2019 12:00:54 +0200 Subject: Add methods for creating ZoneId with system Support deserializing zone id which includes cloud and system --- .../com/yahoo/config/provision/zone/ZoneId.java | 41 ++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) (limited to 'config-provisioning/src/main/java/com/yahoo/config/provision/zone') diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneId.java b/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneId.java index 7eeae10eeb8..d839c65574e 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneId.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneId.java @@ -4,6 +4,7 @@ package com.yahoo.config.provision.zone; import com.yahoo.config.provision.CloudName; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.SystemName; import java.util.Objects; @@ -17,24 +18,32 @@ import java.util.Objects; public class ZoneId { // TODO: Replace usages of environment + region with usages of this. + // TODO: Remove static factory methods not specifying cloud and system + private final Environment environment; private final RegionName region; private final CloudName cloud; + private final SystemName system; - private ZoneId(Environment environment, RegionName region, CloudName cloud) { + private ZoneId(Environment environment, RegionName region, CloudName cloud, SystemName system) { this.environment = Objects.requireNonNull(environment, "environment must be non-null"); this.region = Objects.requireNonNull(region, "region must be non-null"); this.cloud = Objects.requireNonNull(cloud, "cloud must be non-null"); + this.system = Objects.requireNonNull(system, "system must be non-null"); } private ZoneId(Environment environment, RegionName region) { - this(environment, region, CloudName.defaultName()); + this(environment, region, CloudName.defaultName(), SystemName.defaultSystem()); } public static ZoneId from(Environment environment, RegionName region) { return new ZoneId(environment, region); } + public static ZoneId from(Environment environment, RegionName region, CloudName cloud, SystemName system) { + return new ZoneId(environment, region, cloud, system); + } + public static ZoneId from(String environment, String region) { return from(Environment.from(environment), RegionName.from(region)); } @@ -42,15 +51,26 @@ public class ZoneId { /** Create from a serialised ZoneId. Inverse of {@code ZoneId.value()}. */ public static ZoneId from(String value) { String[] parts = value.split("\\."); - return from(parts[0], parts[1]); + switch (parts.length) { + case 2: + return from(parts[0], parts[1]); + case 4: + return from(parts[2], parts[3], parts[0], parts[1]); + default: + throw new IllegalArgumentException("Cannot deserialize zone id '" + value + "'"); + } } public static ZoneId from(Environment environment, RegionName region, CloudName cloud) { - return new ZoneId(environment, region, cloud); + return new ZoneId(environment, region, cloud, SystemName.defaultSystem()); } public static ZoneId from(String environment, String region, String cloud) { - return new ZoneId(Environment.from(environment), RegionName.from(region), CloudName.from(cloud)); + return new ZoneId(Environment.from(environment), RegionName.from(region), CloudName.from(cloud), SystemName.defaultSystem()); + } + + public static ZoneId from(String environment, String region, String cloud, String system) { + return new ZoneId(Environment.from(environment), RegionName.from(region), CloudName.from(cloud), SystemName.from(system)); } public Environment environment() { @@ -65,17 +85,26 @@ public class ZoneId { return cloud; } + public SystemName system() { + return system; + } + /** Returns the serialised value of this. Inverse of {@code ZoneId.from(String value)}. */ public String value() { return environment + "." + region; + // TODO: Change to the below when there only methods use constructor including cloud and system are used and + // all serialized values contain cloud and system + // return cloud + "." + system + "." + environment + "." + region; } @Override public String toString() { - return "zone " + value() + " in " + cloud; + // TODO: Use value() instead for last parts of statement + return "zone " + cloud + "." + system + "." + environment + "." + region; } @Override + // TODO: Update to check cloud and system when everyone use methods that specify cloud and system public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; -- cgit v1.2.3