com.liferay.journal.web.asset.JournalArticleAssetRenderer.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.journal.web.asset.JournalArticleAssetRenderer.java

Source

/**
 * 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.web.asset;

import com.liferay.asset.kernel.model.BaseJSPAssetRenderer;
import com.liferay.asset.kernel.model.DDMFormValuesReader;
import com.liferay.dynamic.data.mapping.util.FieldsToDDMFormValuesConverter;
import com.liferay.journal.configuration.JournalServiceConfiguration;
import com.liferay.journal.constants.JournalPortletKeys;
import com.liferay.journal.model.JournalArticle;
import com.liferay.journal.model.JournalArticleConstants;
import com.liferay.journal.model.JournalArticleDisplay;
import com.liferay.journal.service.JournalArticleLocalServiceUtil;
import com.liferay.journal.service.JournalContentSearchLocalServiceUtil;
import com.liferay.journal.service.permission.JournalArticlePermission;
import com.liferay.journal.util.JournalContent;
import com.liferay.journal.util.JournalConverter;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.language.LanguageUtil;
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.model.Layout;
import com.liferay.portal.kernel.module.configuration.ConfigurationProviderUtil;
import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
import com.liferay.portal.kernel.portlet.LiferayPortletURL;
import com.liferay.portal.kernel.portlet.PortletPreferencesFactoryUtil;
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.security.permission.PermissionChecker;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutSetLocalServiceUtil;
import com.liferay.portal.kernel.service.permission.LayoutPermissionUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.trash.TrashRenderer;
import com.liferay.portal.kernel.util.Constants;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.JavaConstants;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;

import java.util.Date;
import java.util.List;
import java.util.Locale;

import javax.portlet.PortletPreferences;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletURL;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author Julio Camarero
 * @author Juan Fernndez
 * @author Sergio Gonzlez
 * @author Raymond Aug
 */
public class JournalArticleAssetRenderer extends BaseJSPAssetRenderer<JournalArticle> implements TrashRenderer {

    public static final String TYPE = "journal_article";

    public static long getClassPK(JournalArticle article) {
        if ((article.isDraft() || article.isPending())
                && (article.getVersion() != JournalArticleConstants.VERSION_DEFAULT)) {

            return article.getPrimaryKey();
        } else {
            return article.getResourcePrimKey();
        }
    }

    public JournalArticleAssetRenderer(JournalArticle article) {
        _article = article;

        setJournalServiceConfiguration();
    }

    public JournalArticle getArticle() {
        return _article;
    }

    @Override
    public JournalArticle getAssetObject() {
        return _article;
    }

    @Override
    public String[] getAvailableLanguageIds() {
        return _article.getAvailableLanguageIds();
    }

    @Override
    public String getClassName() {
        return JournalArticle.class.getName();
    }

    @Override
    public long getClassPK() {
        return getClassPK(_article);
    }

    @Override
    public DDMFormValuesReader getDDMFormValuesReader() {
        JournalArticleDDMFormValuesReader journalArticleDDMFormValuesReader = new JournalArticleDDMFormValuesReader(
                _article);

        journalArticleDDMFormValuesReader.setFieldsToDDMFormValuesConverter(_fieldsToDDMFormValuesConverter);
        journalArticleDDMFormValuesReader.setJournalConverter(_journalConverter);

        return journalArticleDDMFormValuesReader;
    }

    @Override
    public String getDiscussionPath() {
        if (_journalServiceConfiguration == null) {
            try {
                _journalServiceConfiguration = ConfigurationProviderUtil
                        .getCompanyConfiguration(JournalServiceConfiguration.class, _article.getCompanyId());
            } catch (Exception e) {
                _log.error(e, e);

                return null;
            }
        }

        if (_journalServiceConfiguration.articleCommentsEnabled()) {
            return "edit_article_discussion";
        } else {
            return null;
        }
    }

    /**
     * @deprecated As of 1.4.0, with no direct replacement
     */
    @Deprecated
    @Override
    public Date getDisplayDate() {
        return _article.getDisplayDate();
    }

