/** * 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.portlet; import com.liferay.journal.constants.JournalWebKeys; 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.JournalArticleLocalService; import com.liferay.journal.util.JournalContent; import com.liferay.journal.web.util.ExportArticleUtil; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.portlet.PortletRequestModel; import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.PrefsParamUtil; 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.trash.kernel.service.TrashEntryService; import java.io.IOException; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.Portlet; import javax.portlet.PortletException; import javax.portlet.PortletPreferences; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.portlet.ResourceRequest; import javax.portlet.ResourceResponse; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; /** * @author Eudaldo Alonso */ @Component( immediate = true, property = { "com.liferay.portlet.add-default-resource=true", "com.liferay.portlet.css-class-wrapper=portlet-journal-content", "com.liferay.portlet.display-category=category.cms", "com.liferay.portlet.display-category=category.highlighted", "com.liferay.portlet.header-portlet-css=/css/main.css", "com.liferay.portlet.icon=/icons/journal_content.png", "com.liferay.portlet.instanceable=true", "com.liferay.portlet.layout-cacheable=true", "com.liferay.portlet.preferences-owned-by-group=true", "com.liferay.portlet.private-request-attributes=false", "com.liferay.portlet.private-session-attributes=false", "com.liferay.portlet.render-weight=50", "com.liferay.portlet.scopeable=true", "com.liferay.portlet.use-default-template=true", "javax.portlet.display-name=Web Content Display", "javax.portlet.expiration-cache=0", "javax.portlet.init-param.template-path=/", "javax.portlet.init-param.view-template=/view.jsp", "javax.portlet.name=" + JournalContentPortletKeys.JOURNAL_CONTENT, "javax.portlet.resource-bundle=content.Language", "javax.portlet.security-role-ref=guest,power-user,user", "javax.portlet.supports.mime-type=text/html", "javax.portlet.supports.mime-type=application/vnd.wap.xhtml+xml" }, service = Portlet.class ) public class JournalContentPortlet extends MVCPortlet { @Override public void doView( RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { PortletPreferences portletPreferences = renderRequest.getPreferences(); ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute( WebKeys.THEME_DISPLAY); long articleGroupId = PrefsParamUtil.getLong( portletPreferences, renderRequest, "groupId", themeDisplay.getScopeGroupId()); String articleId = PrefsParamUtil.getString( portletPreferences, renderRequest, "articleId"); String ddmTemplateKey = PrefsParamUtil.getString( portletPreferences, renderRequest, "ddmTemplateKey"); JournalArticle article = null; JournalArticleDisplay articleDisplay = null; if ((articleGroupId > 0) && Validator.isNotNull(articleId)) { String viewMode = ParamUtil.getString(renderRequest, "viewMode"); String languageId = LanguageUtil.getLanguageId(renderRequest); int page = ParamUtil.getInteger(renderRequest, "page", 1); article = _journalArticleLocalService.fetchLatestArticle( articleGroupId, articleId, WorkflowConstants.STATUS_APPROVED); try { if (article == null) { article = _journalArticleLocalService.getLatestArticle( articleGroupId, articleId, WorkflowConstants.STATUS_ANY); } if (Validator.isNull(ddmTemplateKey)) { ddmTemplateKey = article.getDDMTemplateKey(); } articleDisplay = _journalContent.getDisplay( article, ddmTemplateKey, viewMode, languageId, page, new PortletRequestModel(renderRequest, renderResponse), themeDisplay); } catch (Exception e) { renderRequest.removeAttribute(WebKeys.JOURNAL_ARTICLE); } } if (article != null) { renderRequest.setAttribute(WebKeys.JOURNAL_ARTICLE, article); } if (articleDisplay != null) { renderRequest.setAttribute( WebKeys.JOURNAL_ARTICLE_DISPLAY, articleDisplay); } else { renderRequest.removeAttribute(WebKeys.JOURNAL_ARTICLE_DISPLAY); } super.doView(renderRequest, renderResponse); } @Override public void render( RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException { renderRequest.setAttribute( JournalWebKeys.JOURNAL_CONTENT, _journalContent); super.render(renderRequest, renderResponse); } public void restoreJournalArticle( ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { long classPK = ParamUtil.getLong(actionRequest, "classPK"); _trashEntryService.restoreEntry( JournalArticle.class.getName(), classPK); } @Override public void serveResource( ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws IOException, PortletException { String resourceID = GetterUtil.getString( resourceRequest.getResourceID()); if (resourceID.equals("exportArticle")) { String targetExtension = ParamUtil.getString( resourceRequest, "targetExtension"); targetExtension = StringUtil.toUpperCase(targetExtension); PortletPreferences portletPreferences = resourceRequest.getPreferences(); String[] allowedExtensions = StringUtil.split( portletPreferences.getValue( "userToolAssetAddonEntryKeys", null)); if (ArrayUtil.contains( allowedExtensions, "enable" + StringUtil.toUpperCase(targetExtension))) { _exportArticleUtil.sendFile( targetExtension, resourceRequest, resourceResponse); } } else { resourceRequest.setAttribute( JournalWebKeys.JOURNAL_CONTENT, _journalContent); super.serveResource(resourceRequest, resourceResponse); } } @Reference(unbind = "-") protected void setExportArticleUtil(ExportArticleUtil exportArticleUtil) { _exportArticleUtil = exportArticleUtil; } @Reference(unbind = "-") protected void setJournalContent(JournalContent journalContent) { _journalContent = journalContent; } @Reference(unbind = "-") protected void setJournalContentSearchLocal( JournalArticleLocalService journalArticleLocalService) { _journalArticleLocalService = journalArticleLocalService; } @Reference(unbind = "-") protected void setTrashEntryService(TrashEntryService trashEntryService) { _trashEntryService = trashEntryService; } protected void unsetExportArticleUtil(ExportArticleUtil exportArticleUtil) { _exportArticleUtil = exportArticleUtil; } protected void unsetJournalContent(JournalContent journalContent) { _journalContent = null; } protected void unsetJournalContentSearchLocal( JournalArticleLocalService journalArticleLocalService) { _journalArticleLocalService = null; } private ExportArticleUtil _exportArticleUtil; private JournalArticleLocalService _journalArticleLocalService; private JournalContent _journalContent; private TrashEntryService _trashEntryService; }