/*
*
* Copyright 2013 Netflix, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.netflix.ice.tag;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentMap;
public class Zone extends Tag {
public final Region region;
private Zone (Region region, String name) {
super(name);
this.region = region;
region.addZone(this);
}
public static final Zone US_EAST_1A = new Zone(Region.US_EAST_1, "us-east-1a");
public static final Zone US_EAST_1B = new Zone(Region.US_EAST_1, "us-east-1b");
public static final Zone US_EAST_1C = new Zone(Region.US_EAST_1, "us-east-1c");
public static final Zone US_EAST_1D = new Zone(Region.US_EAST_1, "us-east-1d");
public static final Zone US_EAST_1E = new Zone(Region.US_EAST_1, "us-east-1e");
public static final Zone US_WEST_1A = new Zone(Region.US_WEST_1, "us-west-1a");
public static final Zone US_WEST_1B = new Zone(Region.US_WEST_1, "us-west-1b");
public static final Zone US_WEST_1C = new Zone(Region.US_WEST_1, "us-west-1c");
public static final Zone US_WEST_2A = new Zone(Region.US_WEST_2, "us-west-2a");
public static final Zone US_WEST_2B = new Zone(Region.US_WEST_2, "us-west-2b");
public static final Zone US_WEST_2C = new Zone(Region.US_WEST_2, "us-west-2c");
public static final Zone EU_WEST_1A = new Zone(Region.EU_WEST_1, "eu-west-1a");
public static final Zone EU_WEST_1B = new Zone(Region.EU_WEST_1, "eu-west-1b");
public static final Zone EU_WEST_1C = new Zone(Region.EU_WEST_1, "eu-west-1c");
public static final Zone EU_CENTRAL_1A = new Zone(Region.EU_CENTRAL_1, "eu-central-1a");
public static final Zone EU_CENTRAL_1B = new Zone(Region.EU_CENTRAL_1, "eu-central-1b");
public static final Zone SA_EAST_1A = new Zone(Region.SA_EAST_1, "sa-east-1a");
public static final Zone SA_EAST_1B = new Zone(Region.SA_EAST_1, "sa-east-1b");
public static final Zone SA_EAST_1C = new Zone(Region.SA_EAST_1, "sa-east-1c");
public static final Zone AP_NORTHEAST_1A = new Zone(Region.AP_NORTHEAST_1, "ap-northeast-1a");
public static final Zone AP_NORTHEAST_1B = new Zone(Region.AP_NORTHEAST_1, "ap-northeast-1b");
public static final Zone AP_NORTHEAST_1C = new Zone(Region.AP_NORTHEAST_1, "ap-northeast-1c");
public static final Zone AP_SOUTHEAST_1A = new Zone(Region.AP_SOUTHEAST_1, "ap-southeast-1a");
public static final Zone AP_SOUTHEAST_1B = new Zone(Region.AP_SOUTHEAST_1, "ap-southeast-1b");
public static final Zone AP_SOUTHEAST_2A = new Zone(Region.AP_SOUTHEAST_2, "ap-southeast-2a");
public static final Zone AP_SOUTHEAST_2B = new Zone(Region.AP_SOUTHEAST_2, "ap-southeast-2b");
private static ConcurrentMap<String, Zone> zonesByName = Maps.newConcurrentMap();
static {
zonesByName.put(US_EAST_1A.name, US_EAST_1A);
zonesByName.put(US_EAST_1B.name, US_EAST_1B);
zonesByName.put(US_EAST_1C.name, US_EAST_1C);
zonesByName.put(US_EAST_1D.name, US_EAST_1D);
zonesByName.put(US_EAST_1E.name, US_EAST_1E);
zonesByName.put(US_WEST_1A.name, US_WEST_1A);
zonesByName.put(US_WEST_1B.name, US_WEST_1B);
zonesByName.put(US_WEST_1C.name, US_WEST_1C);
zonesByName.put(US_WEST_2A.name, US_WEST_2A);
zonesByName.put(US_WEST_2B.name, US_WEST_2B);
zonesByName.put(US_WEST_2C.name, US_WEST_2C);
zonesByName.put(EU_WEST_1A.name, EU_WEST_1A);
zonesByName.put(EU_WEST_1B.name, EU_WEST_1B);
zonesByName.put(EU_WEST_1C.name, EU_WEST_1C);
zonesByName.put(EU_CENTRAL_1A.name, EU_CENTRAL_1A);
zonesByName.put(EU_CENTRAL_1B.name, EU_CENTRAL_1B);
zonesByName.put(SA_EAST_1A.name, SA_EAST_1A);
zonesByName.put(SA_EAST_1B.name, SA_EAST_1B);
zonesByName.put(SA_EAST_1C.name, SA_EAST_1C);
zonesByName.put(AP_NORTHEAST_1A.name, AP_NORTHEAST_1A);
zonesByName.put(AP_NORTHEAST_1B.name, AP_NORTHEAST_1B);
zonesByName.put(AP_NORTHEAST_1C.name, AP_NORTHEAST_1C);
zonesByName.put(AP_SOUTHEAST_1A.name, AP_SOUTHEAST_1A);
zonesByName.put(AP_SOUTHEAST_1B.name, AP_SOUTHEAST_1B);
zonesByName.put(AP_SOUTHEAST_2A.name, AP_SOUTHEAST_2A);
zonesByName.put(AP_SOUTHEAST_2B.name, AP_SOUTHEAST_2B);
}
public static void addZone(Zone zone) {
Zone existedZone = zonesByName.putIfAbsent(zone.name, zone);
if (existedZone != null) {
throw new RuntimeException("Zone with shortname already exists " + existedZone);
}
}
public static Zone getZone(String name, Region region) {
if (name.isEmpty() || name.equals(region.name))
return null;
Zone zone = zonesByName.get(name);
if (zone == null) {
zonesByName.putIfAbsent(name, new Zone(region, name));
zone = zonesByName.get(name);
}
return zone;
}
public static Zone getZone(String name) {
return zonesByName.get(name);
}
public static Collection<Zone> getZones() {
return zonesByName.values();
}
public static List<Zone> getZones(List<String> names) {
List<Zone> result = Lists.newArrayList();
for (String name: names)
result.add(zonesByName.get(name));
return result;
}
}