private String getRightIf(boolean returnValue, String typeId) { return returnValue ? TcmUtils.buildTcmUri(localizationId, pageOrKeywordId, typeId) : null; } }
/** * 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); }
/** * See {@link #buildKeywordTcmUri(String, String)}. */ public static String buildKeywordTcmUri(int publicationId, int itemId) { return buildKeywordTcmUri(String.valueOf(publicationId), String.valueOf(itemId)); }
private static String resolveLink(String itemId, WebRequestContext webRequestContext, LinkResolver linkResolver) { String publicationId = webRequestContext.getLocalization().getId(); String url = TcmUtils.isTcmUri(itemId) ? itemId : TcmUtils.buildTcmUri(publicationId, itemId); return linkResolver.resolveLink(url, publicationId); }
@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(""); }
/** * 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)); }
@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 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)); }
/** * Build a short TCM URI looking like <code>tcm:PUB_ID-ITEM_ID</code>. * * @param publicationId publication ID * @param itemId item ID * @return short TCM URI */ public static String buildTcmUri(String publicationId, String itemId) { return buildTcmUriInternal(publicationId, itemId); }
/** * Extracts item type from a valid TCM URI. * * @param tcmUri tcm uri to process * @return item type ID or <code>-1</code> if URI is not valid or null */ public static int getItemType(String tcmUri) { int itemType = extractGroupFromTcm(tcmUri, "itemType"); return itemType == -2 ? COMPONENT_ITEM_TYPE : itemType; }
/** * Build a publication TCM URI looking like <code>tcm:0-ID-1</code>. * * @param publicationId publication ID * @return TCM URI for publication */ public static String buildPublicationTcmUri(String publicationId) { return buildPublicationTcmUriInternal(publicationId); }
/** * See {@link #buildTemplateTcmUri(String, String)}. */ public static String buildTemplateTcmUri(int publicationId, int itemId) { return buildTemplateTcmUri(String.valueOf(publicationId), String.valueOf(itemId)); }
private static String resolveLink(String itemId, WebRequestContext webRequestContext, LinkResolver linkResolver) { String publicationId = webRequestContext.getLocalization().getId(); String url = TcmUtils.isTcmUri(itemId) ? itemId : TcmUtils.buildTcmUri(publicationId, itemId); return linkResolver.resolveLink(url, publicationId); } }
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(); }
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); }
/** * Build a TCM URI looking like <code>tcm:PUB_ID-ITEM_ID-ITEM_TYPE</code>. * * @param publicationId publication ID * @param itemId item ID * @param itemType item type * @return a TCM URI */ public static String buildTcmUri(String publicationId, String itemId, String itemType) { return buildTcmUriInternal(publicationId, itemId, itemType); }
/** * Extracts item ID from a valid TCM URI. * * @param tcmUri tcm uri to process * @return item ID or <code>-1</code> if URI is not valid or null */ public static int getItemId(String tcmUri) { return extractGroupFromTcm(tcmUri, "itemId"); }
/** * Build a publication TCM URI looking like <code>tcm:0-ID-1</code>. * * @param publicationId publication ID * @return TCM URI for publication */ public static String buildPublicationTcmUri(int publicationId) { return buildPublicationTcmUriInternal(String.valueOf(publicationId)); }
private String taxonomyUri() { return TcmUtils.buildTcmUri(localizationId, taxonomyId, "512"); }
/** * 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()); }