com.liferay.document.library.web.internal.display.context.DefaultDLViewFileVersionDisplayContext.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.document.library.web.internal.display.context.DefaultDLViewFileVersionDisplayContext.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.display.context;

import com.liferay.document.library.display.context.DLMimeTypeDisplayContext;
import com.liferay.document.library.display.context.DLViewFileVersionDisplayContext;
import com.liferay.document.library.kernel.model.DLFileEntryConstants;
import com.liferay.document.library.kernel.model.DLFileEntryMetadata;
import com.liferay.document.library.kernel.model.DLFileVersion;
import com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalServiceUtil;
import com.liferay.document.library.kernel.util.AudioProcessorUtil;
import com.liferay.document.library.kernel.util.ImageProcessorUtil;
import com.liferay.document.library.kernel.util.PDFProcessorUtil;
import com.liferay.document.library.kernel.util.VideoProcessorUtil;
import com.liferay.document.library.web.internal.display.context.logic.DLPortletInstanceSettingsHelper;
import com.liferay.document.library.web.internal.display.context.logic.FileEntryDisplayContextHelper;
import com.liferay.document.library.web.internal.display.context.logic.FileVersionDisplayContextHelper;
import com.liferay.document.library.web.internal.display.context.logic.UIItemsBuilder;
import com.liferay.document.library.web.internal.display.context.util.DLRequestHelper;
import com.liferay.document.library.web.internal.display.context.util.JSPRenderer;
import com.liferay.dynamic.data.mapping.exception.StorageException;
import com.liferay.dynamic.data.mapping.kernel.DDMStructure;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.dynamic.data.mapping.storage.StorageEngine;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.language.LanguageUtil;
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.servlet.taglib.ui.Menu;
import com.liferay.portal.kernel.servlet.taglib.ui.MenuItem;
import com.liferay.portal.kernel.servlet.taglib.ui.ToolbarItem;
import com.liferay.portal.kernel.util.WebKeys;

import java.io.IOException;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.UUID;

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

/**
 * @author Adolfo Prez
 */
public class DefaultDLViewFileVersionDisplayContext implements DLViewFileVersionDisplayContext {

    public DefaultDLViewFileVersionDisplayContext(HttpServletRequest request, HttpServletResponse response,
            FileShortcut fileShortcut, DLMimeTypeDisplayContext dlMimeTypeDisplayContext,
            ResourceBundle resourceBundle, StorageEngine storageEngine) throws PortalException {

        this(request, fileShortcut.getFileVersion(), fileShortcut, dlMimeTypeDisplayContext, resourceBundle,
                storageEngine);
    }

    public DefaultDLViewFileVersionDisplayContext(HttpServletRequest request, HttpServletResponse response,
            FileVersion fileVersion, DLMimeTypeDisplayContext dlMimeTypeDisplayContext,
            ResourceBundle resourceBundle, StorageEngine storageEngine) {

        this(request, fileVersion, null, dlMimeTypeDisplayContext, resourceBundle, storageEngine);
    }

    @Override
    public String getCssClassFileMimeType() {
        if (_dlMimeTypeDisplayContext == null) {
            return "file-icon-color-0";
        }

        return _dlMimeTypeDisplayContext.getCssClassFileMimeType(_fileVersion.getMimeType());
    }

    @Override
    public DDMFormValues getDDMFormValues(DDMStructure ddmStructure) throws PortalException {

        DLFileEntryMetadata dlFileEntryMetadata = DLFileEntryMetadataLocalServiceUtil
                .getFileEntryMetadata(ddmStructure.getStructureId(), _fileVersion.getFileVersionId());

        return _storageEngine.getDDMFormValues(dlFileEntryMetadata.getDDMStorageId());
    }

    @Override
    public DDMFormValues getDDMFormValues(long classPK) throws StorageException {

        return _storageEngine.getDDMFormValues(classPK);
    }

    @Override
    public List<DDMStructure> getDDMStructures() throws PortalException {
        if (_ddmStructures != null) {
            return _ddmStructures;
        }

        if (_fileVersionDisplayContextHelper.isDLFileVersion()) {
            DLFileVersion dlFileVersion = (DLFileVersion) _fileVersion.getModel();

            _ddmStructures = dlFileVersion.getDDMStructures();
        } else {
            _ddmStructures = Collections.emptyList();
        }

        return _ddmStructures;
    }

    @Override
    public int getDDMStructuresCount() throws PortalException {
        List<DDMStructure> ddmStructures = getDDMStructures();

        return ddmStructures.size();
    }

    @Override
    public String getDiscussionClassName() {
        return DLFileEntryConstants.getClassName();
    }

    @Override
    public long getDiscussionClassPK() {
        return _fileVersion.getFileEntryId();
    }

    @Override
    public String getDiscussionLabel(Locale locale) {
        return LanguageUtil.get(_resourceBundle, "comments");
    }

    @Override
    public Menu getMenu() throws PortalException {
        Menu menu = new Menu();

        menu.setDirection("left-side");
        menu.setMarkupView("lexicon");
        menu.setMenuItems(_getMenuItems());
        menu.setScroll(false);
        menu.setShowWhenSingleIcon(true);

        return menu;
    }

