/** * Create a HstLinkResolver instance with the current context <code>resolvedSiteMapItem</code>. The {@link HstSite} is taken from this context * @param node * @param resolvedSiteMapItem */ HstLinkResolver(Node node, ResolvedSiteMapItem resolvedSiteMapItem){ this.node = node; this.resolvedSiteMapItem = resolvedSiteMapItem; HstSiteMap hstSiteMap = resolvedSiteMapItem.getHstSiteMapItem().getHstSiteMap(); hstSite = (HstSiteService)hstSiteMap.getSite(); }
private HstSiteMapItem contextualize(HstSiteMapItemService matchedHstSiteMapItem) { if(matchedHstSiteMapItem.isUseableInRightContextOnly()) { boolean mergeable = mergeMatchedItemWithCurrentCtx(matchedHstSiteMapItem); // if not succeeded, return null if(!mergeable) { log.debug("Cannot contextualize hstSiteMapItem '{}' for current sitemap item '{}'", matchedHstSiteMapItem.getId(), this.resolvedSiteMapItem.getHstSiteMapItem().getId()); return null; } return matchedHstSiteMapItem; } else { return matchedHstSiteMapItem; } }
private HstSiteMapItem contextualize(final HstSiteMapItemService matchedHstSiteMapItem, final Map<String,String> propertyPlaceHolderMap) { if (matchedHstSiteMapItem.isUseableInRightContextOnly()) { boolean mergeable = mergeMatchedItemWithCurrentCtx(matchedHstSiteMapItem, propertyPlaceHolderMap); // if not succeeded, return null if(!mergeable) { log.debug("Cannot contextualize hstSiteMapItem '{}' for current sitemap item '{}'", matchedHstSiteMapItem.getId(), this.resolvedSiteMapItem.getHstSiteMapItem().getId()); return null; } return matchedHstSiteMapItem; } else { return matchedHstSiteMapItem; } }
private void notFound(final String type, final String componentRenderingWindowReferenceNamespace, final ValveContext context) throws ContainerException { log.warn("Illegal request for {} URL found because there is no component for id '{}' for matched " + "sitemap item '{}'. Set 404 on response for request '{}'.", type, componentRenderingWindowReferenceNamespace, context.getRequestContext().getResolvedSiteMapItem().getHstSiteMapItem().getId(), context.getServletRequest()); try { context.getServletResponse().sendError(HttpServletResponse.SC_NOT_FOUND); } catch (IOException e) { throw new ContainerException("Unable to set 404 on response after invalid resource path.", e); } } }
private HippoBean getBeanForResolvedSiteMapItem(ResolvedSiteMapItem resolvedSiteMapItem) { String base = getSiteContentBasePath(); String relPath = PathUtils.normalizePath(resolvedSiteMapItem.getRelativeContentPath()); if (relPath == null) { log.debug("Cannot return a content bean for relative path null for resolvedSitemapItem belonging to '{}'. Return null", resolvedSiteMapItem.getHstSiteMapItem().getId()); return null; } return getHippoBean(base, relPath); }
/** * Get the HST Site object from request. */ protected HstSite getHstSite(final HstRequest request){ return request.getRequestContext().getResolvedSiteMapItem().getHstSiteMapItem().getHstSiteMap().getSite(); }
public HstSiteMenusImpl(HstRequestContext hstRequestContext) { // find currently selected hstSiteMenuItemConfiguration's HstSiteMapItem selectedSiteMapItem = hstRequestContext.getResolvedSiteMapItem().getHstSiteMapItem(); HstSiteMenusConfiguration siteMenusConfiguration = selectedSiteMapItem.getHstSiteMap().getSite().getSiteMenusConfiguration(); if(siteMenusConfiguration != null) { for(HstSiteMenuConfiguration siteMenuConfiguration : siteMenusConfiguration.getSiteMenuConfigurations().values()) { HstSiteMenuImpl siteMenu = new HstSiteMenuImpl(this, siteMenuConfiguration, hstRequestContext); siteMenus.put(siteMenu.getName(), siteMenu); } } }
public HstSite getHstSite(HstRequest request){ return request.getRequestContext().getResolvedSiteMapItem().getHstSiteMapItem().getHstSiteMap().getSite(); }
public HstSite getHstSite(HstRequest request){ return request.getRequestContext().getResolvedSiteMapItem().getHstSiteMapItem().getHstSiteMap().getSite(); }
public HstSiteMenusImpl(HstRequestContext hstRequestContext) { if (hstRequestContext.getResolvedSiteMapItem() == null) { log.info("'{}' does not resolve to a siteMap item hence no siteMenus can be provided", hstRequestContext.getServletRequest()); return; } // find currently selected hstSiteMenuItemConfiguration's HstSiteMapItem selectedSiteMapItem = hstRequestContext.getResolvedSiteMapItem().getHstSiteMapItem(); HstSiteMenusConfiguration siteMenusConfiguration = selectedSiteMapItem.getHstSiteMap().getSite().getSiteMenusConfiguration(); if(siteMenusConfiguration != null) { for(HstSiteMenuConfiguration siteMenuConfiguration : siteMenusConfiguration.getSiteMenuConfigurations().values()) { HstSiteMenuImpl siteMenu = new HstSiteMenuImpl(this, siteMenuConfiguration, hstRequestContext); siteMenus.put(siteMenu.getName(), siteMenu); } } }
/** * @see {@link #getFacetNavigationBean(String, String, String)} with <code>absBasePath</code> as "/"+ requestContext.getSiteContentBasePath(); */ public static HippoFacetNavigationBean getFacetNavigationBean(String relPath, String query) throws HstComponentException { final HstRequestContext requestContext = RequestContextProvider.get(); if (requestContext == null) { throw new HstComponentException("Cannot call #getFacetNavigationBean without HstRequestContext"); } if(relPath == null) { log.warn("Cannot return a content bean for relative path null for resolvedSitemapItem belonging to '{}'. Return null", requestContext.getResolvedSiteMapItem().getHstSiteMapItem().getId()); return null; } String absBasePath = "/"+ requestContext.getSiteContentBasePath(); return getFacetNavigationBean(absBasePath, relPath, query); }
private boolean isSupportedScheme(final HstMutableRequestContext requestContext, final ResolvedSiteMapItem resolvedSiteMapItem, final String farthestRequestScheme) { if (requestContext.isCmsRequest()) { // cms request always supported as piggybacking on cms host return true; } final HstSiteMapItem hstSiteMapItem = resolvedSiteMapItem.getHstSiteMapItem(); if (hstSiteMapItem.isSchemeAgnostic()) { return true; } if (hstSiteMapItem.getScheme().equals(farthestRequestScheme)) { return true; } if ("https".equals(farthestRequestScheme) && resolvedSiteMapItem.getResolvedMount().getMount().getVirtualHost().isCustomHttpsSupported()) { // although sitemap item indicates http, https is approved by default to be rendered return true; } return false; }
private void finishMatchingPhase(final HstMutableRequestContext requestContext) { requestContext.matchingFinished(); if (!requestContext.isCmsRequest()) { return; } final HttpSession session = requestContext.getServletRequest().getSession(false); if (session == null) { return; } final ResolvedSiteMapItem resolvedSiteMapItem = requestContext.getResolvedSiteMapItem(); // we must not set the CMS_REQUEST_RENDERING_MOUNT_ID on the http session in case the resolved sitemap item // is a 'container resource' : A container resource always matches the root mount, and loading an image, css, js // etc file should not (re)set the CMS_REQUEST_RENDERING_MOUNT_ID as it will break in case of concurrent requests // for a submount if container resource requests are also involved if (resolvedSiteMapItem == null || !resolvedSiteMapItem.getHstSiteMapItem().isContainerResource()) { session.setAttribute(ContainerConstants.CMS_REQUEST_RENDERING_MOUNT_ID, requestContext.getResolvedMount().getMount().getIdentifier()); session.setAttribute(ContainerConstants.RENDERING_HOST, requestContext.getRenderHost()); } }
/** * Return a <code>HippoBean</code> when it can be found for the relativeContentPath for the <code>{@link ResolvedSiteMapItem}</code>. If there is no * relativeContentPath available in the <code>{@link ResolvedSiteMapItem}</code>, or when the relativeContentPath does not point to an existing jcr node, * <code>null</code> will be returned * @param request * @param resolvedSiteMapItem * @return A <code>HippoBean</code> or <code>null</code> when there cannot be created a content bean for this resolvedSiteMapItem */ public HippoBean getBeanForResolvedSiteMapItem(HstRequest request, ResolvedSiteMapItem resolvedSiteMapItem) { String base = getSiteContentBasePath(request); String relPath = PathUtils.normalizePath(resolvedSiteMapItem.getRelativeContentPath()); if(relPath == null) { log.debug("Cannot return a content bean for relative path null for resolvedSitemapItem belonging to '{}'. Return null", resolvedSiteMapItem.getHstSiteMapItem().getId()); return null; } try { if("".equals(relPath)) { return (HippoBean) getObjectBeanManager(request).getObject("/"+base); } else { return (HippoBean) getObjectBeanManager(request).getObject("/"+base+ "/" + relPath); } } catch (ObjectBeanManagerException e) { log.error("ObjectBeanManagerException. Return null : {}", e); } return null; }
/** * Find the default resource bundle ID array if available. Otherwise, return null. * @param requestContext * @return the default resource bundle ID array if available. Otherwise, return null */ protected String [] findResourceBundleIds(HstRequestContext requestContext) { String [] bundleIds = null; final ResolvedMount resolvedMount = requestContext.getResolvedMount(); final ChannelInfo channelInfo = (resolvedMount != null) ? resolvedMount.getMount().getChannelInfo() : null; if (channelInfo != null && channelInfo.getProperties().containsKey(HstNodeTypes.GENERAL_PROPERTY_DEFAULT_RESOURCE_BUNDLE_ID)) { bundleIds = StringUtils.split((String) channelInfo.getProperties().get(HstNodeTypes.GENERAL_PROPERTY_DEFAULT_RESOURCE_BUNDLE_ID), "\t\r\n, "); } else { if (requestContext.getResolvedSiteMapItem() != null) { bundleIds = requestContext.getResolvedSiteMapItem().getHstSiteMapItem().getResourceBundleIds(); } else if (resolvedMount != null) { bundleIds = resolvedMount.getMount().getDefaultResourceBundleIds(); } } return bundleIds; } }
/** * Read HTTP Response headers configuration from sitemapitem or mount and return those as a name-value paired map. * @param requestContext request context * @return a name-value paired map from HTTP Response headers configuration from sitemapitem or mount. */ private Map<String, String> getDefaultResponseHeaders(final HstRequestContext requestContext) { ResolvedSiteMapItem resolvedSiteMapItem = requestContext.getResolvedSiteMapItem(); if (resolvedSiteMapItem != null) { return resolvedSiteMapItem.getHstSiteMapItem().getResponseHeaders(); } else { ResolvedMount resolvedMount = requestContext.getResolvedMount(); if (resolvedMount != null) { return resolvedMount.getMount().getResponseHeaders(); } } return null; } }
/** * Return a <code>HippoBean</code> when it can be found for the relativeContentPath for the <code>{@link ResolvedSiteMapItem}</code>. If there is no * relativeContentPath available in the <code>{@link ResolvedSiteMapItem}</code>, or when the relativeContentPath does not point to an existing jcr node, * <code>null</code> will be returned * @param request * @param resolvedSiteMapItem * @return A <code>HippoBean</code> or <code>null</code> when there cannot be created a content bean for this resolvedSiteMapItem */ public HippoBean getBeanForResolvedSiteMapItem(HstRequest request, ResolvedSiteMapItem resolvedSiteMapItem) { final HstRequestContext requestContext = request.getRequestContext(); String base = requestContext.getSiteContentBasePath(); String relPath = PathUtils.normalizePath(resolvedSiteMapItem.getRelativeContentPath()); if(relPath == null) { log.debug("Cannot return a content bean for relative path null for resolvedSitemapItem belonging to '{}'. Return null", resolvedSiteMapItem.getHstSiteMapItem().getId()); return null; } try { if("".equals(relPath)) { return (HippoBean) requestContext.getObjectBeanManager().getObject("/"+base); } else { return (HippoBean) requestContext.getObjectBeanManager().getObject("/"+base+ "/" + relPath); } } catch (ObjectBeanManagerException e) { log.error("ObjectBeanManagerException. Return null : {}", e); } return null; }
protected Locale findPreferredLocale(HttpServletRequest request, HstRequestContext requestContext) { if (requestContext.getResolvedSiteMapItem() != null) { HstSiteMapItem siteMapItem = requestContext.getResolvedSiteMapItem().getHstSiteMapItem(); String localeString = siteMapItem.getLocale();
public static String getLinkType(final HstRequestContext requestContext, final HstLink siteLink) { final HstSiteMapItem siteMapItem = siteLink.getHstSiteMapItem(); if (siteMapItem == null) { return "external"; } final String linkType; if (siteMapItem.isContainerResource()) { linkType = "resource"; } else { final Mount linkMount = siteLink.getMount(); if (linkMount != null && linkMount != requestContext.getResolvedMount().getMount().getParent()) { // this is a cross mount link since does not belong to the parent mount of the PageModelApi mount return "external"; } final String linkApplicationId = siteMapItem.getApplicationId(); // although this is the resolved sitemap item for the PAGE_MODEL_PIPELINE_NAME, it should resolve // to exactly the same hst sitemap item configuration node as the parent mount, hence we can compare // the application id. If there is *no* application id set for both site map items, the link type is // internal. *If* the SpaSitePipeline is configured on site map item level, a site map item *MUST* // have an application id to have correct indication of 'internal/external'. final String currentApplicationId = requestContext.getResolvedSiteMapItem().getHstSiteMapItem().getApplicationId(); linkType = Objects.equals(linkApplicationId, currentApplicationId) ? "internal" : "external"; } return linkType; }
/** * Add links to the page model. * @param pageModel the aggregated page model instance */ private void addLinksToPageModel(IdentifiableLinkableMetadataBaseModel pageModel) { final HstRequestContext requestContext = RequestContextProvider.get(); final HstLinkCreator linkCreator = requestContext.getHstLinkCreator(); final HstSiteMapItem siteMapItem = requestContext.getResolvedSiteMapItem().getHstSiteMapItem(); final Mount selfMount = requestContext.getResolvedMount().getMount(); final HstLink selfLink = linkCreator.create(siteMapItem, selfMount); pageModel.putLink(ContainerConstants.LINK_NAME_SELF, new LinkModel(selfLink.toUrlForm(requestContext, true))); final Mount siteMount = selfMount.getParent(); if (siteMount != null) { final HstLink siteLink = linkCreator.create(siteMapItem, siteMount); pageModel.putLink(ContainerConstants.LINK_NAME_SITE, new LinkModel(siteLink.toUrlForm(requestContext, true))); } else { log.warn("Expected a 'PageModelPipeline' always to be nested below a parent site mount. This is not the " + "case for '{}'. Cannot add site links", selfMount); } }