    @Override
    public long getGroupId() {
        return _article.getGroupId();
    }

    @Override
    public String getJspPath(HttpServletRequest request, String template) {
        if (_article.isInTrash() && template.equals(TEMPLATE_FULL_CONTENT)) {
            return "/trash/" + template + ".jsp";
        }

        if (template.equals(TEMPLATE_ABSTRACT) || template.equals(TEMPLATE_FULL_CONTENT)) {

            return "/asset/" + template + ".jsp";
        }

        return null;
    }

    @Override
    public String getPortletId() {
        return JournalPortletKeys.JOURNAL;
    }

    @Override
    public int getStatus() {
        return _article.getStatus();
    }

    @Override
    public String getSummary(PortletRequest portletRequest, PortletResponse portletResponse) {

        Locale locale = getLocale(portletRequest);

        String summary = _article.getDescription(locale);

        if (Validator.isNotNull(summary)) {
            return summary;
        }

        try {
            PortletRequestModel portletRequestModel = null;
            ThemeDisplay themeDisplay = null;

            if ((portletRequest != null) && (portletResponse != null)) {
                portletRequestModel = new PortletRequestModel(portletRequest, portletResponse);
                themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
            }

            JournalArticleDisplay articleDisplay = JournalArticleLocalServiceUtil.getArticleDisplay(_article, null,
                    null, LanguageUtil.getLanguageId(locale), 1, portletRequestModel, themeDisplay);

            summary = HtmlUtil.stripHtml(articleDisplay.getContent());
        } catch (Exception e) {
        }

        return summary;
    }

    @Override
    public String getThumbnailPath(PortletRequest portletRequest) throws Exception {

        ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);

        String thumbnailSrc = _article.getArticleImageURL(themeDisplay);

        if (Validator.isNotNull(thumbnailSrc)) {
            return thumbnailSrc;
        }

