diff options
Diffstat (limited to 'config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java')
-rw-r--r-- | config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java b/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java new file mode 100644 index 00000000000..675b770dc29 --- /dev/null +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java @@ -0,0 +1,79 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.provision.zone; + +import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.RegionName; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +/** + * A ZoneList implementation which assumes all zones are controllerManaged. + * + * @author jonmv + */ +public class ZoneFilterMock implements ZoneList { + + private final List<ZoneId> zones; + private final boolean negate; + + private ZoneFilterMock(List<ZoneId> zones, boolean negate) { + this.negate = negate; + this.zones = zones; + } + + public static ZoneFilter from(Collection<ZoneId> zones) { + return new ZoneFilterMock(new ArrayList<>(zones), false); + } + + @Override + public ZoneList not() { + return new ZoneFilterMock(zones, ! negate); + } + + @Override + public ZoneList all() { + return filter(zoneId -> true); + } + + @Override + public ZoneList controllerUpgraded() { + return all(); + } + + @Override + public ZoneList reachable() { + return all(); + } + + @Override + public ZoneList in(Environment... environments) { + return filter(zoneId -> new HashSet<>(Arrays.asList(environments)).contains(zoneId.environment())); + } + + @Override + public ZoneList in(RegionName... regions) { + return filter(zoneId -> new HashSet<>(Arrays.asList(regions)).contains(zoneId.region())); + } + + @Override + public ZoneList among(ZoneId... zones) { + return filter(zoneId -> new HashSet<>(Arrays.asList(zones)).contains(zoneId)); + } + + @Override + public List<ZoneId> ids() { + return Collections.unmodifiableList(zones); + } + + private ZoneFilterMock filter(Predicate<ZoneId> condition) { + return new ZoneFilterMock(zones.stream().filter(negate ? condition.negate() : condition).collect(Collectors.toList()), false); + } + +} |