/**
   * Handles a request to get the sitemap (in HTML).
   *
   * @param request The request.
   * @param entityId The name of the entity.
   * @return The name of the entity view that should be rendered for this request.
   * @throws com.sdl.webapp.common.api.content.NavigationProviderException If an error occurs so
   *     that the navigation data cannot be retrieved.
   */
  @RequestMapping(
      method = RequestMethod.GET,
      value = DefaultsMvcData.CoreAreaConstants.SITEMAP_ACTION_NAME + "/{entityId}")
  public String handleGetSiteMap(HttpServletRequest request, @PathVariable String entityId)
      throws NavigationProviderException {
    LOG.trace("handleGetSiteMap: entityId={}", entityId);

    final EntityModel entity = getEntityFromRequest(request, entityId);

    final SitemapItem navigationModel =
        navigationProvider.getNavigationModel(webRequestContext.getLocalization());
    navigationModel.setXpmMetadata(entity.getXpmMetadata());
    navigationModel.setXpmPropertyMetadata(entity.getXpmPropertyMetadata());
    request.setAttribute(ENTITY_MODEL, navigationModel);

    // Put all items that do not have any subitems under the "Home" item
    final List<SitemapItem> topSubItems = navigationModel.getItems();
    final List<SitemapItem> homeSubItems = new ArrayList<>();
    for (Iterator<SitemapItem> i = topSubItems.iterator(); i.hasNext(); ) {
      final SitemapItem subItem = i.next();
      if (subItem.getItems().isEmpty()) {
        i.remove();
        homeSubItems.add(subItem);
      }
    }

    final SitemapItem homeItem = new SitemapItem();
    homeItem.setTitle(navigationModel.getTitle());
    homeItem.setUrl(navigationModel.getUrl());
    homeItem.setItems(homeSubItems);

    // Add the "Home" item as the first item
    topSubItems.add(0, homeItem);

    final MvcData mvcData = entity.getMvcData();
    LOG.trace("Entity MvcData: {}", mvcData);
    return mvcData.getAreaName() + "/Entity/" + mvcData.getViewName();
  }