private static SitemapItem findContextNavigationStructureGroup(SitemapItem item, String requestPath) { if (Objects.equals(item.getType(), TYPE_STRUCTURE_GROUP) && requestPath.startsWith(item.getUrl().toLowerCase())) { // Check if there is a matching subitem, if yes, then return it for (SitemapItem subItem : item.getItems()) { final SitemapItem matchingSubItem = findContextNavigationStructureGroup(subItem, requestPath); if (matchingSubItem != null) { return matchingSubItem; } } // Otherwise return this matching item return item; } // No matching item return null; }
@NotNull private SitemapItem _convert(@NotNull SitemapItemModelData model) { SitemapItem item = _instantiateSitemap(model); item.setId(model.getId()); item.setVisible(model.isVisible()); item.setUrl(model.getUrl()); item.setTitle(model.getTitle()); item.setOriginalTitle(model.getOriginalTitle()); item.setPublishedDate(model.getPublishedDate()); item.setType(model.getType()); model.getItems().forEach(modelData -> item.addItem(_convert(modelData))); return item; }
String url = nullToEmpty(item.getUrl()); a(url).withTitle(item.getTitle()).withTextualContent(item.getTitle()).build() ); } else { builder.withTextualContent(item.getTitle()); if (item.getItems().isEmpty()) { return builder.build(); for (SitemapItem child : item.getItems()) { HtmlElement element = siteMapListHelper(child, root); if (element != null) {
private TaxonomyNode createTaxonomyNode(@NotNull Keyword keyword, int expandLevels, NavigationFilter filter, @NotNull Localization localization) { String taxonomyId = keyword.getTaxonomyURI().split("-")[1]; String taxonomyNodeUrl = null; List<SitemapItem> children = new ArrayList<>(); if (expandLevels != 0) { for (Keyword childKeyword : keyword.getKeywordChildren()) { children.add(createTaxonomyNode(childKeyword, expandLevels - 1, filter, localization)); } if (keyword.getReferencedContentCount() > 0 && filter.getDescendantLevels() != 0) { List<SitemapItem> pageSitemapItems = getChildrenPages(keyword, taxonomyId, localization); taxonomyNodeUrl = findIndexPageUrl(pageSitemapItems); log.trace("taxonomyNodeUrl = {}", taxonomyNodeUrl); children.addAll(pageSitemapItems); } } for (SitemapItem child : children) { child.setTitle(LocalizationUtils.removeSequenceFromPageTitle(child.getTitle())); } return createTaxonomyNodeFromKeyword(toDto(keyword), taxonomyId, taxonomyNodeUrl, new LinkedHashSet<>(children)); }
@NotNull private static Iterator<SitemapItem> sitemapIteratorWithoutFirst(SitemapItem item) { if (item.getItems().isEmpty()) { return Collections.<SitemapItem>emptyList().iterator(); } else { Iterator<SitemapItem> iterator = item.getItems().iterator(); if (iterator.hasNext()) { iterator.next(); } return iterator; } }
private static boolean createBreadcrumbLinks(SitemapItem item, String requestPath, List<Link> links) { if (requestPath.startsWith(item.getUrl().toLowerCase())) { // Add link for this matching item links.add(linkForItem(item)); // Add links for the following matching subitems // first element was just added, skip it Iterator<SitemapItem> iterator = sitemapIteratorWithoutFirst(item); while (iterator.hasNext()) { if (createBreadcrumbLinks(iterator.next(), requestPath, links)) { return true; } } return true; } return false; }
private static List<Link> createLinksForVisibleItems(Iterable<SitemapItem> items) { final List<Link> links = new ArrayList<>(); for (SitemapItem item : items) { if (item.isVisible()) { links.add(linkForItem(item)); } } return links; }
@NotNull private NavigationLinks _toNavigationLinks(Collection<SitemapItemModelData> items, boolean onlyVisible, Localization localization) { return items.stream() .filter(model -> !onlyVisible || (model.isVisible() && !isNullOrEmpty(model.getUrl()))) .map(this::_convert) .map(item -> item.createLink(linkResolver, localization)) .collect(Collectors.collectingAndThen(Collectors.toList(), NavigationLinks::new)); }
@NotNull private SitemapItem _instantiateSitemap(@NotNull SitemapItemModelData model) { if (model instanceof TaxonomyNodeModelData) { TaxonomyNodeModelData taxonomyModel = (TaxonomyNodeModelData) model; TaxonomyNode item = new TaxonomyNode(); item.setKey(taxonomyModel.getKey()); item.setClassifiedItemsCount(taxonomyModel.getClassifiedItemsCount()); item.setDescription(taxonomyModel.getDescription()); item.setTaxonomyAbstract(taxonomyModel.isTaxonomyAbstract()); item.setWithChildren(taxonomyModel.isWithChildren()); return item; } else { return new SitemapItem(); } } }
@Override public NavigationLinks getTopNavigationLinks(String requestPath, Localization localization) throws NavigationProviderException { final SitemapItem navigationModel = getNavigationModel(localization); return new NavigationLinks(createLinksForVisibleItems(navigationModel.getItems())); }
@Override public NavigationLinks getContextNavigationLinks(String requestPath, Localization localization) throws NavigationProviderException { final SitemapItem navigationModel = getNavigationModel(localization); final SitemapItem contextNavigationItem = findContextNavigationStructureGroup(navigationModel, requestPath); final List<Link> links = contextNavigationItem != null ? createLinksForVisibleItems(contextNavigationItem.getItems()) : Collections.emptyList(); return new NavigationLinks(links); }