/**
* 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.document.library.web.internal.util.DLTrashUtil;
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 PĂ©rez
*/
public class DefaultDLViewFileVersionDisplayContext
implements DLViewFileVersionDisplayContext {
public DefaultDLViewFileVersionDisplayContext(
HttpServletRequest request, HttpServletResponse response,
FileShortcut fileShortcut,
DLMimeTypeDisplayContext dlMimeTypeDisplayContext,
ResourceBundle resourceBundle, StorageEngine storageEngine,
DLTrashUtil dlTrashUtil)
throws PortalException {
this(
request, fileShortcut.getFileVersion(), fileShortcut,
dlMimeTypeDisplayContext, resourceBundle, storageEngine,
dlTrashUtil);
}
public DefaultDLViewFileVersionDisplayContext(
HttpServletRequest request, HttpServletResponse response,
FileVersion fileVersion,
DLMimeTypeDisplayContext dlMimeTypeDisplayContext,
ResourceBundle resourceBundle, StorageEngine storageEngine,
DLTrashUtil dlTrashUtil) {
this(
request, fileVersion, null, dlMimeTypeDisplayContext,
resourceBundle, storageEngine, dlTrashUtil);
}
@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,
DLTrashUtil dlTrashUtil) {
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, dlTrashUtil);
}
else {
_uiItemsBuilder = new UIItemsBuilder(
request, fileShortcut, _resourceBundle, dlTrashUtil);
}
}
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;
}