    @Override
    public List<ToolbarItem> getToolbarItems() throws PortalException {
        List<ToolbarItem> toolbarItems = new ArrayList<>();

        _uiItemsBuilder.addDownloadToolbarItem(toolbarItems);

        _uiItemsBuilder.addOpenInMsOfficeToolbarItem(toolbarItems);

        _uiItemsBuilder.addEditToolbarItem(toolbarItems);

        _uiItemsBuilder.addMoveToolbarItem(toolbarItems);

        _uiItemsBuilder.addCheckoutToolbarItem(toolbarItems);

        _uiItemsBuilder.addCancelCheckoutToolbarItem(toolbarItems);

        _uiItemsBuilder.addCheckinToolbarItem(toolbarItems);

        _uiItemsBuilder.addPermissionsToolbarItem(toolbarItems);

        _uiItemsBuilder.addMoveToTheRecycleBinToolbarItem(toolbarItems);

        _uiItemsBuilder.addDeleteToolbarItem(toolbarItems);

        return toolbarItems;
    }

    @Override
    public UUID getUuid() {
        return _UUID;
    }

    @Override
    public boolean hasPreview() {
        if (AudioProcessorUtil.hasAudio(_fileVersion) || ImageProcessorUtil.hasImages(_fileVersion)
                || PDFProcessorUtil.hasImages(_fileVersion) || VideoProcessorUtil.hasVideo(_fileVersion)) {

            return true;
        }

        return false;
    }

    @Override
    public boolean isDownloadLinkVisible() throws PortalException {
        return _fileEntryDisplayContextHelper.isDownloadActionAvailable();
    }

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

    @Override
    public void renderPreview(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        JSPRenderer jspRenderer = new JSPRenderer("/document_library/view_file_entry_preview.jsp");

        jspRenderer.setAttribute(WebKeys.DOCUMENT_LIBRARY_FILE_VERSION, _fileVersion);

        jspRenderer.render(request, response);
    }

    private DefaultDLViewFileVersionDisplayContext(HttpServletRequest request, FileVersion fileVersion,
            FileShortcut fileShortcut, DLMimeTypeDisplayContext dlMimeTypeDisplayContext,
            ResourceBundle resourceBundle, StorageEngine storageEngine) {

        try {
            _fileVersion = fileVersion;
            _dlMimeTypeDisplayContext = dlMimeTypeDisplayContext;
            _resourceBundle = resourceBundle;
            _storageEngine = storageEngine;

            DLRequestHelper dlRequestHelper = new DLRequestHelper(request);

            _dlPortletInstanceSettingsHelper = new DLPortletInstanceSettingsHelper(dlRequestHelper);

            _fileEntryDisplayContextHelper = new FileEntryDisplayContextHelper(
                    dlRequestHelper.getPermissionChecker(), _getFileEntry(fileVersion));

            _fileVersionDisplayContextHelper = new FileVersionDisplayContextHelper(fileVersion);

            if (fileShortcut == null) {
                _uiItemsBuilder = new UIItemsBuilder(request, fileVersion, _resourceBundle);
            } else {
                _uiItemsBuilder = new UIItemsBuilder(request, fileShortcut, _resourceBundle);
            }
        } catch (PortalException pe) {
            throw new SystemException("Unable to build DefaultDLViewFileVersionDisplayContext for " + fileVersion,
                    pe);
        }
    }

    private FileEntry _getFileEntry(FileVersion fileVersion) throws PortalException {

        if (fileVersion != null) {
            return fileVersion.getFileEntry();
        }

        return null;
    }

    private List<MenuItem> _getMenuItems() throws PortalException {
        List<MenuItem> menuItems = new ArrayList<>();

        if (_dlPortletInstanceSettingsHelper.isShowActions()) {
            _uiItemsBuilder.addDownloadMenuItem(menuItems);

            _uiItemsBuilder.addOpenInMsOfficeMenuItem(menuItems);

            _uiItemsBuilder.addViewOriginalFileMenuItem(menuItems);

            _uiItemsBuilder.addEditMenuItem(menuItems);

            _uiItemsBuilder.addMoveMenuItem(menuItems);

            _uiItemsBuilder.addCheckoutMenuItem(menuItems);

            _uiItemsBuilder.addCheckinMenuItem(menuItems);

            _uiItemsBuilder.addCancelCheckoutMenuItem(menuItems);

            _uiItemsBuilder.addPermissionsMenuItem(menuItems);

            _uiItemsBuilder.addDeleteMenuItem(menuItems);
        }

        return menuItems;
    }

    private static final UUID _UUID = UUID.fromString("85F6C50E-3893-4E32-9D63-208528A503FA");

    private List<DDMStructure> _ddmStructures;
    private final DLMimeTypeDisplayContext _dlMimeTypeDisplayContext;
    private final DLPortletInstanceSettingsHelper _dlPortletInstanceSettingsHelper;
    private final FileEntryDisplayContextHelper _fileEntryDisplayContextHelper;
    private final FileVersion _fileVersion;
    private final FileVersionDisplayContextHelper _fileVersionDisplayContextHelper;
    private final ResourceBundle _resourceBundle;
    private final StorageEngine _storageEngine;
    private final UIItemsBuilder _uiItemsBuilder;

}