@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(""); }