/** * 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.journal.content.web.internal.display.context; import com.liferay.asset.kernel.AssetRendererFactoryRegistryUtil; import com.liferay.asset.kernel.model.AssetEntry; import com.liferay.asset.kernel.model.AssetRenderer; import com.liferay.asset.kernel.model.AssetRendererFactory; import com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil; import com.liferay.asset.kernel.service.AssetEntryServiceUtil; import com.liferay.dynamic.data.mapping.model.DDMStructure; import com.liferay.dynamic.data.mapping.model.DDMTemplate; import com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil; import com.liferay.dynamic.data.mapping.service.DDMTemplateLocalServiceUtil; import com.liferay.dynamic.data.mapping.service.permission.DDMTemplatePermission; import com.liferay.journal.constants.JournalPortletKeys; import com.liferay.journal.constants.JournalWebKeys; import com.liferay.journal.content.asset.addon.entry.common.ContentMetadataAssetAddonEntry; import com.liferay.journal.content.asset.addon.entry.common.ContentMetadataAssetAddonEntryTracker; import com.liferay.journal.content.asset.addon.entry.common.UserToolAssetAddonEntry; import com.liferay.journal.content.asset.addon.entry.common.UserToolAssetAddonEntryTracker; import com.liferay.journal.content.web.configuration.JournalContentPortletInstanceConfiguration; import com.liferay.journal.content.web.constants.JournalContentPortletKeys; import com.liferay.journal.model.JournalArticle; import com.liferay.journal.model.JournalArticleDisplay; import com.liferay.journal.service.JournalArticleLocalServiceUtil; import com.liferay.journal.service.permission.JournalArticlePermission; import com.liferay.journal.service.permission.JournalPermission; import com.liferay.journal.util.JournalContent; import com.liferay.journal.web.asset.JournalArticleAssetRenderer; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.portlet.LiferayPortletRequest; import com.liferay.portal.kernel.portlet.LiferayWindowState; import com.liferay.portal.kernel.portlet.PortletProvider; import com.liferay.portal.kernel.portlet.PortletProviderUtil; import com.liferay.portal.kernel.portlet.PortletRequestModel; import com.liferay.portal.kernel.portlet.PortletURLFactoryUtil; import com.liferay.portal.kernel.security.permission.ActionKeys; import com.liferay.portal.kernel.service.permission.PortletPermissionUtil; import com.liferay.portal.kernel.servlet.taglib.ui.AssetAddonEntry; import com.liferay.portal.kernel.theme.PortletDisplay; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.trash.TrashActionKeys; import com.liferay.portal.kernel.trash.TrashHandler; import com.liferay.portal.kernel.trash.TrashHandlerRegistryUtil; import com.liferay.portal.kernel.util.Constants; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.ListUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.PredicateFilter; 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.portal.util.PropsValues; import com.liferay.trash.kernel.model.TrashEntry; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Objects; import javax.portlet.PortletMode; import javax.portlet.PortletPreferences; import javax.portlet.PortletRequest; import javax.portlet.PortletResponse; import javax.portlet.PortletURL; import javax.portlet.RenderResponse; /** * @author Eudaldo Alonso */ public class JournalContentDisplayContext { public static JournalContentDisplayContext create( PortletRequest portletRequest, PortletResponse portletResponse, PortletDisplay portletDisplay, long ddmStructureClassNameId) throws PortalException { JournalContentDisplayContext journalContentDisplayContext = (JournalContentDisplayContext)portletRequest.getAttribute( JournalContentDisplayContext.class.getName()); if (journalContentDisplayContext == null) { JournalContentPortletInstanceConfiguration journalContentPortletInstanceConfiguration = portletDisplay.getPortletInstanceConfiguration( JournalContentPortletInstanceConfiguration.class); journalContentDisplayContext = new JournalContentDisplayContext( portletRequest, portletResponse, journalContentPortletInstanceConfiguration, ddmStructureClassNameId); portletRequest.setAttribute( JournalContentDisplayContext.class.getName(), journalContentDisplayContext); } return journalContentDisplayContext; } public void clearCache() throws PortalException { String articleId = getArticleId(); if (Validator.isNotNull(articleId)) { JournalContent journalContent = (JournalContent)_portletRequest.getAttribute( JournalWebKeys.JOURNAL_CONTENT); journalContent.clearCache( getArticleGroupId(), getArticleId(), getDDMTemplateKey()); } } public JournalArticle getArticle() { if (_article != null) { return _article; } _article = (JournalArticle)_portletRequest.getAttribute( WebKeys.JOURNAL_ARTICLE); if (_article != null) { return _article; } long articleResourcePrimKey = ParamUtil.getLong( _portletRequest, "articleResourcePrimKey"); if (articleResourcePrimKey > 0) { _article = JournalArticleLocalServiceUtil.fetchLatestArticle( articleResourcePrimKey, WorkflowConstants.STATUS_ANY, true); } else { _article = JournalArticleLocalServiceUtil.fetchLatestArticle( getArticleGroupId(), getArticleId(), WorkflowConstants.STATUS_ANY); } return _article; } public JournalArticleDisplay getArticleDisplay() { if (_articleDisplay != null) { return _articleDisplay; } _articleDisplay = (JournalArticleDisplay)_portletRequest.getAttribute( WebKeys.JOURNAL_ARTICLE_DISPLAY); if (_articleDisplay != null) { return _articleDisplay; } JournalArticle article = getArticle(); if (article == null) { return null; } ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); if (article.isApproved()) { JournalContent journalContent = (JournalContent)_portletRequest.getAttribute( JournalWebKeys.JOURNAL_CONTENT); _articleDisplay = journalContent.getDisplay( article.getGroupId(), article.getArticleId(), article.getVersion(), null, null, themeDisplay.getLanguageId(), 1, new PortletRequestModel(_portletRequest, _portletResponse), themeDisplay); } else { try { _articleDisplay = JournalArticleLocalServiceUtil.getArticleDisplay( article, null, null, themeDisplay.getLanguageId(), 1, new PortletRequestModel( _portletRequest, _portletResponse), themeDisplay); } catch (PortalException pe) { _log.error(pe, pe); } } return _articleDisplay; } public long getArticleGroupId() { if (_articleGroupId != null) { return _articleGroupId; } _articleGroupId = ParamUtil.getLong( _portletRequest, "groupId", _journalContentPortletInstanceConfiguration.groupId()); if (_articleGroupId <= 0) { ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); _articleGroupId = themeDisplay.getScopeGroupId(); } return _articleGroupId; } public String getArticleId() { if (_articleId != null) { return _articleId; } _articleId = ParamUtil.getString( _portletRequest, "articleId", _journalContentPortletInstanceConfiguration.articleId()); return _articleId; } public long getAssetEntryId() { JournalArticle article = getArticle(); if (article == null) { return 0; } long classPK = JournalArticleAssetRenderer.getClassPK(article); AssetEntry assetEntry = AssetEntryLocalServiceUtil.fetchEntry( JournalArticle.class.getName(), classPK); return assetEntry.getEntryId(); } public AssetRenderer<JournalArticle> getAssetRenderer() throws PortalException { JournalArticle article = getArticle(); if (article == null) { return null; } AssetRendererFactory<JournalArticle> assetRendererFactory = AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClass( JournalArticle.class); if (assetRendererFactory == null) { return null; } return assetRendererFactory.getAssetRenderer( JournalArticleAssetRenderer.getClassPK(article)); } public DDMStructure getDDMStructure() throws PortalException { JournalArticle article = getArticle(); if (article == null) { return null; } return article.getDDMStructure(); } public DDMTemplate getDDMTemplate() { if (_ddmTemplate != null) { return _ddmTemplate; } _ddmTemplate = _getDDMTemplate(getDDMTemplateKey()); return _ddmTemplate; } public String getDDMTemplateKey() { if (_ddmTemplateKey != null) { return _ddmTemplateKey; } _ddmTemplateKey = ParamUtil.getString( _portletRequest, "ddmTemplateKey", _journalContentPortletInstanceConfiguration.ddmTemplateKey()); if (Validator.isNotNull(_ddmTemplateKey)) { return _ddmTemplateKey; } JournalArticle article = getArticle(); if (article != null) { _ddmTemplateKey = article.getDDMTemplateKey(); } return _ddmTemplateKey; } public List<DDMTemplate> getDDMTemplates() { if (_ddmTemplates != null) { return _ddmTemplates; } JournalArticle article = getArticle(); if (article == null) { return Collections.emptyList(); } try { DDMStructure ddmStructure = DDMStructureLocalServiceUtil.fetchStructure( article.getGroupId(), PortalUtil.getClassNameId(JournalArticle.class), article.getDDMStructureKey(), true); _ddmTemplates = DDMTemplateLocalServiceUtil.getTemplates( article.getGroupId(), PortalUtil.getClassNameId(DDMStructure.class), ddmStructure.getStructureId(), true); } catch (PortalException pe) { _log.error( "Unable to get DDM temmplate for article " + article.getId(), pe); } return _ddmTemplates; } public DDMTemplate getDefaultDDMTemplate() { if (_defaultDDMTemplate != null) { return _defaultDDMTemplate; } JournalArticle article = getArticle(); _defaultDDMTemplate = _getDDMTemplate(article.getDDMTemplateKey()); return _defaultDDMTemplate; } public List<ContentMetadataAssetAddonEntry> getEnabledContentMetadataAssetAddonEntries() { List<ContentMetadataAssetAddonEntry> contentMetadataAssetAddonEntries = ListUtil.filter( ContentMetadataAssetAddonEntryTracker. getContentMetadataAssetAddonEntries(), new PredicateFilter<ContentMetadataAssetAddonEntry>() { @Override public boolean filter( ContentMetadataAssetAddonEntry contentMetadataAssetAddonEntry) { return contentMetadataAssetAddonEntry.isEnabled(); } }); return ListUtil.sort( contentMetadataAssetAddonEntries, _assetAddonEntryComparator); } public List<UserToolAssetAddonEntry> getEnabledUserToolAssetAddonEntries() { List<UserToolAssetAddonEntry> userToolAssetAddonEntries = ListUtil.filter( UserToolAssetAddonEntryTracker.getUserToolAssetAddonEntries(), new PredicateFilter<UserToolAssetAddonEntry>() { @Override public boolean filter( UserToolAssetAddonEntry userToolAssetAddonEntry) { return userToolAssetAddonEntry.isEnabled(); } }); return ListUtil.sort( userToolAssetAddonEntries, _assetAddonEntryComparator); } public long getGroupId() { ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); long groupId = themeDisplay.getScopeGroupId(); Group scopeGroup = themeDisplay.getScopeGroup(); if (!scopeGroup.isStaged() || !scopeGroup.isInStagingPortlet(JournalPortletKeys.JOURNAL)) { groupId = scopeGroup.getLiveGroupId(); } return groupId; } public JournalArticle getLatestArticle() { if (_latestArticle != null) { return _latestArticle; } JournalArticleDisplay articleDisplay = getArticleDisplay(); if (articleDisplay == null) { return null; } _latestArticle = JournalArticleLocalServiceUtil.fetchLatestArticle( articleDisplay.getGroupId(), articleDisplay.getArticleId(), WorkflowConstants.STATUS_ANY); return _latestArticle; } public String getPortletResource() { if (_portletResource != null) { return _portletResource; } _portletResource = ParamUtil.getString( _portletRequest, "portletResource"); return _portletResource; } public JournalArticle getSelectedArticle() throws PortalException { PortletPreferences portletPreferences = _portletRequest.getPreferences(); long assetEntryId = GetterUtil.getLong( portletPreferences.getValue("assetEntryId", StringPool.BLANK)); AssetEntry assetEntry = AssetEntryLocalServiceUtil.fetchAssetEntry( assetEntryId); if (assetEntry == null) { return null; } return JournalArticleLocalServiceUtil.fetchLatestArticle( assetEntry.getClassPK()); } public List<ContentMetadataAssetAddonEntry> getSelectedContentMetadataAssetAddonEntries() { if (_contentMetadataAssetAddonEntries != null) { return _contentMetadataAssetAddonEntries; } _contentMetadataAssetAddonEntries = new ArrayList<>(); String contentMetadataAssetAddonEntryKeysKeysString = _journalContentPortletInstanceConfiguration. contentMetadataAssetAddonEntryKeys(); if (Validator.isNull(contentMetadataAssetAddonEntryKeysKeysString)) { return _contentMetadataAssetAddonEntries; } String[] contentMetadataAssetAddonEntryKeys = StringUtil.split( contentMetadataAssetAddonEntryKeysKeysString); for (String contentMetadataAssetAddonEntryKey : contentMetadataAssetAddonEntryKeys) { ContentMetadataAssetAddonEntry contentMetadataAssetAddonEntry = ContentMetadataAssetAddonEntryTracker. getContentMetadataAssetAddonEntry( contentMetadataAssetAddonEntryKey); if (contentMetadataAssetAddonEntry != null) { _contentMetadataAssetAddonEntries.add( contentMetadataAssetAddonEntry); } } _portletRequest.setAttribute(WebKeys.JOURNAL_ARTICLE, getArticle()); _portletRequest.setAttribute( WebKeys.JOURNAL_ARTICLE_DISPLAY, getArticleDisplay()); return _contentMetadataAssetAddonEntries; } public long[] getSelectedGroupIds() throws PortalException { ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); Group scopeGroup = themeDisplay.getScopeGroup(); if (scopeGroup.isStagingGroup() && !scopeGroup.isInStagingPortlet(JournalPortletKeys.JOURNAL)) { return new long[] {scopeGroup.getLiveGroupId()}; } if (themeDisplay.getScopeGroupId() == themeDisplay.getSiteGroupId()) { return PortalUtil.getSharedContentSiteGroupIds( themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(), themeDisplay.getUserId()); } return new long[] {themeDisplay.getScopeGroupId()}; } public List<UserToolAssetAddonEntry> getSelectedUserToolAssetAddonEntries() { if (_userToolAssetAddonEntries != null) { return _userToolAssetAddonEntries; } _userToolAssetAddonEntries = new ArrayList<>(); String userToolAssetAddonEntryKeysString = _journalContentPortletInstanceConfiguration. userToolAssetAddonEntryKeys(); if (Validator.isNull(userToolAssetAddonEntryKeysString)) { return _userToolAssetAddonEntries; } String[] userToolAssetAddonEntryKeys = StringUtil.split( userToolAssetAddonEntryKeysString); for (String userToolAssetAddonEntryKey : userToolAssetAddonEntryKeys) { UserToolAssetAddonEntry userToolAssetAddonEntry = UserToolAssetAddonEntryTracker.getUserToolAssetAddonEntry( userToolAssetAddonEntryKey); if (userToolAssetAddonEntry != null) { _userToolAssetAddonEntries.add(userToolAssetAddonEntry); } } _portletRequest.setAttribute(WebKeys.JOURNAL_ARTICLE, getArticle()); _portletRequest.setAttribute( WebKeys.JOURNAL_ARTICLE_DISPLAY, getArticleDisplay()); return _userToolAssetAddonEntries; } public String getURLEdit() { try { AssetRendererFactory<JournalArticle> assetRendererFactory = AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClass( JournalArticle.class); JournalArticle article = getArticle(); AssetRenderer<JournalArticle> latestArticleAssetRenderer = assetRendererFactory.getAssetRenderer( article, AssetRendererFactory.TYPE_LATEST_APPROVED); ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); PortletURL redirectURL = PortletURLFactoryUtil.create( _portletRequest, JournalContentPortletKeys.JOURNAL_CONTENT, PortletRequest.RENDER_PHASE); redirectURL.setParameter( "mvcPath", "/update_journal_article_redirect.jsp"); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); redirectURL.setParameter( "referringPortletResource", portletDisplay.getId()); redirectURL.setWindowState(LiferayWindowState.POP_UP); PortletURL portletURL = latestArticleAssetRenderer.getURLEdit( (LiferayPortletRequest)_portletRequest, null, LiferayWindowState.POP_UP, redirectURL); portletURL.setParameter( "hideDefaultSuccessMessage", Boolean.TRUE.toString()); portletURL.setParameter("showHeader", Boolean.FALSE.toString()); return portletURL.toString(); } catch (Exception e) { _log.error("Unable to get edit URL", e); return StringPool.BLANK; } } public String getURLEditTemplate() { try { ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); PortletURL portletURL = PortletURLFactoryUtil.create( _portletRequest, PortletProviderUtil.getPortletId( DDMTemplate.class.getName(), PortletProvider.Action.EDIT), PortletRequest.RENDER_PHASE); DDMTemplate ddmTemplate = getDDMTemplate(); if (ddmTemplate == null) { return StringPool.BLANK; } portletURL.setParameter( "hideDefaultSuccessMessage", Boolean.TRUE.toString()); portletURL.setParameter("mvcPath", "/edit_template.jsp"); portletURL.setParameter("navigationStartsOn", "SELECT_TEMPLATE"); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); PortletURL redirectURL = PortletURLFactoryUtil.create( _portletRequest, portletDisplay.getId(), PortletRequest.RENDER_PHASE); redirectURL.setParameter( "mvcPath", "/update_journal_article_redirect.jsp"); redirectURL.setParameter( "referringPortletResource", portletDisplay.getId()); redirectURL.setWindowState(LiferayWindowState.POP_UP); portletURL.setParameter("redirect", redirectURL.toString()); portletURL.setParameter("showBackURL", Boolean.FALSE.toString()); portletURL.setParameter( "showCacheableInput", Boolean.TRUE.toString()); portletURL.setParameter( "groupId", String.valueOf(ddmTemplate.getGroupId())); portletURL.setParameter( "refererPortletName", PortletProviderUtil.getPortletId( JournalArticle.class.getName(), PortletProvider.Action.EDIT)); portletURL.setParameter( "templateId", String.valueOf(ddmTemplate.getTemplateId())); portletURL.setParameter("showHeader", Boolean.FALSE.toString()); portletURL.setPortletMode(PortletMode.VIEW); portletURL.setWindowState(LiferayWindowState.POP_UP); return portletURL.toString(); } catch (Exception e) { _log.error("Unable to get edit template URL", e); return StringPool.BLANK; } } public boolean hasRestorePermission() throws PortalException { JournalArticle selectedArticle = getSelectedArticle(); if ((selectedArticle == null) || !selectedArticle.isInTrash()) { return false; } ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); TrashHandler trashHandler = TrashHandlerRegistryUtil.getTrashHandler( JournalArticle.class.getName()); TrashEntry trashEntry = selectedArticle.getTrashEntry(); return trashHandler.hasTrashPermission( themeDisplay.getPermissionChecker(), 0, trashEntry.getClassPK(), TrashActionKeys.RESTORE); } public boolean hasViewPermission() throws PortalException { if (_hasViewPermission != null) { return _hasViewPermission; } _hasViewPermission = true; JournalArticle article = getArticle(); if (article != null) { ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); _hasViewPermission = JournalArticlePermission.contains( themeDisplay.getPermissionChecker(), article, ActionKeys.VIEW); } return _hasViewPermission; } public void incrementViewCounter() throws PortalException { JournalArticle article = getArticle(); JournalArticleDisplay articleDisplay = getArticleDisplay(); if ((article == null) || !hasViewPermission() || (articleDisplay == null) || isExpired() || !isEnableViewCountIncrement()) { return; } AssetEntryServiceUtil.incrementViewCounter( JournalArticle.class.getName(), articleDisplay.getResourcePrimKey()); } public boolean isDefaultTemplate() { JournalArticleDisplay articleDisplay = getArticleDisplay(); if ((articleDisplay == null) || Validator.isNull(articleDisplay.getDDMTemplateKey())) { return true; } if (Objects.equals( articleDisplay.getDDMTemplateKey(), getDDMTemplateKey())) { return true; } return false; } public boolean isEnableViewCountIncrement() { if (_enableViewCountIncrement != null) { return _enableViewCountIncrement; } if (Validator.isNotNull( _journalContentPortletInstanceConfiguration. enableViewCountIncrement())) { _enableViewCountIncrement = GetterUtil.getBoolean( _journalContentPortletInstanceConfiguration. enableViewCountIncrement()); } else { _enableViewCountIncrement = PropsValues.ASSET_ENTRY_BUFFERED_INCREMENT_ENABLED; } return _enableViewCountIncrement; } public boolean isExpired() { if (_expired != null) { return _expired; } JournalArticle article = getArticle(); _expired = article.isExpired(); if (!_expired) { Date expirationDate = article.getExpirationDate(); if ((expirationDate != null) && expirationDate.before(new Date())) { _expired = true; } } return _expired; } public boolean isPrint() { if (_print != null) { return _print; } _print = false; String viewMode = ParamUtil.getString(_portletRequest, "viewMode"); if (viewMode.equals(Constants.PRINT)) { _print = true; } return _print; } public boolean isShowAddArticleIcon() throws PortalException { if (_showAddArticleIcon != null) { return _showAddArticleIcon; } ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); _showAddArticleIcon = false; if (!isShowSelectArticleIcon()) { return _showAddArticleIcon; } _showAddArticleIcon = JournalPermission.contains( themeDisplay.getPermissionChecker(), themeDisplay.getScopeGroupId(), ActionKeys.ADD_ARTICLE); return _showAddArticleIcon; } public boolean isShowArticle() throws PortalException { if (_showArticle != null) { return _showArticle; } JournalArticle article = getArticle(); if (article == null) { _showArticle = false; return _showArticle; } JournalArticleDisplay articleDisplay = getArticleDisplay(); if (articleDisplay == null) { _showArticle = false; return _showArticle; } if (!hasViewPermission() || isExpired() || article.isScheduled() || article.isPending()) { _showArticle = false; return _showArticle; } _showArticle = true; return _showArticle; } public boolean isShowEditArticleIcon() { if (_showEditArticleIcon != null) { return _showEditArticleIcon; } JournalArticle latestArticle = getLatestArticle(); _showEditArticleIcon = false; if (latestArticle == null) { return _showEditArticleIcon; } ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); _showEditArticleIcon = JournalArticlePermission.contains( themeDisplay.getPermissionChecker(), latestArticle, ActionKeys.UPDATE); return _showEditArticleIcon; } public boolean isShowEditTemplateIcon() { if (_showEditTemplateIcon != null) { return _showEditTemplateIcon; } _showEditTemplateIcon = false; DDMTemplate ddmTemplate = getDDMTemplate(); if (ddmTemplate == null) { return _showEditTemplateIcon; } ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); try { _showEditTemplateIcon = DDMTemplatePermission.contains( themeDisplay.getPermissionChecker(), themeDisplay.getScopeGroupId(), ddmTemplate, portletDisplay.getId(), ActionKeys.UPDATE); } catch (PortalException pe) { _log.error( "Unable to check permission on DDM template " + ddmTemplate.getTemplateId(), pe); } return _showEditTemplateIcon; } public boolean isShowSelectArticleIcon() throws PortalException { if (_showSelectArticleIcon != null) { return _showSelectArticleIcon; } ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); _showSelectArticleIcon = PortletPermissionUtil.contains( themeDisplay.getPermissionChecker(), themeDisplay.getLayout(), portletDisplay.getId(), ActionKeys.CONFIGURATION); return _showSelectArticleIcon; } public boolean isShowSelectArticleLink() throws PortalException { if (_showSelectArticleLink != null) { return _showSelectArticleLink; } ThemeDisplay themeDisplay = (ThemeDisplay)_portletRequest.getAttribute( WebKeys.THEME_DISPLAY); Group scopeGroup = themeDisplay.getScopeGroup(); if (!scopeGroup.isStaged() || scopeGroup.isStagingGroup()) { _showSelectArticleLink = true; return _showSelectArticleLink; } _showSelectArticleLink = false; return _showSelectArticleLink; } private JournalContentDisplayContext( PortletRequest portletRequest, PortletResponse portletResponse, JournalContentPortletInstanceConfiguration journalContentPortletInstanceConfiguration, long ddmStructureClassNameId) throws PortalException { _portletRequest = portletRequest; _portletResponse = portletResponse; _journalContentPortletInstanceConfiguration = journalContentPortletInstanceConfiguration; _ddmStructureClassNameId = ddmStructureClassNameId; if (Validator.isNull(getPortletResource()) && !isShowArticle()) { portletRequest.setAttribute( WebKeys.PORTLET_CONFIGURATOR_VISIBILITY, Boolean.TRUE); } else if (isShowArticle() && (portletResponse instanceof RenderResponse)) { RenderResponse renderResponse = (RenderResponse)portletResponse; JournalArticleDisplay articleDisplay = getArticleDisplay(); renderResponse.setTitle(articleDisplay.getTitle()); } } private DDMTemplate _getDDMTemplate(String ddmTemplateKey) { JournalArticleDisplay articleDisplay = getArticleDisplay(); if (articleDisplay == null) { return null; } DDMTemplate ddmTemplate = null; try { ddmTemplate = DDMTemplateLocalServiceUtil.fetchTemplate( articleDisplay.getGroupId(), _ddmStructureClassNameId, ddmTemplateKey, true); } catch (PortalException pe) { _log.error( "Unable to get DDM template for article " + articleDisplay.getId(), pe); } return ddmTemplate; } private static final Log _log = LogFactoryUtil.getLog( JournalContentDisplayContext.class); private static final Comparator<AssetAddonEntry> _assetAddonEntryComparator = new Comparator<AssetAddonEntry>() { @Override public int compare( AssetAddonEntry assetAddonEntry1, AssetAddonEntry assetAddonEntry2) { return Double.compare( assetAddonEntry1.getWeight(), assetAddonEntry2.getWeight()); } }; private JournalArticle _article; private JournalArticleDisplay _articleDisplay; private Long _articleGroupId; private String _articleId; private List<ContentMetadataAssetAddonEntry> _contentMetadataAssetAddonEntries; private final long _ddmStructureClassNameId; private DDMTemplate _ddmTemplate; private String _ddmTemplateKey; private List<DDMTemplate> _ddmTemplates; private DDMTemplate _defaultDDMTemplate; private Boolean _enableViewCountIncrement; private Boolean _expired; private Boolean _hasViewPermission; private final JournalContentPortletInstanceConfiguration _journalContentPortletInstanceConfiguration; private JournalArticle _latestArticle; private final PortletRequest _portletRequest; private String _portletResource; private final PortletResponse _portletResponse; private Boolean _print; private Boolean _showAddArticleIcon; private Boolean _showArticle; private Boolean _showEditArticleIcon; private Boolean _showEditTemplateIcon; private Boolean _showSelectArticleIcon; private Boolean _showSelectArticleLink; private List<UserToolAssetAddonEntry> _userToolAssetAddonEntries; }