        return super.getThumbnailPath(portletRequest);
    }

    @Override
    public String getTitle(Locale locale) {
        return _article.getTitle(locale);
    }

    @Override
    public String getType() {
        return TYPE;
    }

    @Override
    public PortletURL getURLEdit(LiferayPortletRequest liferayPortletRequest,
            LiferayPortletResponse liferayPortletResponse) throws Exception {

        Group group = GroupLocalServiceUtil.fetchGroup(_article.getGroupId());

        PortletURL portletURL = PortalUtil.getControlPanelPortletURL(liferayPortletRequest, group,
                JournalPortletKeys.JOURNAL, 0, 0, PortletRequest.RENDER_PHASE);

        portletURL.setParameter("mvcPath", "/edit_article.jsp");
        portletURL.setParameter("groupId", String.valueOf(_article.getGroupId()));
        portletURL.setParameter("articleId", _article.getArticleId());
        portletURL.setParameter("version", String.valueOf(_article.getVersion()));

        return portletURL;
    }

    @Override
    public PortletURL getURLExport(LiferayPortletRequest liferayPortletRequest,
            LiferayPortletResponse liferayPortletResponse) throws Exception {

        ThemeDisplay themeDisplay = (ThemeDisplay) liferayPortletRequest.getAttribute(WebKeys.THEME_DISPLAY);

        PortletURL portletURL = PortletURLFactoryUtil.create(liferayPortletRequest, JournalPortletKeys.JOURNAL,
                themeDisplay.getPlid(), PortletRequest.RESOURCE_PHASE);

        LiferayPortletURL liferayPortletURL = (LiferayPortletURL) portletURL;

        liferayPortletURL.setParameter("groupId", String.valueOf(_article.getGroupId()));
        liferayPortletURL.setParameter("articleId", _article.getArticleId());
        liferayPortletURL.setResourceID("exportArticle");

        return liferayPortletURL;
    }

    @Override
    public String getUrlTitle() {
        return _article.getUrlTitle();
    }

    @Override
    public PortletURL getURLViewDiffs(LiferayPortletRequest liferayPortletRequest,
            LiferayPortletResponse liferayPortletResponse) throws Exception {

        PortletURL portletURL = PortalUtil.getControlPanelPortletURL(liferayPortletRequest,
                JournalPortletKeys.JOURNAL, PortletRequest.RENDER_PHASE);

        JournalArticle previousApprovedArticle = JournalArticleLocalServiceUtil
                .getPreviousApprovedArticle(_article);

        if (previousApprovedArticle.getVersion() == _article.getVersion()) {
            return null;
        }

        portletURL.setParameter("mvcPath", "/compare_versions.jsp");
        portletURL.setParameter("groupId", String.valueOf(_article.getGroupId()));
        portletURL.setParameter("articleId", _article.getArticleId());
        portletURL.setParameter("sourceVersion", String.valueOf(previousApprovedArticle.getVersion()));
        portletURL.setParameter("targetVersion", String.valueOf(_article.getVersion()));

        return portletURL;
    }

    @Override
    public String getURLViewInContext(LiferayPortletRequest liferayPortletRequest,
            LiferayPortletResponse liferayPortletResponse, String noSuchEntryRedirect) throws Exception {

        ThemeDisplay themeDisplay = (ThemeDisplay) liferayPortletRequest.getAttribute(WebKeys.THEME_DISPLAY);

        Layout layout = _article.getLayout();

        if (layout == null) {
            layout = themeDisplay.getLayout();
        }

        String portletId = (String) liferayPortletRequest.getAttribute(WebKeys.PORTLET_ID);

        PortletPreferences portletSetup = PortletPreferencesFactoryUtil.getStrictLayoutPortletSetup(layout,
                portletId);

        String linkToLayoutUuid = GetterUtil.getString(portletSetup.getValue("portletSetupLinkToLayoutUuid", null));

        if (Validator.isNotNull(_article.getLayoutUuid()) && Validator.isNull(linkToLayoutUuid)) {

            Group group = themeDisplay.getScopeGroup();

            if (group.getGroupId() != _article.getGroupId()) {
                group = GroupLocalServiceUtil.getGroup(_article.getGroupId());
            }

            String groupFriendlyURL = PortalUtil.getGroupFriendlyURL(
                    LayoutSetLocalServiceUtil.getLayoutSet(group.getGroupId(), layout.isPrivateLayout()),
                    themeDisplay);

            return PortalUtil.addPreservedParameters(themeDisplay, groupFriendlyURL
                    .concat(JournalArticleConstants.CANONICAL_URL_SEPARATOR).concat(_article.getUrlTitle()));
        }

        String hitLayoutURL = getHitLayoutURL(layout.isPrivateLayout(), noSuchEntryRedirect, themeDisplay);

        if (hitLayoutURL.equals(noSuchEntryRedirect)) {
            hitLayoutURL = getHitLayoutURL(!layout.isPrivateLayout(), noSuchEntryRedirect, themeDisplay);
        }

        return hitLayoutURL;
    }

    @Override
    public long getUserId() {
        return _article.getUserId();
    }

    @Override
    public String getUserName() {
        return _article.getUserName();
    }

    @Override
    public String getUuid() {
        return _article.getUuid();
    }

    @Override
    public String getViewInContextMessage() {
        return "view[action]";
    }

    @Override
    public boolean hasEditPermission(PermissionChecker permissionChecker) throws PortalException {

        return JournalArticlePermission.contains(permissionChecker, _article, ActionKeys.UPDATE);
    }

    @Override
    public boolean hasViewPermission(PermissionChecker permissionChecker) throws PortalException {

        return JournalArticlePermission.contains(permissionChecker, _article, ActionKeys.VIEW);
    }

    @Override
    public boolean include(HttpServletRequest request, HttpServletResponse response, String template)
            throws Exception {

        request.setAttribute(WebKeys.JOURNAL_ARTICLE, _article);

        request.setAttribute(WebKeys.JOURNAL_ARTICLE_DISPLAY, getArticleDisplay(request, response));

        return super.include(request, response, template);
    }

    @Override
    public boolean isConvertible() {
        return true;
    }

    @Override
    public boolean isDisplayable() {
        Date now = new Date();

        Date displayDate = _article.getDisplayDate();

        if ((displayDate != null) && displayDate.after(now)) {
            return false;
        }

        Date expirationDate = _article.getExpirationDate();

        if ((expirationDate != null) && expirationDate.before(now)) {
            return false;
        }

        return true;
    }

    @Override
    public boolean isLocalizable() {
        return true;
    }

    @Override
    public boolean isPrintable() {
        return true;
    }

    public void setFieldsToDDMFormValuesConverter(FieldsToDDMFormValuesConverter fieldsToDDMFormValuesConverter) {

        _fieldsToDDMFormValuesConverter = fieldsToDDMFormValuesConverter;
    }

    public void setJournalContent(JournalContent journalContent) {
        _journalContent = journalContent;
    }

    public void setJournalConverter(JournalConverter journalConverter) {
        _journalConverter = journalConverter;
    }

    protected JournalArticleDisplay getArticleDisplay(HttpServletRequest request, HttpServletResponse response)
            throws PortalException {

        boolean workflowAssetPreview = GetterUtil.getBoolean(request.getAttribute(WebKeys.WORKFLOW_ASSET_PREVIEW));

        String ddmTemplateKey = (String) request.getAttribute(WebKeys.JOURNAL_TEMPLATE_ID);
        String viewMode = ParamUtil.getString(request, "viewMode", Constants.VIEW);
        String languageId = LanguageUtil.getLanguageId(request);
        int articlePage = ParamUtil.getInteger(request, "page", 1);
        PortletRequestModel portletRequestModel = getPortletRequestModel(request, response);
        ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);

        if (!workflowAssetPreview && _article.isApproved()) {
            return _journalContent.getDisplay(_article.getGroupId(), _article.getArticleId(), _article.getVersion(),
                    ddmTemplateKey, viewMode, languageId, articlePage, portletRequestModel, themeDisplay);
        } else {
            return JournalArticleLocalServiceUtil.getArticleDisplay(_article, ddmTemplateKey, viewMode, languageId,
                    articlePage, portletRequestModel, themeDisplay);
        }
    }

    protected String getHitLayoutURL(boolean privateLayout, String noSuchEntryRedirect, ThemeDisplay themeDisplay)
            throws PortalException {

        List<Long> hitLayoutIds = JournalContentSearchLocalServiceUtil.getLayoutIds(_article.getGroupId(),
                privateLayout, _article.getArticleId());

        for (Long hitLayoutId : hitLayoutIds) {
            Layout hitLayout = LayoutLocalServiceUtil.getLayout(_article.getGroupId(), privateLayout,
                    hitLayoutId.longValue());

            if (LayoutPermissionUtil.contains(themeDisplay.getPermissionChecker(), hitLayout, ActionKeys.VIEW)) {

                return PortalUtil.getLayoutURL(hitLayout, themeDisplay);
            }
        }

        return noSuchEntryRedirect;
    }

    protected PortletRequestModel getPortletRequestModel(HttpServletRequest request, HttpServletResponse response) {

        PortletRequest portletRequest = (PortletRequest) request.getAttribute(JavaConstants.JAVAX_PORTLET_REQUEST);
        PortletResponse portletResponse = (PortletResponse) request
                .getAttribute(JavaConstants.JAVAX_PORTLET_RESPONSE);

        if ((portletRequest == null) || (portletResponse == null)) {
            return null;
        }

        return new PortletRequestModel(portletRequest, portletResponse);
    }

    /**
     * @deprecated As of 1.7.0, with no direct replacement
     */
    @Deprecated
    protected void setJournalServiceConfiguration() {
    }

    private static final Log _log = LogFactoryUtil.getLog(JournalArticleAssetRenderer.class);

    private final JournalArticle _article;
    private FieldsToDDMFormValuesConverter _fieldsToDDMFormValuesConverter;
    private JournalContent _journalContent;
    private JournalConverter _journalConverter;
    private JournalServiceConfiguration _journalServiceConfiguration;

}