package com.loadimpact.resource; import com.loadimpact.util.StringUtils; import javax.json.JsonObject; import java.util.HashMap; import java.util.Map; /** * Enumeration of all known load zones. * * @author jens */ public enum LoadZone { /* Aggregate load zones */ AGGREGATE_WORLD(1, "aggregated:world:world", "World"), /* Amazon load zones */ AMAZON_US_ASHBURN(11, "amazon:us:ashburn", "Ashburn"), AMAZON_US_PALOALTO(12, "amazon:us:palo alto", "Palo Alto"), AMAZON_IE_DUBLIN(13, "amazon:ie:dublin", "Dublin"), AMAZON_SG_SINGAPORE(14, "amazon:sg:singapore", "Singapore"), AMAZON_JP_TOKYO(15, "amazon:jp:tokyo", "Tokyo"), AMAZON_US_PORTLAND(22, "amazon:us:portland", "Portland"), AMAZON_BR_SAOPAULO(23, "amazon:br:s\u00e3o paulo", "S\u00e3o Paulo"), AMAZON_AU_SYDNEY(25, "amazon:au:sydney", "Sydney"), /* Rackspace load zones */ RACKSPACE_US_CHICAGO(26, "rackspace:us:chicago", "Chicago"), RACKSPACE_US_DALLAS(27, "rackspace:us:dallas", "Dallas"), RACKSPACE_UK_LONDON(28, "rackspace:uk:london", "London"), RACKSPACE_AU_SYDNEY(29, "rackspace:au:sydney", "Sydney"); public enum Countries {World, US, IE, UK, BR, SG, AU, JP} public enum Providers {Aggregated, Amazon, Rackspace} public final int id; public final String uid; public final String city; public final Countries country; public final Providers provider; private static Map<String, LoadZone> zones; LoadZone(int id, String uid, String city) { this.id = id; this.city = city; this.uid = uid; this.country = toCountry(uid); this.provider = toProvider(uid); add(this); } @Override public String toString() { return uid; } private Countries toCountry(String uid) { String countryCode = uid.split(":")[1]; for (Countries c : Countries.values()) { if (countryCode.equals(c.name().toLowerCase())) return c; } throw new IllegalArgumentException("Country code not found: " + uid); } private Providers toProvider(String uid) { String provider = uid.split(":")[0]; for (Providers p : Providers.values()) { if (provider.equals(p.name().toLowerCase())) return p; } throw new IllegalArgumentException("Provider code not found: " + uid); } private static void add(LoadZone z) { if (zones == null) { zones = new HashMap<String, LoadZone>(); } zones.put(z.uid, z); } public static LoadZone valueOf(JsonObject json) { String zoneId = json.getString("id", null); if (zoneId == null) return AGGREGATE_WORLD; LoadZone zone = zones.get(zoneId); if (zone == null) return AGGREGATE_WORLD; return zone; } public static LoadZone valueOf(int zoneId) { for (LoadZone z : values()) { if (z.id == zoneId) return z; } return AGGREGATE_WORLD; } }