private Endpoint computeEndpoint(String serviceName) {

    Service service = partition.getServices().get(serviceName);

    if (service != null) {
      if (service.getEndpoints().containsKey(region)) {

        Endpoint merged =
            Endpoint.merge(
                partition.getDefaults(),
                Endpoint.merge(service.getDefaults(), service.getEndpoints().get(region)));

        return merged;

      } else if (service.isPartitionWideEndpointAvailable() && !service.isRegionalized()) {
        // partition doesn't have any information about a service.

        Endpoint merged =
            Endpoint.merge(
                partition.getDefaults(),
                Endpoint.merge(
                    service.getDefaults(),
                    service.getEndpoints().get(service.getPartitionEndpoint())));

        return merged;

      } else {
        if (partition.getDefaults() != null && partition.getDefaults().getHostName() != null) {
          return partition.getDefaults();
        }
      }
    }
    return null;
  }
 private String getEndpointString(String serviceName, Endpoint endpoint) {
   return endpoint == null
       ? null
       : endpoint
           .getHostName()
           .replace(SERVICE, serviceName)
           .replace(REGION, region)
           .replace(DNS_SUFFIX, partition.getDnsSuffix());
 }