/** * Localizes given TCM URI to current publication. * <p>E.g. <code>tcm:1-2-3</code> with publication URI <code>tcm:0-8-1</code> will look like <code>tcm:8-2-3</code>.</p> * * @param tcmUri tcm uri of item to localize * @param publicationTcmUri TCM URI of publication * @return localized TCM URI of an item */ public static String localizeTcmUri(String tcmUri, String publicationTcmUri) { int publicationId = getItemId(publicationTcmUri); return localizeTcmUri(tcmUri, publicationId); }
/** * Localizes given TCM URI to current publication. * <p>E.g. <code>tcm:1-2-3</code> with publication ID <code>8</code> will look like <code>tcm:8-2-3</code>.</p> * * @param tcmUri tcm uri of item to localize * @param publicationId publication ID * @return localized TCM URI of an item */ public static String localizeTcmUri(String tcmUri, int publicationId) { Matcher matcher = PATTERN.matcher(tcmUri); if (!matcher.matches()) { log.warn("TCM URI {} is not valid", tcmUri); throw new IllegalArgumentException("TCM URI is not valid: " + tcmUri); } String itemType = matcher.group(4); return itemType == null ? buildTcmUri(publicationId, getItemId(tcmUri)) : buildTcmUri(publicationId, getItemId(tcmUri), Integer.parseInt(itemType)); }
private TaxonomyNodeModelData createTaxonomyNode(@NotNull Keyword keyword, @NotNull SitemapRequestDto requestDto) { log.debug("Creating taxonomy node for keyword {} and request {}", keyword.getTaxonomyURI(), requestDto); String taxonomyId = String.valueOf(TcmUtils.getItemId(keyword.getTaxonomyURI())); String taxonomyNodeUrl = null; List<SitemapItemModelData> children = new ArrayList<>(); if (requestDto.getExpandLevels().isNotTooDeep()) { keyword.getKeywordChildren().forEach(child -> children.add(createTaxonomyNode(child, requestDto.nextExpandLevel()))); if (keyword.getReferencedContentCount() > 0 && requestDto.getNavigationFilter().getDescendantLevels() != 0) { List<SitemapItemModelData> pageSitemapItems = getChildrenPages(keyword, taxonomyId, requestDto); taxonomyNodeUrl = findIndexPageUrl(pageSitemapItems).orElse(null); log.trace("taxonomyNodeUrl = {}", taxonomyNodeUrl); children.addAll(pageSitemapItems); } } children.forEach(child -> child.setTitle(removeSequenceFromPageTitle(child.getTitle()))); return createTaxonomyNodeFromKeyword(keyword, taxonomyId, taxonomyNodeUrl, new TreeSet<>(children)); }
@Contract("null, _, _ -> null; !null, _, _ -> !null") private String _resolveLink(String uri, int publicationId, boolean isBinary) { if (uri == null || !TcmUtils.isTcmUri(uri)) { return uri; } Function<ResolvingData, Optional<String>> resolver; switch (TcmUtils.getItemType(uri)) { case TcmUtils.COMPONENT_ITEM_TYPE: resolver = isBinary ? _componentBinaryResolver() : _componentResolver(); break; case TcmUtils.PAGE_ITEM_TYPE: resolver = _pageResolver(); break; default: log.warn("Could not resolve link: {}", uri); return ""; } ResolvingData resolvingData = ResolvingData.of( publicationId == 0 ? TcmUtils.getPublicationId(uri) : publicationId, TcmUtils.getItemId(uri), uri); return resolver.apply(resolvingData).orElse(""); }
private TaxonomyNodeModelData createTaxonomyNodeFromKeyword(@NotNull Keyword keyword, String taxonomyId, String taxonomyNodeUrl, SortedSet<SitemapItemModelData> children) { boolean isRoot = Objects.equals(keyword.getTaxonomyURI(), keyword.getKeywordURI()); String keywordId = String.valueOf(TcmUtils.getItemId(keyword.getKeywordURI())); return (TaxonomyNodeModelData) new TaxonomyNodeModelData() .setWithChildren(keyword.hasKeywordChildren() || keyword.getReferencedContentCount() > 0) .setDescription(keyword.getKeywordDescription()) .setTaxonomyAbstract(keyword.isKeywordAbstract()) .setClassifiedItemsCount(keyword.getReferencedContentCount()) .setKey(keyword.getKeywordKey()) .setId(isRoot ? getTaxonomySitemapIdentifier(taxonomyId) : getTaxonomySitemapIdentifier(taxonomyId, KEYWORD, keywordId)) .setType(sitemapItemTypeTaxonomyNode) .setUrl(stripDefaultExtension(taxonomyNodeUrl)) .setTitle(keyword.getKeywordName()) .setVisible(isVisibleItem(keyword.getKeywordName(), taxonomyNodeUrl)) .setItems(children); }