@Override
  public Set<? extends Location> get() {
    Set<? extends Location> regionsOrJustProvider = regionToProviderOrJustProvider.get();
    Set<String> zoneIds = zoneIdsSupplier.get();
    if (zoneIds.size() == 0) return regionsOrJustProvider;
    Map<String, Location> zoneIdToParent =
        setParentOfZoneToRegionOrProvider(zoneIds, regionsOrJustProvider);
    Map<String, Supplier<Set<String>>> isoCodesById = isoCodesByIdSupplier.get();

    Builder<Location> locations = ImmutableSet.builder();
    if (!Iterables.all(regionsOrJustProvider, LocationPredicates.isProvider()))
      locations.addAll(regionsOrJustProvider);
    for (Map.Entry<String, Location> entry : zoneIdToParent.entrySet()) {
      String zoneId = entry.getKey();
      Location parent = entry.getValue();
      LocationBuilder builder =
          new LocationBuilder()
              .scope(LocationScope.ZONE)
              .id(zoneId)
              .description(zoneId)
              .parent(parent);
      if (isoCodesById.containsKey(zoneId)) builder.iso3166Codes(isoCodesById.get(zoneId).get());
      // be cautious.. only inherit iso codes if the parent is a region
      // regions may be added dynamically, and we prefer to inherit an
      // empty set of codes from a region, then a provider, whose code
      // are likely hard-coded.
      else if (parent.getScope() == LocationScope.REGION)
        builder.iso3166Codes(parent.getIso3166Codes());
      locations.add(builder.build());
    }
    return locations.build();
  }
 protected Builder<Location> buildJustProviderOrVDCs() {
   Builder<Location> locations = ImmutableSet.builder();
   Location provider = Iterables.getOnlyElement(super.get());
   if (orgNameToResource.get().size() == 0) return locations.add(provider);
   else
     for (ReferenceType org : orgNameToResource.get().values()) {
       LocationBuilder builder =
           new LocationBuilder()
               .scope(LocationScope.REGION)
               .id(org.getHref().toASCIIString())
               .description((org.getName()))
               .parent(provider);
       if (isoCodesById.containsKey(org.getHref().toASCIIString()))
         builder.iso3166Codes(isoCodesById.get(org.getHref().toASCIIString()));
       Location orgL = builder.build();
       for (ReferenceType vdc : orgNameToVDCResource.get().get(org.getName()).getVDCs().values()) {
         builder =
             new LocationBuilder()
                 .scope(LocationScope.ZONE)
                 .id(vdc.getHref().toASCIIString())
                 .description((vdc.getName()))
                 .parent(orgL);
         if (isoCodesById.containsKey(vdc.getHref().toASCIIString()))
           builder.iso3166Codes(isoCodesById.get(vdc.getHref().toASCIIString()));
         locations.add(builder.build());
       }
     }
   return locations;
 }