/** * 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.layout.type.controller.link.to.page.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.layout.type.controller.link.to.page.internal.constants.LinkToPageLayoutTypeControllerWebKeys; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.model.Layout; import com.liferay.portal.kernel.portlet.LiferayPortletRequest; import com.liferay.portal.kernel.portlet.LiferayPortletResponse; import com.liferay.portal.kernel.portlet.RequestBackedPortletURLFactoryUtil; import com.liferay.portal.kernel.service.LayoutLocalServiceUtil; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.HtmlUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.WebKeys; 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 Pavel Savinov */ public class LinkToPageLayoutTypeControllerDisplayContext { public LinkToPageLayoutTypeControllerDisplayContext( LiferayPortletRequest liferayPortletRequest, LiferayPortletResponse liferayPortletResponse) { _liferayPortletRequest = liferayPortletRequest; _liferayPortletResponse = liferayPortletResponse; _setSelectedLayout(); } public String getEventName() { String eventName = _liferayPortletResponse.getNamespace() + "selectLinkToPage"; return eventName; } public String getItemSelectorURL() throws Exception { ItemSelector itemSelector = (ItemSelector)_liferayPortletRequest.getAttribute( LinkToPageLayoutTypeControllerWebKeys.ITEM_SELECTOR); LayoutItemSelectorCriterion layoutItemSelectorCriterion = new LayoutItemSelectorCriterion(); layoutItemSelectorCriterion.setCheckDisplayPage(false); layoutItemSelectorCriterion.setEnableCurrentPage(false); long selPlid = ParamUtil.getLong(_liferayPortletRequest, "selPlid"); boolean privateLayout = ParamUtil.getBoolean( _liferayPortletRequest, "privateLayout"); layoutItemSelectorCriterion.setShowPrivatePages(privateLayout); layoutItemSelectorCriterion.setShowPublicPages(!privateLayout); List<ItemSelectorReturnType> desiredItemSelectorReturnTypes = new ArrayList<>(); desiredItemSelectorReturnTypes.add(new UUIDItemSelectorReturnType()); layoutItemSelectorCriterion.setDesiredItemSelectorReturnTypes( desiredItemSelectorReturnTypes); PortletURL itemSelectorURL = itemSelector.getItemSelectorURL( RequestBackedPortletURLFactoryUtil.create(_liferayPortletRequest), getEventName(), layoutItemSelectorCriterion); itemSelectorURL.setParameter("layoutUuid", getLinkToLayoutUuid()); itemSelectorURL.setParameter("selPlid", String.valueOf(selPlid)); return itemSelectorURL.toString(); } public String getLayoutBreadcrumb(Layout layout) throws Exception { HttpServletRequest request = PortalUtil.getHttpServletRequest( _liferayPortletRequest); 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 String getLinkToLayoutName() throws Exception { if (_selectedLayout != null) { return getLayoutBreadcrumb(_selectedLayout); } return StringPool.BLANK; } public String getLinkToLayoutUuid() { if (_selectedLayout != null) { return _selectedLayout.getUuid(); } return ParamUtil.getString(_liferayPortletRequest, "layoutUuid"); } private void _setSelectedLayout() { Layout layout = (Layout)_liferayPortletRequest.getAttribute( WebKeys.SEL_LAYOUT); if (layout != null) { long linkToLayoutId = GetterUtil.getLong( layout.getTypeSettingsProperty("linkToLayoutId")); _selectedLayout = LayoutLocalServiceUtil.fetchLayout( layout.getGroupId(), layout.isPrivateLayout(), linkToLayoutId); } } private final LiferayPortletRequest _liferayPortletRequest; private final LiferayPortletResponse _liferayPortletResponse; private Layout _selectedLayout; }