@Override @Nullable protected String getNavigationTaxonomyId(Localization localization) { String[] taxonomies = taxonomyFactory.getTaxonomies(TcmUtils.buildPublicationTcmUri(localization.getId())); Keyword root = selectRootOfTaxonomy(taxonomies); if (root == null) { log.error("No Navigation Taxonomy Found in Localization [{}]. Ensure a Taxonomy with '{}}' in its title is published", localization, taxonomyNavigationMarker); return null; } log.debug("Resolved Navigation Taxonomy: {}", root); return root.getTaxonomyURI(); }
private String _resolveLocalizationPath(String localizationId) throws StaticContentNotLoadedException { PublicationMeta meta; try { meta = publicationMetaFactory.getMeta(TcmUtils.buildPublicationTcmUri(localizationId)); } catch (StorageException e) { throw new StaticContentNotLoadedException("Cannot resolve localization path for localization '" + localizationId + "'", e); } log.debug("Resolved url '{}' for publication id {}", meta.getPublicationPath(), localizationId); return meta.getPublicationUrl(); }
/** * Expands root Taxonomies. * * @param requestDto current request with mandatory localization ID and navigation filter * @param filter way to filter roots, pass empty predicate always returning true {@code () -> true} * @return a list of root Taxonomies */ @NotNull private List<Keyword> getTaxonomyRoots(@NotNull SitemapRequestDto requestDto, @NotNull() Predicate<Keyword> filter) { Assert.notNull(requestDto.getLocalizationId(), "Localization ID is required to load taxonomy roots"); Assert.notNull(requestDto.getNavigationFilter(), "Navigation Filter is required to load taxonomy roots"); NavigationFilter navigationFilter = requestDto.getNavigationFilter(); // since we load categories here, we have to decrease depth by one because the first level is categories level // and we want top-level keywords final int maximumDepth = navigationFilter.getDescendantLevels() > 0 ? navigationFilter.getDescendantLevels() - 1 : navigationFilter.getDescendantLevels(); TaxonomyFilter depthFilter = new DepthFilter(maximumDepth, DepthFilter.FILTER_DOWN); return Arrays.stream(taxonomyFactory.getTaxonomies(TcmUtils.buildPublicationTcmUri(requestDto.getLocalizationId()))) .distinct() .map(taxonomy -> taxonomyFactory.getTaxonomyKeywords(taxonomy, depthFilter)) .filter(filter) .collect(Collectors.toList()); }
@Override protected Set<SitemapItem> expandTaxonomyRoots(final NavigationFilter navigationFilter, final Localization localization) { final int maximumDepth = navigationFilter.getDescendantLevels() > 0 ? navigationFilter.getDescendantLevels() - 1 : navigationFilter.getDescendantLevels(); DepthFilter depthFilter = new DepthFilter(maximumDepth, DepthFilter.FILTER_DOWN); List<Keyword> roots = new ArrayList<>(); String[] taxonomies = taxonomyFactory.getTaxonomies(TcmUtils.buildPublicationTcmUri(localization.getId())); for (String id : taxonomies) { roots.add(taxonomyFactory.getTaxonomyKeywords(id, depthFilter)); } return new LinkedHashSet<>(transform(roots, new Function<Keyword, SitemapItem>() { @Override public SitemapItem apply(Keyword keyword) { return createTaxonomyNode(keyword, maximumDepth, navigationFilter, localization); } })); }