/** * 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.asset.browser.web.internal.display.context; import com.liferay.asset.browser.web.internal.configuration.AssetBrowserWebConfigurationValues; import com.liferay.asset.browser.web.internal.constants.AssetBrowserPortletKeys; import com.liferay.asset.browser.web.internal.search.AssetBrowserSearch; import com.liferay.asset.kernel.AssetRendererFactoryRegistryUtil; import com.liferay.asset.kernel.model.AssetEntry; import com.liferay.asset.kernel.model.AssetRendererFactory; import com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil; import com.liferay.frontend.taglib.servlet.taglib.ManagementBarFilterItem; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.portlet.LiferayPortletRequest; import com.liferay.portal.kernel.portlet.LiferayPortletResponse; import com.liferay.portal.kernel.portlet.PortalPreferences; import com.liferay.portal.kernel.portlet.PortletPreferencesFactoryUtil; import com.liferay.portal.kernel.search.DocumentImpl; import com.liferay.portal.kernel.search.Field; import com.liferay.portal.kernel.search.Hits; import com.liferay.portal.kernel.search.Sort; import com.liferay.portal.kernel.service.GroupLocalServiceUtil; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.kernel.util.HtmlUtil; import com.liferay.portal.kernel.util.HttpUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portlet.asset.util.AssetUtil; import java.util.ArrayList; import java.util.List; import java.util.Objects; import javax.portlet.PortletURL; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.servlet.http.HttpServletRequest; /** * @author Eudaldo Alonso */ public class AssetBrowserDisplayContext { public AssetBrowserDisplayContext( RenderRequest renderRequest, RenderResponse renderResponse) { _request = PortalUtil.getHttpServletRequest(renderRequest); _renderRequest = renderRequest; _renderResponse = renderResponse; } public String getAddButtonLabel() { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); AssetRendererFactory assetRendererFactory = getAssetRendererFactory(); if (assetRendererFactory.isSupportsClassTypes() && (getSubtypeSelectionId() > 0)) { return assetRendererFactory.getTypeName( themeDisplay.getLocale(), getSubtypeSelectionId()); } return assetRendererFactory.getTypeName(themeDisplay.getLocale()); } public String getAddButtonURL() throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); long groupId = getGroupId(); if (groupId == 0) { groupId = themeDisplay.getScopeGroupId(); } LiferayPortletRequest liferayPortletRequest = PortalUtil.getLiferayPortletRequest(_renderRequest); LiferayPortletResponse liferayPortletResponse = PortalUtil.getLiferayPortletResponse(_renderResponse); AssetRendererFactory assetRendererFactory = getAssetRendererFactory(); PortletURL addPortletURL = null; if (assetRendererFactory.isSupportsClassTypes() && (getSubtypeSelectionId() > 0)) { addPortletURL = AssetUtil.getAddPortletURL( liferayPortletRequest, liferayPortletResponse, groupId, getTypeSelection(), getSubtypeSelectionId(), null, null, getPortletURL().toString()); } else { addPortletURL = AssetUtil.getAddPortletURL( liferayPortletRequest, liferayPortletResponse, groupId, getTypeSelection(), 0, null, null, getPortletURL().toString()); } if (addPortletURL == null) { return StringPool.BLANK; } addPortletURL.setParameter("groupId", String.valueOf(groupId)); return HttpUtil.addParameter( addPortletURL.toString(), "refererPlid", themeDisplay.getPlid()); } public AssetBrowserSearch getAssetBrowserSearch() throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); AssetBrowserSearch assetBrowserSearch = new AssetBrowserSearch( _renderRequest, getPortletURL()); if (Validator.isNull(getKeywords())) { if (Validator.isNotNull(getAddButtonURL())) { assetBrowserSearch.setEmptyResultsMessageCssClass( "taglib-empty-result-message-header-has-plus-btn"); } } else { assetBrowserSearch.setSearch(true); } AssetRendererFactory assetRendererFactory = getAssetRendererFactory(); int total = getTotal(); assetBrowserSearch.setTotal(total); if (AssetBrowserWebConfigurationValues.SEARCH_WITH_DATABASE) { List<AssetEntry> assetEntries = AssetEntryLocalServiceUtil.getEntries( getFilterGroupIds(), new long[] {assetRendererFactory.getClassNameId()}, getKeywords(), getKeywords(), getKeywords(), getKeywords(), getListable(), false, false, assetBrowserSearch.getStart(), assetBrowserSearch.getEnd(), "modifiedDate", StringPool.BLANK, getOrderByType(), StringPool.BLANK); assetBrowserSearch.setResults(assetEntries); } else { Sort sort = null; boolean orderByAsc = false; if (Objects.equals(getOrderByType(), "asc")) { orderByAsc = true; } if (Objects.equals(getOrderByCol(), "modified-date")) { sort = new Sort( Field.MODIFIED_DATE, Sort.LONG_TYPE, orderByAsc); } else if (Objects.equals(getOrderByCol(), "title")) { String sortFieldName = DocumentImpl.getSortableFieldName( "localized_title_".concat(themeDisplay.getLanguageId())); sort = new Sort(sortFieldName, Sort.STRING_TYPE, orderByAsc); } Hits hits = AssetEntryLocalServiceUtil.search( themeDisplay.getCompanyId(), getFilterGroupIds(), themeDisplay.getUserId(), assetRendererFactory.getClassName(), getSubtypeSelectionId(), getKeywords(), isShowNonindexable(), getStatuses(), assetBrowserSearch.getStart(), assetBrowserSearch.getEnd(), sort); List<AssetEntry> assetEntries = AssetUtil.getAssetEntries(hits); assetBrowserSearch.setResults(assetEntries); } return assetBrowserSearch; } public AssetRendererFactory getAssetRendererFactory() { if (_assetRendererFactory != null) { return _assetRendererFactory; } _assetRendererFactory = AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName( getTypeSelection()); return _assetRendererFactory; } public String getDisplayStyle() { if (Validator.isNotNull(_displayStyle)) { return _displayStyle; } PortalPreferences portalPreferences = PortletPreferencesFactoryUtil.getPortalPreferences(_request); _displayStyle = portalPreferences.getValue( AssetBrowserPortletKeys.ASSET_BROWSER, "display-style", "list"); return _displayStyle; } public String getEventName() { if (_eventName != null) { return _eventName; } _eventName = ParamUtil.getString( _request, "eventName", _renderResponse.getNamespace() + "selectAsset"); return _eventName; } public long[] getFilterGroupIds() { long[] filterGroupIds = getSelectedGroupIds(); if (getGroupId() > 0) { filterGroupIds = new long[] {getGroupId()}; } return filterGroupIds; } public long getGroupId() { if (_groupId != null) { return _groupId; } _groupId = ParamUtil.getLong(_request, "groupId"); return _groupId; } public String getKeywords() { if (_keywords != null) { return _keywords; } _keywords = ParamUtil.getString(_request, "keywords"); return _keywords; } public Boolean getListable() { Boolean listable = null; String listableValue = ParamUtil.getString(_request, "listable", null); if (Validator.isNotNull(listableValue)) { listable = ParamUtil.getBoolean(_request, "listable", true); } return listable; } public List<ManagementBarFilterItem> getManagementBarFilterItem() throws PortalException { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); List<ManagementBarFilterItem> managementBarFilterItems = new ArrayList<>(); long[] selectedGroupIds = ArrayUtil.append( new long[] {0}, getSelectedGroupIds()); for (long curGroupId : selectedGroupIds) { Group curGroup = GroupLocalServiceUtil.fetchGroup(curGroupId); if ((curGroup == null) && (curGroupId > 0)) { continue; } boolean active = false; if (getGroupId() == curGroupId) { active = true; } String label = StringPool.BLANK; if (curGroup != null) { label = HtmlUtil.escape( curGroup.getDescriptiveName(themeDisplay.getLocale())); } else { label = LanguageUtil.get(_request, "all"); } PortletURL groupURL = getPortletURL(); groupURL.setParameter("groupId", String.valueOf(curGroupId)); ManagementBarFilterItem managementBarFilterItem = new ManagementBarFilterItem(active, label, groupURL.toString()); managementBarFilterItems.add(managementBarFilterItem); } return managementBarFilterItems; } public String getManagementBarFilterLabel() throws PortalException { if (getGroupId() <= 0) { return LanguageUtil.get(_request, "all"); } ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); Group group = GroupLocalServiceUtil.fetchGroup(getGroupId()); return HtmlUtil.escape( group.getDescriptiveName(themeDisplay.getLocale())); } public String getOrderByCol() { if (Validator.isNotNull(_orderByCol)) { return _orderByCol; } _orderByCol = ParamUtil.getString( _request, "orderByCol", "modified-date"); return _orderByCol; } public String getOrderByType() { if (Validator.isNotNull(_orderByType)) { return _orderByType; } _orderByType = ParamUtil.getString(_request, "orderByType", "asc"); return _orderByType; } public String[] getOrderColumns() { if (AssetBrowserWebConfigurationValues.SEARCH_WITH_DATABASE) { return new String[] {"modified-date"}; } return new String[] {"modified-date", "title"}; } public PortletURL getPortletURL() { PortletURL portletURL = _renderResponse.createRenderURL(); portletURL.setParameter("groupId", String.valueOf(getGroupId())); portletURL.setParameter( "selectedGroupIds", StringUtil.merge(getSelectedGroupIds())); portletURL.setParameter( "refererAssetEntryId", String.valueOf(getRefererAssetEntryId())); portletURL.setParameter("typeSelection", getTypeSelection()); portletURL.setParameter( "subtypeSelectionId", String.valueOf(getSubtypeSelectionId())); portletURL.setParameter( "showNonindexable", String.valueOf(isShowNonindexable())); portletURL.setParameter( "showScheduled", String.valueOf(isShowScheduled())); if (getListable() != null) { portletURL.setParameter("listable", String.valueOf(getListable())); } portletURL.setParameter("eventName", getEventName()); return portletURL; } public long getRefererAssetEntryId() { if (_refererAssetEntryId != null) { return _refererAssetEntryId; } _refererAssetEntryId = ParamUtil.getLong( _request, "refererAssetEntryId"); return _refererAssetEntryId; } public long[] getSelectedGroupIds() { long[] selectedGroupIds = StringUtil.split( ParamUtil.getString(_request, "selectedGroupIds"), 0L); return selectedGroupIds; } public int[] getStatuses() { int[] statuses = {WorkflowConstants.STATUS_APPROVED}; if (isShowScheduled()) { statuses = new int[] { WorkflowConstants.STATUS_APPROVED, WorkflowConstants.STATUS_SCHEDULED }; } return statuses; } public long getSubtypeSelectionId() { if (_subtypeSelectionId != null) { return _subtypeSelectionId; } _subtypeSelectionId = ParamUtil.getLong(_request, "subtypeSelectionId"); return _subtypeSelectionId; } public int getTotal() { return getTotal(getFilterGroupIds()); } public int getTotal(long[] groupIds) { ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute( WebKeys.THEME_DISPLAY); AssetRendererFactory assetRendererFactory = getAssetRendererFactory(); int total = 0; if (AssetBrowserWebConfigurationValues.SEARCH_WITH_DATABASE) { total = AssetEntryLocalServiceUtil.getEntriesCount( groupIds, new long[] {assetRendererFactory.getClassNameId()}, getKeywords(), getKeywords(), getKeywords(), getKeywords(), getListable(), false, false); } else { total = (int)AssetEntryLocalServiceUtil.searchCount( themeDisplay.getCompanyId(), groupIds, themeDisplay.getUserId(), assetRendererFactory.getClassName(), getSubtypeSelectionId(), getKeywords(), isShowNonindexable(), getStatuses()); } return total; } public String getTypeSelection() { if (_typeSelection != null) { return _typeSelection; } _typeSelection = ParamUtil.getString(_request, "typeSelection"); return _typeSelection; } public boolean isDisabledManagementBar() { if (getTotal(getSelectedGroupIds()) > 0) { return false; } if (Validator.isNotNull(getKeywords())) { return false; } return true; } public boolean isShowNonindexable() { if (_showNonindexable != null) { return _showNonindexable; } _showNonindexable = ParamUtil.getBoolean(_request, "showNonindexable"); return _showNonindexable; } public boolean isShowScheduled() { if (_showScheduled != null) { return _showScheduled; } _showScheduled = ParamUtil.getBoolean(_request, "showScheduled"); return _showScheduled; } private AssetRendererFactory _assetRendererFactory; private String _displayStyle; private String _eventName; private Long _groupId; private String _keywords; private String _orderByCol; private String _orderByType; private Long _refererAssetEntryId; private final RenderRequest _renderRequest; private final RenderResponse _renderResponse; private final HttpServletRequest _request; private Boolean _showNonindexable; private Boolean _showScheduled; private Long _subtypeSelectionId; private String _typeSelection; }