/**
* 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.logic;
import com.liferay.document.library.display.context.DLUIItemKeys;
import com.liferay.document.library.kernel.document.conversion.DocumentConversionUtil;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.document.library.kernel.model.DLFileEntryConstants;
import com.liferay.document.library.kernel.model.DLFolderConstants;
import com.liferay.document.library.kernel.util.DLUtil;
import com.liferay.document.library.web.internal.util.DLTrashUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.language.UnicodeLanguageUtil;
import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
import com.liferay.portal.kernel.portlet.LiferayWindowState;
import com.liferay.portal.kernel.portlet.PortletURLUtil;
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.BrowserSnifferUtil;
import com.liferay.portal.kernel.servlet.taglib.ui.DeleteMenuItem;
import com.liferay.portal.kernel.servlet.taglib.ui.JavaScriptMenuItem;
import com.liferay.portal.kernel.servlet.taglib.ui.JavaScriptToolbarItem;
import com.liferay.portal.kernel.servlet.taglib.ui.JavaScriptUIItem;
import com.liferay.portal.kernel.servlet.taglib.ui.MenuItem;
import com.liferay.portal.kernel.servlet.taglib.ui.ToolbarItem;
import com.liferay.portal.kernel.servlet.taglib.ui.URLMenuItem;
import com.liferay.portal.kernel.servlet.taglib.ui.URLToolbarItem;
import com.liferay.portal.kernel.servlet.taglib.ui.URLUIItem;
import com.liferay.portal.kernel.template.Template;
import com.liferay.portal.kernel.template.TemplateConstants;
import com.liferay.portal.kernel.template.TemplateManagerUtil;
import com.liferay.portal.kernel.template.URLTemplateResource;
import com.liferay.portal.kernel.theme.PortletDisplay;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.Constants;
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.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.TextFormatter;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.util.PropsValues;
import com.liferay.taglib.security.PermissionsURLTag;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import javax.portlet.ActionRequest;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletURL;
import javax.portlet.WindowStateException;
import javax.servlet.http.HttpServletRequest;
/**
* @author Iván Zaera
*/
public class UIItemsBuilder {
public UIItemsBuilder(
HttpServletRequest request, FileShortcut fileShortcut,
ResourceBundle resourceBundle, DLTrashUtil dlTrashUtil)
throws PortalException {
this(
request, fileShortcut.getFileVersion(), fileShortcut,
resourceBundle, dlTrashUtil);
}
public UIItemsBuilder(
HttpServletRequest request, FileVersion fileVersion,
ResourceBundle resourceBundle, DLTrashUtil dlTrashUtil) {
this(request, fileVersion, null, resourceBundle, dlTrashUtil);
}
public void addCancelCheckoutMenuItem(List<MenuItem> menuItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.
isCancelCheckoutDocumentActionAvailable()) {
return;
}
PortletURL portletURL = _getActionURL(
"/document_library/edit_file_entry", Constants.CANCEL_CHECKOUT);
portletURL.setParameter(
"fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
_addURLUIItem(
new URLMenuItem(), menuItems, DLUIItemKeys.CANCEL_CHECKOUT,
"cancel-checkout[document]", portletURL.toString());
}
public void addCancelCheckoutToolbarItem(List<ToolbarItem> toolbarItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.
isCancelCheckoutDocumentActionAvailable()) {
return;
}
_addJavaScriptUIItem(
new JavaScriptToolbarItem(), toolbarItems,
DLUIItemKeys.CANCEL_CHECKOUT,
LanguageUtil.get(_resourceBundle, "cancel-checkout[document]"),
getSubmitFormJavaScript(Constants.CANCEL_CHECKOUT, null));
}
public void addCheckinMenuItem(List<MenuItem> menuItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isCheckinActionAvailable()) {
return;
}
menuItems.add(getJavacriptCheckinMenuItem());
}
public void addCheckinToolbarItem(List<ToolbarItem> toolbarItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isCheckinActionAvailable()) {
return;
}
PortletURL portletURL = _getActionURL(
"/document_library/edit_file_entry", Constants.CHECKIN);
portletURL.setParameter(
"fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
JavaScriptToolbarItem javaScriptToolbarItem = _addJavaScriptUIItem(
new JavaScriptToolbarItem(), toolbarItems, DLUIItemKeys.CHECKIN,
LanguageUtil.get(_resourceBundle, "checkin"),
getNamespace() + "showVersionDetailsDialog('" + portletURL + "');");
String javaScript =
"/com/liferay/document/library/web/display/context/dependencies" +
"/checkin_js.ftl";
Class<?> clazz = getClass();
URLTemplateResource urlTemplateResource = new URLTemplateResource(
javaScript, clazz.getResource(javaScript));
Template template = TemplateManagerUtil.getTemplate(
TemplateConstants.LANG_TYPE_FTL, urlTemplateResource, false);
template.put(
"dialogCancelButtonLabel",
LanguageUtil.get(_resourceBundle, "cancel"));
template.put(
"dialogSaveButtonLabel", LanguageUtil.get(_resourceBundle, "save"));
template.put(
"dialogTitle",
UnicodeLanguageUtil.get(_resourceBundle, "describe-your-changes"));
template.put("namespace", getNamespace());
UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
template.processTemplate(unsyncStringWriter);
javaScriptToolbarItem.setJavaScript(unsyncStringWriter.toString());
}
public void addCheckoutMenuItem(List<MenuItem> menuItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.
isCheckoutDocumentActionAvailable()) {
return;
}
PortletURL portletURL = _getActionURL(
"/document_library/edit_file_entry", Constants.CHECKOUT);
portletURL.setParameter(
"fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
_addURLUIItem(
new URLMenuItem(), menuItems, DLUIItemKeys.CHECKOUT,
"checkout[document]", portletURL.toString());
}
public void addCheckoutToolbarItem(List<ToolbarItem> toolbarItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.
isCheckoutDocumentActionAvailable()) {
return;
}
_addJavaScriptUIItem(
new JavaScriptToolbarItem(), toolbarItems, DLUIItemKeys.CHECKOUT,
LanguageUtil.get(_resourceBundle, "checkout[document]"),
getSubmitFormJavaScript(Constants.CHECKOUT, null));
}
public void addCompareToMenuItem(List<MenuItem> menuItems)
throws PortalException {
if (!DocumentConversionUtil.isComparableVersion(
_fileVersion.getExtension())) {
return;
}
PortletURL viewFileEntryURL = _getRenderURL(
"/document_library/view_file_entry", _getRedirect());
PortletURL selectFileVersionURL = _getRenderURL(
"/document_library/select_file_version",
viewFileEntryURL.toString());
try {
selectFileVersionURL.setWindowState(LiferayWindowState.POP_UP);
}
catch (WindowStateException wse) {
throw new PortalException(wse);
}
selectFileVersionURL.setParameter("version", _fileVersion.getVersion());
Map<String, Object> data = new HashMap<>();
data.put("uri", selectFileVersionURL);
PortletURL compareVersionURL = _getRenderURL(
"/document_library/compare_versions", null);
compareVersionURL.setParameter("backURL", _getCurrentURL());
String jsNamespace =
getNamespace() + String.valueOf(_fileVersion.getFileVersionId());
StringBundler sb = new StringBundler(4);
sb.append(jsNamespace);
sb.append("compareVersionDialog('");
sb.append(selectFileVersionURL.toString());
sb.append("');");
JavaScriptMenuItem javascriptMenuItem = _addJavaScriptUIItem(
new JavaScriptMenuItem(), menuItems, DLUIItemKeys.COMPARE_TO,
"compare-to", sb.toString());
javascriptMenuItem.setData(data);
String javaScript =
"/com/liferay/document/library/web/display/context/dependencies" +
"/compare_to_js.ftl";
Class<?> clazz = getClass();
URLTemplateResource urlTemplateResource = new URLTemplateResource(
javaScript, clazz.getResource(javaScript));
Template template = TemplateManagerUtil.getTemplate(
TemplateConstants.LANG_TYPE_FTL, urlTemplateResource, false);
template.put("compareVersionURL", compareVersionURL.toString());
template.put(
"dialogTitle",
UnicodeLanguageUtil.get(_request, "compare-versions"));
template.put("jsNamespace", jsNamespace);
template.put("namespace", getNamespace());
UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
template.processTemplate(unsyncStringWriter);
javascriptMenuItem.setJavaScript(unsyncStringWriter.toString());
}
public void addDeleteMenuItem(List<MenuItem> menuItems)
throws PortalException {
String cmd = null;
if (isDeleteActionAvailable()) {
cmd = Constants.DELETE;
}
else if (isMoveToTheRecycleBinActionAvailable()) {
cmd = Constants.MOVE_TO_TRASH;
}
else {
return;
}
DeleteMenuItem deleteMenuItem = new DeleteMenuItem();
deleteMenuItem.setKey(DLUIItemKeys.DELETE);
if (cmd.equals(Constants.MOVE_TO_TRASH)) {
deleteMenuItem.setTrash(true);
}
String mvcActionCommandName = "/document_library/edit_file_entry";
if (_fileShortcut != null) {
mvcActionCommandName = "/document_library/edit_file_shortcut";
}
PortletURL portletURL = _getActionURL(mvcActionCommandName, cmd);
if (_fileShortcut == null) {
portletURL.setParameter(
"fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
}
else {
portletURL.setParameter(
"fileShortcutId",
String.valueOf(_fileShortcut.getFileShortcutId()));
}
deleteMenuItem.setURL(portletURL.toString());
menuItems.add(deleteMenuItem);
}
public void addDeleteToolbarItem(List<ToolbarItem> toolbarItems)
throws PortalException {
if (!isDeleteActionAvailable()) {
return;
}
LiferayPortletResponse liferayPortletResponse =
_getLiferayPortletResponse();
PortletURL portletURL = liferayPortletResponse.createRenderURL();
long folderId = _fileEntry.getFolderId();
if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
portletURL.setParameter(
"mvcRenderCommandName", "/document_library/view");
}
else {
portletURL.setParameter(
"mvcRenderCommandName", "/document_library/view_folder");
}
portletURL.setParameter("folderId", String.valueOf(folderId));
StringBundler sb = new StringBundler(5);
sb.append("if (confirm('");
sb.append(
UnicodeLanguageUtil.get(
_resourceBundle, "are-you-sure-you-want-to-delete-this"));
sb.append("')) {");
sb.append(
getSubmitFormJavaScript(Constants.DELETE, portletURL.toString()));
sb.append("}");
_addJavaScriptUIItem(
new JavaScriptToolbarItem(), toolbarItems, DLUIItemKeys.DELETE,
LanguageUtil.get(_resourceBundle, "delete"), sb.toString());
}
public void addDeleteVersionMenuItem(List<MenuItem> menuItems)
throws PortalException {
if ((_fileEntry == null) ||
(_fileVersion.getStatus() != WorkflowConstants.STATUS_APPROVED) ||
!_fileEntryDisplayContextHelper.hasDeletePermission() ||
!(_fileEntry.getModel() instanceof DLFileEntry) ||
(_fileEntry.getFileVersionsCount(
WorkflowConstants.STATUS_APPROVED) <= 1)) {
return;
}
PortletURL viewFileEntryURL = _getRenderURL(
"/document_library/view_file_entry", _getRedirect());
DeleteMenuItem deleteMenuItem = new DeleteMenuItem();
deleteMenuItem.setKey(DLUIItemKeys.DELETE_VERSION);
deleteMenuItem.setLabel("delete-version");
PortletURL portletURL = _getActionURL(
"/document_library/edit_file_entry", Constants.DELETE,
viewFileEntryURL.toString());
portletURL.setParameter(
"fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
portletURL.setParameter("version", _fileVersion.getVersion());
deleteMenuItem.setURL(portletURL.toString());
menuItems.add(deleteMenuItem);
}
public void addDownloadMenuItem(List<MenuItem> menuItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isDownloadActionAvailable()) {
return;
}
String label = TextFormatter.formatStorageSize(
_fileEntry.getSize(), _themeDisplay.getLocale());
label = _themeDisplay.translate("download") + " (" + label + ")";
final boolean appendVersion;
if (StringUtil.equalsIgnoreCase(
_fileEntry.getVersion(), _fileVersion.getVersion())) {
appendVersion = false;
}
else {
appendVersion = true;
}
String url = DLUtil.getDownloadURL(
_fileEntry, _fileVersion, _themeDisplay, StringPool.BLANK,
appendVersion, true);
URLMenuItem urlMenuItem = _addURLUIItem(
new URLMenuItem(), menuItems, DLUIItemKeys.DOWNLOAD, label, url);
Map<String, Object> data = new HashMap<>();
data.put("senna-off", "true");
urlMenuItem.setData(data);
urlMenuItem.setMethod("get");
urlMenuItem.setTarget("_blank");
}
public void addDownloadToolbarItem(List<ToolbarItem> toolbarItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isDownloadActionAvailable()) {
return;
}
URLToolbarItem urlToolbarItem = new URLToolbarItem();
_addURLUIItem(
urlToolbarItem, toolbarItems, DLUIItemKeys.DOWNLOAD,
LanguageUtil.get(_resourceBundle, "download"),
DLUtil.getDownloadURL(
_fileEntry, _fileVersion, _themeDisplay, StringPool.BLANK));
urlToolbarItem.setTarget("_blank");
}
public void addEditMenuItem(List<MenuItem> menuItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isEditActionAvailable()) {
return;
}
PortletURL portletURL = null;
if (_fileShortcut == null) {
portletURL = _getRenderURL("/document_library/edit_file_entry");
}
else {
portletURL = _getRenderURL("/document_library/edit_file_shortcut");
}
portletURL.setParameter("backURL", _getCurrentURL());
_addURLUIItem(
new URLMenuItem(), menuItems, DLUIItemKeys.EDIT, "edit",
portletURL.toString());
}
public void addEditToolbarItem(List<ToolbarItem> toolbarItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isEditActionAvailable()) {
return;
}
PortletURL portletURL = _getRenderURL(
"/document_library/edit_file_entry");
_addURLUIItem(
new URLToolbarItem(), toolbarItems, DLUIItemKeys.EDIT,
LanguageUtil.get(_resourceBundle, "edit"), portletURL.toString());
}
public void addMoveMenuItem(List<MenuItem> menuItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isMoveActionAvailable()) {
return;
}
LiferayPortletResponse liferayPortletResponse =
_getLiferayPortletResponse();
PortletURL portletURL = liferayPortletResponse.createRenderURL();
portletURL.setParameter(
"mvcRenderCommandName", "/document_library/move_entry");
PortletURL redirectURL = liferayPortletResponse.createRenderURL();
long folderId = 0;
if (_fileShortcut != null) {
folderId = _fileShortcut.getFolderId();
}
else {
folderId = _fileEntry.getFolderId();
}
if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
redirectURL.setParameter(
"mvcRenderCommandName", "/document_library/view");
}
else {
redirectURL.setParameter(
"mvcRenderCommandName", "/document_library/view_folder");
}
redirectURL.setParameter("folderId", String.valueOf(folderId));
portletURL.setParameter("redirect", redirectURL.toString());
if (_fileShortcut != null) {
portletURL.setParameter(
"rowIdsDLFileShortcut",
String.valueOf(_fileShortcut.getFileShortcutId()));
}
else {
portletURL.setParameter(
"rowIdsFileEntry", String.valueOf(_fileEntry.getFileEntryId()));
}
_addURLUIItem(
new URLMenuItem(), menuItems, DLUIItemKeys.MOVE, "move",
portletURL.toString());
}
public void addMoveToolbarItem(List<ToolbarItem> toolbarItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isMoveActionAvailable()) {
return;
}
PortletURL portletURL = _getRenderURL("/document_library/move_entry");
_addURLUIItem(
new URLToolbarItem(), toolbarItems, DLUIItemKeys.MOVE,
LanguageUtil.get(_resourceBundle, "move"), portletURL.toString());
}
public void addMoveToTheRecycleBinToolbarItem(
List<ToolbarItem> toolbarItems)
throws PortalException {
if (!isMoveToTheRecycleBinActionAvailable()) {
return;
}
LiferayPortletResponse liferayPortletResponse =
_getLiferayPortletResponse();
PortletURL portletURL = liferayPortletResponse.createRenderURL();
long folderId = _fileEntry.getFolderId();
if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
portletURL.setParameter(
"mvcRenderCommandName", "/document_library/view");
}
else {
portletURL.setParameter(
"mvcRenderCommandName", "/document_library/view_folder");
}
portletURL.setParameter("folderId", String.valueOf(folderId));
portletURL.setParameter(
"folderId", String.valueOf(_fileEntry.getFolderId()));
_addJavaScriptUIItem(
new JavaScriptToolbarItem(), toolbarItems,
DLUIItemKeys.MOVE_TO_THE_RECYCLE_BIN,
LanguageUtil.get(_resourceBundle, "move-to-the-recycle-bin"),
getSubmitFormJavaScript(
Constants.MOVE_TO_TRASH, portletURL.toString()));
}
public void addOpenInMsOfficeMenuItem(List<MenuItem> menuItems)
throws PortalException {
if (!isOpenInMsOfficeActionAvailable()) {
return;
}
String webDavURL = DLUtil.getWebDavURL(
_themeDisplay, _fileEntry.getFolder(), _fileEntry,
PropsValues.
DL_FILE_ENTRY_OPEN_IN_MS_OFFICE_MANUAL_CHECK_IN_REQUIRED,
true);
String onClick = getNamespace() + "openDocument('" + webDavURL + "');";
JavaScriptMenuItem javascriptMenuItem = _addJavaScriptUIItem(
new JavaScriptMenuItem(), menuItems, DLUIItemKeys.OPEN_IN_MS_OFFICE,
"open-in-ms-office", onClick);
String javaScript =
"/com/liferay/document/library/web/display/context/dependencies" +
"/open_in_ms_office_js.ftl";
Class<?> clazz = getClass();
URLTemplateResource urlTemplateResource = new URLTemplateResource(
javaScript, clazz.getResource(javaScript));
Template template = TemplateManagerUtil.getTemplate(
TemplateConstants.LANG_TYPE_FTL, urlTemplateResource, false);
template.put(
"errorMessage",
UnicodeLanguageUtil.get(
_resourceBundle,
"cannot-open-the-requested-document-due-to-the-following-" +
"reason"));
template.put("namespace", getNamespace());
UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
template.processTemplate(unsyncStringWriter);
javascriptMenuItem.setJavaScript(unsyncStringWriter.toString());
}
public void addOpenInMsOfficeToolbarItem(List<ToolbarItem> toolbarItems)
throws PortalException {
if (!isOpenInMsOfficeActionAvailable()) {
return;
}
String webDavURL = DLUtil.getWebDavURL(
_themeDisplay, _fileEntry.getFolder(), _fileEntry,
PropsValues.
DL_FILE_ENTRY_OPEN_IN_MS_OFFICE_MANUAL_CHECK_IN_REQUIRED);
StringBundler sb = new StringBundler(4);
sb.append(getNamespace());
sb.append("openDocument('");
sb.append(webDavURL);
sb.append("');");
_addJavaScriptUIItem(
new JavaScriptToolbarItem(), toolbarItems,
DLUIItemKeys.OPEN_IN_MS_OFFICE,
LanguageUtil.get(_resourceBundle, "open-in-ms-office"),
sb.toString());
}
public void addPermissionsMenuItem(List<MenuItem> menuItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isPermissionsButtonVisible()) {
return;
}
String url = null;
try {
url = PermissionsURLTag.doTag(
null, DLFileEntryConstants.getClassName(),
HtmlUtil.unescape(_fileEntry.getTitle()), null,
String.valueOf(_fileEntry.getFileEntryId()),
LiferayWindowState.POP_UP.toString(), null, _request);
}
catch (Exception e) {
throw new SystemException("Unable to create permissions URL", e);
}
URLMenuItem urlMenuItem = _addURLUIItem(
new URLMenuItem(), menuItems, DLUIItemKeys.PERMISSIONS,
"permissions", url);
urlMenuItem.setMethod("get");
urlMenuItem.setUseDialog(true);
}
public void addPermissionsToolbarItem(List<ToolbarItem> toolbarItems)
throws PortalException {
if (!_fileEntryDisplayContextHelper.isPermissionsButtonVisible()) {
return;
}
String permissionsURL = null;
try {
permissionsURL = PermissionsURLTag.doTag(
null, DLFileEntryConstants.getClassName(),
HtmlUtil.unescape(_fileEntry.getTitle()), null,
String.valueOf(_fileEntry.getFileEntryId()),
LiferayWindowState.POP_UP.toString(), null, _request);
}
catch (Exception e) {
throw new SystemException("Unable to create permissions URL", e);
}
StringBundler sb = new StringBundler(5);
sb.append("Liferay.Util.openWindow({title: '");
sb.append(UnicodeLanguageUtil.get(_resourceBundle, "permissions"));
sb.append("', uri: '");
sb.append(permissionsURL);
sb.append("'});");
_addJavaScriptUIItem(
new JavaScriptToolbarItem(), toolbarItems, DLUIItemKeys.PERMISSIONS,
LanguageUtil.get(_resourceBundle, "permissions"), sb.toString());
}
public void addRevertToVersionMenuItem(List<MenuItem> menuItems)
throws PortalException {
if ((_fileVersion.getStatus() != WorkflowConstants.STATUS_APPROVED) ||
!_fileEntryDisplayContextHelper.hasUpdatePermission()) {
return;
}
FileVersion latestFileVersion = _fileEntry.getLatestFileVersion();
String latestFileVersionVersion = latestFileVersion.getVersion();
if (latestFileVersionVersion.equals(_fileVersion.getVersion())) {
return;
}
PortletURL viewFileEntryURL = _getRenderURL(
"/document_library/view_file_entry", _getRedirect());
PortletURL portletURL = _getActionURL(
"/document_library/edit_file_entry", Constants.REVERT,
viewFileEntryURL.toString());
portletURL.setParameter(
"fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
portletURL.setParameter("version", _fileVersion.getVersion());
_addURLUIItem(
new URLMenuItem(), menuItems, DLUIItemKeys.REVERT, "revert",
portletURL.toString());
}
public void addViewOriginalFileMenuItem(List<MenuItem> menuItems) {
if (_fileShortcut == null) {
return;
}
PortletURL portletURL = _getRenderURL(
"/document_library/view_file_entry");
portletURL.setParameter(
"fileEntryId", String.valueOf(_fileShortcut.getToFileEntryId()));
_addURLUIItem(
new URLMenuItem(), menuItems, DLUIItemKeys.VIEW_ORIGINAL_FILE,
"view-original-file", portletURL.toString());
}
public void addViewVersionMenuItem(List<MenuItem> menuItems) {
if (_fileShortcut != null) {
return;
}
PortletURL portletURL = _getRenderURL(
"/document_library/view_file_entry", _getRedirect());
portletURL.setParameter("version", _fileVersion.getVersion());
_addURLUIItem(
new URLMenuItem(), menuItems, DLUIItemKeys.VIEW_VERSION,
"view[action]", portletURL.toString());
}
public JavaScriptMenuItem getJavacriptCheckinMenuItem()
throws PortalException {
PortletURL portletURL = _getActionURL(
"/document_library/edit_file_entry", Constants.CHECKIN);
portletURL.setParameter(
"fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
JavaScriptMenuItem javascriptMenuItem = new JavaScriptMenuItem();
javascriptMenuItem.setKey(DLUIItemKeys.CHECKIN);
javascriptMenuItem.setLabel("checkin");
javascriptMenuItem.setOnClick(
getNamespace() + "showVersionDetailsDialog('" + portletURL + "');");
String javaScript =
"/com/liferay/document/library/web/display/context/dependencies" +
"/checkin_js.ftl";
Class<?> clazz = getClass();
URLTemplateResource urlTemplateResource = new URLTemplateResource(
javaScript, clazz.getResource(javaScript));
Template template = TemplateManagerUtil.getTemplate(
TemplateConstants.LANG_TYPE_FTL, urlTemplateResource, false);
template.put(
"dialogCancelButtonLabel",
LanguageUtil.get(_resourceBundle, "cancel"));
template.put(
"dialogSaveButtonLabel", LanguageUtil.get(_resourceBundle, "save"));
template.put(
"dialogTitle",
UnicodeLanguageUtil.get(_resourceBundle, "describe-your-changes"));
template.put("namespace", getNamespace());
template.put(
"randomNamespace", _request.getAttribute("randomNamespace"));
UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
template.processTemplate(unsyncStringWriter);
javascriptMenuItem.setJavaScript(unsyncStringWriter.toString());
return javascriptMenuItem;
}
public boolean isOpenInMsOfficeActionAvailable() throws PortalException {
if (_fileEntryDisplayContextHelper.hasViewPermission() &&
_fileVersionDisplayContextHelper.isMsOffice() &&
_isWebDAVEnabled() && _isIEOnWin32()) {
return true;
}
return false;
}
protected String getNamespace() {
LiferayPortletResponse liferayPortletResponse =
_getLiferayPortletResponse();
return liferayPortletResponse.getNamespace();
}
protected String getSubmitFormJavaScript(String cmd, String redirect) {
StringBundler sb = new StringBundler(18);
sb.append("document.");
sb.append(getNamespace());
sb.append("fm.");
sb.append(getNamespace());
sb.append(Constants.CMD);
sb.append(".value = '");
sb.append(cmd);
sb.append("';");
if (redirect != null) {
sb.append("document.");
sb.append(getNamespace());
sb.append("fm.");
sb.append(getNamespace());
sb.append("redirect.value = '");
sb.append(redirect);
sb.append("';");
}
sb.append("submitForm(document.");
sb.append(getNamespace());
sb.append("fm);");
return sb.toString();
}
protected boolean isDeleteActionAvailable() throws PortalException {
if (_fileEntryDisplayContextHelper.isFileEntryDeletable() &&
!_isFileEntryTrashable()) {
return true;
}
return false;
}
protected boolean isMoveToTheRecycleBinActionAvailable()
throws PortalException {
if (!isDeleteActionAvailable() &&
_fileEntryDisplayContextHelper.isFileEntryDeletable()) {
return true;
}
return false;
}
private UIItemsBuilder(
HttpServletRequest request, FileVersion fileVersion,
FileShortcut fileShortcut, ResourceBundle resourceBundle,
DLTrashUtil dlTrashUtil) {
try {
_request = request;
_fileVersion = fileVersion;
_fileShortcut = fileShortcut;
_resourceBundle = resourceBundle;
_dlTrashUtil = dlTrashUtil;
FileEntry fileEntry = null;
if (fileVersion != null) {
fileEntry = fileVersion.getFileEntry();
}
_fileEntry = fileEntry;
_themeDisplay = (ThemeDisplay)request.getAttribute(
WebKeys.THEME_DISPLAY);
_fileEntryDisplayContextHelper = new FileEntryDisplayContextHelper(
_themeDisplay.getPermissionChecker(), _fileEntry);
_fileVersionDisplayContextHelper =
new FileVersionDisplayContextHelper(fileVersion);
}
catch (PortalException pe) {
throw new SystemException(
"Unable to build UIItemsBuilder for " + fileVersion, pe);
}
}
private <T extends JavaScriptUIItem> T _addJavaScriptUIItem(
T javascriptUIItem, List<? super T> javascriptUIItems, String key,
String label, String onClick) {
javascriptUIItem.setKey(key);
javascriptUIItem.setLabel(label);
javascriptUIItem.setOnClick(onClick);
javascriptUIItems.add(javascriptUIItem);
return javascriptUIItem;
}
private <T extends URLUIItem> T _addURLUIItem(
T urlUIItem, List<? super T> urlUIItems, String key, String label,
String url) {
urlUIItem.setKey(key);
urlUIItem.setLabel(label);
urlUIItem.setURL(url);
urlUIItems.add(urlUIItem);
return urlUIItem;
}
private PortletURL _getActionURL(String mvcActionCommandName, String cmd) {
return _getActionURL(mvcActionCommandName, cmd, _getCurrentURL());
}
private PortletURL _getActionURL(
String mvcActionCommandName, String cmd, String redirect) {
LiferayPortletResponse liferayPortletResponse =
_getLiferayPortletResponse();
PortletURL portletURL = liferayPortletResponse.createActionURL();
portletURL.setParameter(
ActionRequest.ACTION_NAME, mvcActionCommandName);
portletURL.setParameter(Constants.CMD, cmd);
portletURL.setParameter("redirect", redirect);
return portletURL;
}
private String _getCurrentURL() {
if (_currentURL != null) {
return _currentURL;
}
LiferayPortletRequest liferayPortletRequest =
_getLiferayPortletRequest();
LiferayPortletResponse liferayPortletResponse =
_getLiferayPortletResponse();
PortletURL portletURL = PortletURLUtil.getCurrent(
liferayPortletRequest, liferayPortletResponse);
_currentURL = portletURL.toString();
return _currentURL;
}
private LiferayPortletRequest _getLiferayPortletRequest() {
PortletRequest portletRequest = (PortletRequest)_request.getAttribute(
JavaConstants.JAVAX_PORTLET_REQUEST);
return PortalUtil.getLiferayPortletRequest(portletRequest);
}
private LiferayPortletResponse _getLiferayPortletResponse() {
PortletResponse portletResponse =
(PortletResponse)_request.getAttribute(
JavaConstants.JAVAX_PORTLET_RESPONSE);
return PortalUtil.getLiferayPortletResponse(portletResponse);
}
private String _getRedirect() {
if (_redirect == null) {
_redirect = ParamUtil.getString(_request, "redirect");
}
return _redirect;
}
private PortletURL _getRenderURL(String mvcRenderCommandName) {
return _getRenderURL(mvcRenderCommandName, _getCurrentURL());
}
private PortletURL _getRenderURL(
String mvcRenderCommandName, String redirect) {
LiferayPortletResponse liferayPortletResponse =
_getLiferayPortletResponse();
PortletURL portletURL = liferayPortletResponse.createRenderURL();
portletURL.setParameter("mvcRenderCommandName", mvcRenderCommandName);
if (Validator.isNotNull(redirect)) {
portletURL.setParameter("redirect", redirect);
}
if (_fileShortcut != null) {
portletURL.setParameter(
"fileShortcutId",
String.valueOf(_fileShortcut.getFileShortcutId()));
}
else {
portletURL.setParameter(
"fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
}
return portletURL;
}
private boolean _isFileEntryTrashable() throws PortalException {
if (_fileEntryDisplayContextHelper.isDLFileEntry() &&
_isTrashEnabled()) {
return true;
}
return false;
}
private boolean _isIEOnWin32() {
if (_ieOnWin32 == null) {
_ieOnWin32 = BrowserSnifferUtil.isIeOnWin32(_request);
}
return _ieOnWin32;
}
private boolean _isTrashEnabled() throws PortalException {
if (_trashEnabled != null) {
return _trashEnabled;
}
_trashEnabled = false;
if (_dlTrashUtil == null) {
return _trashEnabled;
}
_trashEnabled = _dlTrashUtil.isTrashEnabled(
_themeDisplay.getScopeGroupId(), _fileEntry.getRepositoryId());
return _trashEnabled;
}
private boolean _isWebDAVEnabled() {
PortletDisplay portletDisplay = _themeDisplay.getPortletDisplay();
return portletDisplay.isWebDAVEnabled();
}
private String _currentURL;
private final DLTrashUtil _dlTrashUtil;
private final FileEntry _fileEntry;
private final FileEntryDisplayContextHelper _fileEntryDisplayContextHelper;
private FileShortcut _fileShortcut;
private final FileVersion _fileVersion;
private final FileVersionDisplayContextHelper
_fileVersionDisplayContextHelper;
private Boolean _ieOnWin32;
private String _redirect;
private final HttpServletRequest _request;
private final ResourceBundle _resourceBundle;
private final ThemeDisplay _themeDisplay;
private Boolean _trashEnabled;
}