com.liferay.document.library.web.asset.DLFileEntryAssetRenderer.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.document.library.web.asset.DLFileEntryAssetRenderer.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.document.library.web.asset;

import com.liferay.asset.kernel.model.AssetRendererFactory;
import com.liferay.asset.kernel.model.BaseJSPAssetRenderer;
import com.liferay.asset.kernel.model.DDMFormValuesReader;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.document.library.kernel.model.DLFileEntryConstants;
import com.liferay.document.library.kernel.service.DLFileEntryLocalService;
import com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil;
import com.liferay.document.library.kernel.util.DLUtil;
import com.liferay.document.library.web.constants.DLPortletKeys;
import com.liferay.portal.kernel.exception.PortalException;
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.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.FileVersion;
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.theme.ThemeDisplay;
import com.liferay.portal.kernel.trash.TrashRenderer;
import com.liferay.portal.kernel.util.CharPool;
import com.liferay.portal.kernel.util.FileUtil;
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.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.util.PropsValues;
import com.liferay.portlet.documentlibrary.asset.DLFileEntryDDMFormValuesReader;
import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
import com.liferay.portlet.documentlibrary.util.DocumentConversionUtil;
import com.liferay.trash.kernel.util.TrashUtil;

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

import javax.portlet.ActionRequest;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletURL;
import javax.portlet.WindowState;

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

/**
 * @author Julio Camarero
 * @author Juan Fernndez
 * @author Sergio Gonzlez
 * @author Zsolt Berentey
 */
public class DLFileEntryAssetRenderer extends BaseJSPAssetRenderer<FileEntry> implements TrashRenderer {

    /**
     * @deprecated As of 1.2.0
     */
    @Deprecated
    public DLFileEntryAssetRenderer(FileEntry fileEntry, FileVersion fileVersion) {

        this(fileEntry, fileVersion, DLFileEntryLocalServiceUtil.getService());
    }

    public DLFileEntryAssetRenderer(FileEntry fileEntry, FileVersion fileVersion,
            DLFileEntryLocalService dlFileEntryLocalService) {

        _fileEntry = fileEntry;
        _fileVersion = fileVersion;
        _dlFileEntryLocalService = dlFileEntryLocalService;
    }

    @Override
    public FileEntry getAssetObject() {
        return _fileEntry;
    }

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

    @Override
    public long getClassPK() {
        if (!_fileVersion.isApproved() && _fileVersion.isDraft() && !_fileVersion.isPending()
                && !_fileVersion.getVersion().equals(DLFileEntryConstants.VERSION_DEFAULT)) {

            return _fileVersion.getFileVersionId();
        } else {
            return _fileEntry.getFileEntryId();
        }
    }

    @Override
    public DDMFormValuesReader getDDMFormValuesReader() {
        return new DLFileEntryDDMFormValuesReader(_fileEntry, _fileVersion);
    }

    @Override
    public String getDiscussionPath() {
        if (PropsValues.DL_FILE_ENTRY_COMMENTS_ENABLED) {
            return "edit_file_entry_discussion";
        } else {
            return null;
        }
    }

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

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

    @Override
    public String getIconCssClass() {
        return _fileEntry.getIconCssClass();
    }

    @Override
    public String getJspPath(HttpServletRequest request, String template) {
        if (template.equals(TEMPLATE_ABSTRACT) || template.equals(TEMPLATE_FULL_CONTENT)) {

            return "/document_library/asset/file_entry_" + template + ".jsp";
        } else {
            return null;
        }
    }

    @Override
    public String getNewName(String oldName, String token) {
        String extension = FileUtil.getExtension(oldName);

        if (Validator.isNull(extension)) {
            return super.getNewName(oldName, token);
        }

        StringBundler sb = new StringBundler(5);

        int index = oldName.lastIndexOf(CharPool.PERIOD);

        sb.append(oldName.substring(0, index));

        sb.append(StringPool.SPACE);
        sb.append(token);
        sb.append(StringPool.PERIOD);
        sb.append(extension);

        return sb.toString();
    }

    @Override
    public String getPortletId() {
        AssetRendererFactory<FileEntry> assetRendererFactory = getAssetRendererFactory();

        return assetRendererFactory.getPortletId();
    }

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

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

