/**
   * @param siteURL URL of site requested
   * @param date Requested date
   * @return SiteData or null if data does not exist
   */
  public SiteData doGetSiteDataForDate(String siteURL, Date date) {
    SiteData siteData = null;

    try {
      Pattern p =
          Pattern.compile(
              "(@)?(href=')?(HREF=')?(HREF=\")?(href=\")?(http://)?[a-zA-Z_0-9\\-]+(\\.\\w[a-zA-Z_0-9\\-]+)+(/[#&\\n\\-=?\\+\\%/\\.\\w]+)?");
      Matcher m = p.matcher(siteURL);
      if (!m.matches()) throw new Exception("Site URL is not valid: " + siteURL);

      if (!allSitesMap.containsKey(siteURL))
        throw new Exception("No Site data available for: " + siteURL);

      SiteArchive siteArchive = allSitesMap.get(siteURL);
      siteData = siteArchive.retrieveSiteData(date);

    } catch (Exception e) {
      e.printStackTrace();
      return siteData;
    }

    return siteData;
  }