protected void addCategorySiteMapEntries(
      Category parentCategory,
      int currentDepth,
      CategorySiteMapGeneratorConfiguration categorySMGC,
      SiteMapBuilder siteMapBuilder) {
    // If we've reached beyond the ending depth, don't proceed
    if (currentDepth > categorySMGC.getEndingDepth()) {
      return;
    }

    // If we're at or past the starting depth, add this category to the site map
    if (currentDepth >= categorySMGC.getStartingDepth()) {
      constructSiteMapURL(categorySMGC, siteMapBuilder, parentCategory);
    }

    // Recurse on child categories in batches of size rowLimit
    int rowOffset = 0;
    List<Category> categories;
    do {
      categories =
          categoryDao.readActiveSubCategoriesByCategory(parentCategory, rowLimit, rowOffset);
      rowOffset += categories.size();
      for (Category category : categories) {
        if (StringUtils.isNotEmpty(category.getUrl())) {
          addCategorySiteMapEntries(category, currentDepth + 1, categorySMGC, siteMapBuilder);
        } else {
          LOG.debug("Skipping empty category URL: " + category.getId());
        }
      }
    } while (categories.size() == rowLimit);
  }
  @Override
  public void addSiteMapEntries(SiteMapGeneratorConfiguration smgc, SiteMapBuilder siteMapBuilder) {

    CategorySiteMapGeneratorConfiguration categorySMGC =
        (CategorySiteMapGeneratorConfiguration) smgc;

    // Recursively construct the category SiteMap URLs
    addCategorySiteMapEntries(categorySMGC.getRootCategory(), 0, categorySMGC, siteMapBuilder);
  }
  protected void constructSiteMapURL(
      CategorySiteMapGeneratorConfiguration categorySMGC,
      SiteMapBuilder siteMapBuilder,
      Category category) {
    SiteMapURLWrapper siteMapUrl = new SiteMapURLWrapper();

    // location
    siteMapUrl.setLoc(generateUri(siteMapBuilder, category));

    // change frequency
    siteMapUrl.setChangeFreqType(categorySMGC.getSiteMapChangeFreq());

    // priority
    siteMapUrl.setPriorityType(categorySMGC.getSiteMapPriority());

    // lastModDate
    siteMapUrl.setLastModDate(generateDate(category));

    siteMapBuilder.addUrl(siteMapUrl);
  }