/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.site.navigation.menu.web.internal.display.context; import com.liferay.item.selector.ItemSelector; import com.liferay.item.selector.ItemSelectorReturnType; import com.liferay.item.selector.criteria.UUIDItemSelectorReturnType; import com.liferay.layout.item.selector.criterion.LayoutItemSelectorCriterion; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.model.Layout; import com.liferay.portal.kernel.module.configuration.ConfigurationException; import com.liferay.portal.kernel.portlet.RequestBackedPortletURLFactoryUtil; import com.liferay.portal.kernel.service.LayoutLocalServiceUtil; import com.liferay.portal.kernel.theme.PortletDisplay; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.HtmlUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portlet.display.template.PortletDisplayTemplate; import com.liferay.site.navigation.menu.web.configuration.SiteNavigationMenuPortletInstanceConfiguration; import com.liferay.site.navigation.menu.web.internal.constants.SiteNavigationMenuWebKeys; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; import javax.portlet.PortletURL; import javax.servlet.http.HttpServletRequest; /** * @author Juergen Kappler */ public class SiteNavigationMenuDisplayContext { public SiteNavigationMenuDisplayContext(HttpServletRequest request) throws ConfigurationException { _request = request; ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute( WebKeys.THEME_DISPLAY); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); _siteNavigationMenuPortletInstanceConfiguration = portletDisplay.getPortletInstanceConfiguration( SiteNavigationMenuPortletInstanceConfiguration.class); } public String getDDMTemplateKey() { if (_ddmTemplateKey != null) { return _ddmTemplateKey; } String displayStyle = getDisplayStyle(); if (displayStyle != null) { PortletDisplayTemplate portletDisplayTemplate = (PortletDisplayTemplate)_request.getAttribute( WebKeys.PORTLET_DISPLAY_TEMPLATE); _ddmTemplateKey = portletDisplayTemplate.getDDMTemplateKey( displayStyle); } return _ddmTemplateKey; } public int getDisplayDepth() { if (_displayDepth != -1) { return _displayDepth; } _displayDepth = ParamUtil.getInteger( _request, "displayDepth", _siteNavigationMenuPortletInstanceConfiguration.displayDepth()); return _displayDepth; } public String getDisplayStyle() { if (_displayStyle != null) { return _displayStyle; } _displayStyle = ParamUtil.getString( _request, "displayStyle", _siteNavigationMenuPortletInstanceConfiguration.displayStyle()); return _displayStyle; } public long getDisplayStyleGroupId() { if (_displayStyleGroupId != 0) { return _displayStyleGroupId; } _displayStyleGroupId = ParamUtil.getLong( _request, "displayStyleGroupId", _siteNavigationMenuPortletInstanceConfiguration. displayStyleGroupId()); if (_displayStyleGroupId <= 0) { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); _displayStyleGroupId = themeDisplay.getSiteGroupId(); } return _displayStyleGroupId; } public String getEventName() { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); return portletDisplay.getNamespace() + "selectLayout"; } public String getIncludedLayouts() { if (_includedLayouts != null) { return _includedLayouts; } _includedLayouts = ParamUtil.getString( _request, "includedLayouts", _siteNavigationMenuPortletInstanceConfiguration.includedLayouts()); return _includedLayouts; } public String getItemSelectorURL() { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); ItemSelector itemSelector = (ItemSelector)_request.getAttribute( SiteNavigationMenuWebKeys.ITEM_SELECTOR); LayoutItemSelectorCriterion layoutItemSelectorCriterion = new LayoutItemSelectorCriterion(); Layout layout = themeDisplay.getLayout(); layoutItemSelectorCriterion.setCheckDisplayPage(false); layoutItemSelectorCriterion.setEnableCurrentPage(true); layoutItemSelectorCriterion.setShowPrivatePages( layout.isPrivateLayout()); layoutItemSelectorCriterion.setShowPublicPages(layout.isPublicLayout()); List<ItemSelectorReturnType> desiredItemSelectorReturnTypes = new ArrayList<>(); desiredItemSelectorReturnTypes.add(new UUIDItemSelectorReturnType()); layoutItemSelectorCriterion.setDesiredItemSelectorReturnTypes( desiredItemSelectorReturnTypes); PortletURL itemSelectorURL = itemSelector.getItemSelectorURL( RequestBackedPortletURLFactoryUtil.create(_request), getEventName(), layoutItemSelectorCriterion); itemSelectorURL.setParameter("layoutUuid", getRootLayoutUuid()); return itemSelectorURL.toString(); } public String getLayoutBreadcrumb(Layout layout) throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); Locale locale = themeDisplay.getLocale(); List<Layout> ancestors = layout.getAncestors(); StringBundler sb = new StringBundler(4 * ancestors.size() + 5); if (layout.isPrivateLayout()) { sb.append(LanguageUtil.get(_request, "private-pages")); } else { sb.append(LanguageUtil.get(_request, "public-pages")); } sb.append(StringPool.SPACE); sb.append(StringPool.GREATER_THAN); sb.append(StringPool.SPACE); Collections.reverse(ancestors); for (Layout ancestor : ancestors) { sb.append(HtmlUtil.escape(ancestor.getName(locale))); sb.append(StringPool.SPACE); sb.append(StringPool.GREATER_THAN); sb.append(StringPool.SPACE); } sb.append(HtmlUtil.escape(layout.getName(locale))); return sb.toString(); } public int getRootLayoutLevel() { if (_rootLayoutLevel != null) { return _rootLayoutLevel; } _rootLayoutLevel = ParamUtil.getInteger( _request, "rootLayoutLevel", _siteNavigationMenuPortletInstanceConfiguration.rootLayoutLevel()); return _rootLayoutLevel; } public String getRootLayoutName() throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); Layout layout = themeDisplay.getLayout(); Layout rootLayout = LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId( getRootLayoutUuid(), themeDisplay.getScopeGroupId(), layout.isPrivateLayout()); if (rootLayout == null) { return StringPool.BLANK; } return getLayoutBreadcrumb(rootLayout); } public String getRootLayoutType() { if (_rootLayoutType != null) { return _rootLayoutType; } _rootLayoutType = ParamUtil.getString( _request, "rootLayoutType", _siteNavigationMenuPortletInstanceConfiguration.rootLayoutType()); return _rootLayoutType; } public String getRootLayoutUuid() { if (_rootLayoutUuid != null) { return _rootLayoutUuid; } _rootLayoutUuid = ParamUtil.getString( _request, "rootLayoutUuid", _siteNavigationMenuPortletInstanceConfiguration.rootLayoutUuid()); return _rootLayoutUuid; } public boolean isPreview() { if (_preview != null) { return _preview; } _preview = ParamUtil.getBoolean( _request, "preview", _siteNavigationMenuPortletInstanceConfiguration.preview()); return _preview; } private String _ddmTemplateKey; private int _displayDepth = -1; private String _displayStyle; private long _displayStyleGroupId; private String _includedLayouts; private Boolean _preview; private final HttpServletRequest _request; private Integer _rootLayoutLevel; private String _rootLayoutType; private String _rootLayoutUuid; private final SiteNavigationMenuPortletInstanceConfiguration _siteNavigationMenuPortletInstanceConfiguration; }