class UrlBuilder {

  public String buildUrl(Map<String, ?> allColumnValues) {
    Set<String> missing = getMissingColumns(allColumnValues.keySet());
    if (!missing.isEmpty()) {
      logger.log(Level.WARNING, "Missing value(s) for URL column(s): {0}", missing);
      return null;
    }
    List<Object> values = new ArrayList<Object>();
    for (String col : columns) {
      if (allColumnValues.get(col) == null) {
        logger.log(Level.WARNING, "Missing value for URL column: {0}", col);
        return null;
      }
      if (columnsToEscape.contains(col)) {
        values.add(escaper.escape(allColumnValues.get(col).toString()));
      } else {
        values.add(allColumnValues.get(col));
      }
    }
    return MessageFormat.format(format, values.toArray());
  }

  private  UrlBuilder(Builder builder);

}