        return _fileEntry.getDescription();
    }

    @Override
    public String[] getSupportedConversions() {
        return DocumentConversionUtil.getConversions(_fileEntry.getExtension());
    }

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

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

        String thumbnailSrc = DLUtil.getThumbnailSrc(_fileEntry, themeDisplay);

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

        return super.getThumbnailPath(portletRequest);
    }

    @Override
    public String getTitle(Locale locale) {
        String title = null;

        if (getAssetRendererType() == AssetRendererFactory.TYPE_LATEST) {
            title = _fileVersion.getTitle();
        } else {
            title = _fileEntry.getTitle();
        }

        return TrashUtil.getOriginalTitle(title);
    }

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

    @Override
    public String getURLDownload(ThemeDisplay themeDisplay) {
        return DLUtil.getPreviewURL(_fileEntry, _fileVersion, themeDisplay, StringPool.BLANK);
    }

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

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

        PortletURL portletURL = PortalUtil.getControlPanelPortletURL(liferayPortletRequest, group,
                DLPortletKeys.DOCUMENT_LIBRARY, 0, 0, PortletRequest.RENDER_PHASE);

        portletURL.setParameter("mvcRenderCommandName", "/document_library/edit_file_entry");
        portletURL.setParameter("fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));

        return portletURL;
    }

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

        PortletURL portletURL = PortalUtil.getControlPanelPortletURL(liferayPortletRequest,
                DLPortletKeys.DOCUMENT_LIBRARY, PortletRequest.ACTION_PHASE);

        portletURL.setParameter(ActionRequest.ACTION_NAME, "/document_library/get_file");
        portletURL.setParameter("groupId", String.valueOf(_fileEntry.getRepositoryId()));
        portletURL.setParameter("folderId", String.valueOf(_fileEntry.getFolderId()));
        portletURL.setParameter("title", String.valueOf(_fileEntry.getTitle()));

        return portletURL;
    }

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

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

        return DLUtil.getImagePreviewURL(_fileEntry, _fileVersion, themeDisplay);
    }

    @Override
    public String getURLView(LiferayPortletResponse liferayPortletResponse, WindowState windowState)
            throws Exception {

        AssetRendererFactory<FileEntry> assetRendererFactory = getAssetRendererFactory();

        PortletURL portletURL = assetRendererFactory.getURLView(liferayPortletResponse, windowState);

        portletURL.setParameter("mvcRenderCommandName", "/document_library/view_file_entry");
        portletURL.setParameter("fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
        portletURL.setWindowState(windowState);

        return portletURL.toString();
    }

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

        return getURLViewInContext(liferayPortletRequest, noSuchEntryRedirect, "/document_library/find_file_entry",
                "fileEntryId", _fileEntry.getFileEntryId());
    }

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

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

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

    public boolean hasDeletePermission(PermissionChecker permissionChecker) throws PortalException {

        return DLFileEntryPermission.contains(permissionChecker, _fileEntry.getFileEntryId(), ActionKeys.DELETE);
    }

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

        return DLFileEntryPermission.contains(permissionChecker, _fileEntry.getFileEntryId(), ActionKeys.UPDATE);
    }

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

        return DLFileEntryPermission.contains(permissionChecker, _fileEntry.getFileEntryId(), ActionKeys.VIEW);
    }

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

        request.setAttribute(WebKeys.DOCUMENT_LIBRARY_FILE_ENTRY, _fileEntry);

        String version = ParamUtil.getString(request, "version");

        if ((getAssetRendererType() == AssetRendererFactory.TYPE_LATEST) || Validator.isNotNull(version)) {

            if ((_fileEntry != null) && Validator.isNotNull(version)) {
                _fileVersion = _fileEntry.getFileVersion(version);
            }

            request.setAttribute(WebKeys.DOCUMENT_LIBRARY_FILE_VERSION, _fileVersion);
        } else {
            request.setAttribute(WebKeys.DOCUMENT_LIBRARY_FILE_VERSION, _fileEntry.getFileVersion());
        }

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

    @Override
    public boolean isCategorizable(long groupId) {
        long classPK = getClassPK();

        DLFileEntry dlFileEntry = _dlFileEntryLocalService.fetchDLFileEntry(classPK);

        if ((dlFileEntry == null) || (dlFileEntry.getRepositoryId() != groupId)) {

            return false;
        }

        return super.isCategorizable(groupId);
    }

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

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

    private final DLFileEntryLocalService _dlFileEntryLocalService;
    private final FileEntry _fileEntry;
    private FileVersion _fileVersion;

}