@Override
  public @Nullable Distribution getDistribution(@Nonnull String distributionId)
      throws InternalException, CloudException {
    APITrace.begin(provider, "CDN.getDistribution");
    try {
      ProviderContext ctx = provider.getContext();

      if (ctx == null) {
        throw new InternalException("No context exists for this request");
      }
      NovaMethod method = new NovaMethod(provider);
      Map<String, String> metaData = method.headResource(SERVICE, RESOURCE, distributionId);

      if (metaData == null) {
        return null;
      }
      Distribution distribution = new Distribution();

      distribution.setAliases(new String[0]);

      String dnsName = null, cdnUri = null;
      boolean enabled = false;

      for (String key : metaData.keySet()) {
        if (key.equalsIgnoreCase("X-CDN-Enabled")) {
          String value = metaData.get(key);

          enabled = (value != null && value.equalsIgnoreCase("true"));
        } else if (key.equalsIgnoreCase("X-CDN-SSL-URI")) {
          dnsName = metaData.get(key);
        } else if (key.equalsIgnoreCase("X-CDN-URI")) {
          cdnUri = metaData.get(key);
        }
      }
      distribution.setActive(enabled);
      distribution.setDeployed(enabled);

      String prefix = "http://";

      if (dnsName == null) {
        dnsName = cdnUri;
        if (dnsName == null) {
          return null;
        }
        if (dnsName.startsWith("http://")) {
          dnsName = dnsName.substring("http://".length());
        }
      } else {
        if (dnsName.startsWith("https://")) {
          dnsName = dnsName.substring("https://".length());
          prefix = "https://";
        }
      }
      distribution.setDnsName(dnsName);
      distribution.setLocation(prefix + distribution.getDnsName() + "/" + distributionId);
      distribution.setLogDirectory(null);
      distribution.setLogName(null);
      distribution.setName(distributionId);
      distribution.setProviderDistributionId(distributionId);
      distribution.setProviderOwnerId(getTenantId());
      return distribution;
    } finally {
      APITrace.end();
    }
  }