/** * 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(); }