com.liferay.document.library.web.internal.portlet.action.GetFileActionHelper.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.document.library.web.internal.portlet.action.GetFileActionHelper.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.internal.portlet.action;

import com.liferay.document.library.kernel.exception.NoSuchFileEntryException;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.document.library.kernel.service.DLAppServiceUtil;
import com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil;
import com.liferay.document.library.kernel.util.DLUtil;
import com.liferay.portal.kernel.flash.FlashMagicBytesUtil;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.FileShortcut;
import com.liferay.portal.kernel.repository.model.FileVersion;
import com.liferay.portal.kernel.security.auth.PrincipalException;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.servlet.ServletResponseUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.FileUtil;
import com.liferay.portal.kernel.util.HttpUtil;
import com.liferay.portal.kernel.util.MimeTypesUtil;
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.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
import com.liferay.portlet.documentlibrary.util.DocumentConversionUtil;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import java.util.List;

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

/**
 * @author Ivn Zaera
 */
public class GetFileActionHelper {

    public void processRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        try {
            long fileEntryId = ParamUtil.getLong(request, "fileEntryId");

            long folderId = ParamUtil.getLong(request, "folderId");
            String name = ParamUtil.getString(request, "name");
            String title = ParamUtil.getString(request, "title");
            String version = ParamUtil.getString(request, "version");

            long fileShortcutId = ParamUtil.getLong(request, "fileShortcutId");

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

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

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

            long groupId = ParamUtil.getLong(request, "groupId", themeDisplay.getScopeGroupId());

            getFile(fileEntryId, folderId, name, title, version, fileShortcutId, uuid, groupId, targetExtension,
                    request, response);
        } catch (NoSuchFileEntryException nsfee) {
            PortalUtil.sendError(HttpServletResponse.SC_NOT_FOUND, nsfee, request, response);
        } catch (PrincipalException pe) {
            processPrincipalException(pe, request, response);
        } catch (Exception e) {
            PortalUtil.sendError(e, request, response);
        }
    }

    protected void getFile(long fileEntryId, long folderId, String name, String title, String version,
            long fileShortcutId, String uuid, long groupId, String targetExtension, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        if (name.startsWith("DLFE-")) {
            name = name.substring(5);
        }

        name = FileUtil.stripExtension(name);

        FileEntry fileEntry = null;

        if (Validator.isNotNull(uuid) && (groupId > 0)) {
            fileEntry = DLAppServiceUtil.getFileEntryByUuidAndGroupId(uuid, groupId);

            folderId = fileEntry.getFolderId();
        }

        if (fileEntryId > 0) {
            fileEntry = DLAppServiceUtil.getFileEntry(fileEntryId);
        } else if (fileShortcutId <= 0) {
            if (Validator.isNotNull(title)) {
                fileEntry = DLAppServiceUtil.getFileEntry(groupId, folderId, title);
            } else if (Validator.isNotNull(name)) {
                DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.fetchFileEntryByName(groupId, folderId, name);

                if (dlFileEntry == null) {

                    // LPS-30374

                    List<DLFileEntry> dlFileEntries = DLFileEntryLocalServiceUtil.getFileEntries(folderId, name);

                    if (!dlFileEntries.isEmpty()) {
                        dlFileEntry = dlFileEntries.get(0);
                    }
                }

                if (dlFileEntry != null) {
                    ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);

                    PermissionChecker permissionChecker = themeDisplay.getPermissionChecker();

                    DLFileEntryPermission.check(permissionChecker, dlFileEntry, ActionKeys.VIEW);

                    fileEntry = new LiferayFileEntry(dlFileEntry);
                }
            }
        } else {
            FileShortcut fileShortcut = DLAppServiceUtil.getFileShortcut(fileShortcutId);

            fileEntryId = fileShortcut.getToFileEntryId();

            fileEntry = DLAppServiceUtil.getFileEntry(fileEntryId);
        }

        if (Validator.isNull(version)) {
            if ((fileEntry != null) && Validator.isNotNull(fileEntry.getVersion())) {

                version = fileEntry.getVersion();
            } else {
                throw new NoSuchFileEntryException("{fileEntryId=" + fileEntryId + "}");
            }
        }

        FileVersion fileVersion = fileEntry.getFileVersion(version);

        InputStream is = fileVersion.getContentStream(true);

        String fileName = fileVersion.getTitle();

        String sourceExtension = fileVersion.getExtension();

        if (Validator.isNotNull(sourceExtension) && !fileName.endsWith(StringPool.PERIOD + sourceExtension)) {

            fileName += StringPool.PERIOD + sourceExtension;
        }

        long contentLength = fileVersion.getSize();
        String contentType = fileVersion.getMimeType();

        if (Validator.isNotNull(targetExtension)) {
            String id = DLUtil.getTempFileId(fileEntry.getFileEntryId(), version);

            File convertedFile = DocumentConversionUtil.convert(id, is, sourceExtension, targetExtension);

            if (convertedFile != null) {
                fileName = FileUtil.stripExtension(fileName).concat(StringPool.PERIOD).concat(targetExtension);
                is = new FileInputStream(convertedFile);
                contentLength = convertedFile.length();
                contentType = MimeTypesUtil.getContentType(fileName);
            }
        }

        FlashMagicBytesUtil.Result flashMagicBytesUtilResult = FlashMagicBytesUtil.check(is);

        if (flashMagicBytesUtilResult.isFlash()) {
            fileName = FileUtil.stripExtension(fileName) + ".swf";
        }

        is = flashMagicBytesUtilResult.getInputStream();

        ServletResponseUtil.sendFile(request, response, fileName, is, contentLength, contentType);
    }

    protected void processPrincipalException(Throwable t, HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

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

        PermissionChecker permissionChecker = themeDisplay.getPermissionChecker();

        User user = permissionChecker.getUser();

        if ((user != null) && !user.isDefaultUser()) {
            PortalUtil.sendError(HttpServletResponse.SC_UNAUTHORIZED, (Exception) t, request, response);

            return;
        }

        String redirect = PortalUtil.getPathMain() + "/portal/login";

        String currentURL = PortalUtil.getCurrentURL(request);

        redirect = HttpUtil.addParameter(redirect, "redirect", currentURL);

        response.sendRedirect(redirect);
    }

}