/**
   * Creates a MarinerUrl
   *
   * @param requestContext
   * @param asset
   * @param assetGroup
   * @param marinerURL
   * @return
   * @throws RepositoryException
   */
  public static MarinerURL createMarinerURL(
      MarinerRequestContext requestContext,
      Asset asset,
      AssetGroup assetGroup,
      MarinerURL marinerURL)
      throws RepositoryException {

    MarinerURL urlResult = computeURL(requestContext, asset, assetGroup, marinerURL);

    if (asset instanceof ConvertibleImageAsset) {
      String url = urlResult.getExternalForm();

      // Construct the url for the convertible image asset.
      ConvertibleImageAsset convertible = (ConvertibleImageAsset) asset;
      PreservedArea area =
          PreservedArea.get(convertible.getPreserveLeft(), convertible.getPreserveRight(), true);
      String value = ContextInternals.constructImageURL(requestContext, url, area);

      urlResult = new MarinerURL(value);
    }

    // Complete the URL
    urlResult = completeURL(requestContext, asset, assetGroup, urlResult);

    // Make sure that the url cannot be modified (even if it is a
    // convertible image asset).
    urlResult.makeReadOnly();

    return urlResult;
  }