001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.documentlibrary.display.context.logic;
016    
017    import com.liferay.portal.kernel.bean.BeanParamUtil;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.exception.SystemException;
020    import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
021    import com.liferay.portal.kernel.language.LanguageUtil;
022    import com.liferay.portal.kernel.language.UnicodeLanguageUtil;
023    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
024    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
025    import com.liferay.portal.kernel.portlet.LiferayWindowState;
026    import com.liferay.portal.kernel.repository.model.FileEntry;
027    import com.liferay.portal.kernel.repository.model.FileShortcut;
028    import com.liferay.portal.kernel.repository.model.FileVersion;
029    import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
030    import com.liferay.portal.kernel.servlet.taglib.ui.DeleteMenuItem;
031    import com.liferay.portal.kernel.servlet.taglib.ui.JavaScriptMenuItem;
032    import com.liferay.portal.kernel.servlet.taglib.ui.JavaScriptToolbarItem;
033    import com.liferay.portal.kernel.servlet.taglib.ui.JavaScriptUIItem;
034    import com.liferay.portal.kernel.servlet.taglib.ui.MenuItem;
035    import com.liferay.portal.kernel.servlet.taglib.ui.ToolbarItem;
036    import com.liferay.portal.kernel.servlet.taglib.ui.URLMenuItem;
037    import com.liferay.portal.kernel.servlet.taglib.ui.URLToolbarItem;
038    import com.liferay.portal.kernel.servlet.taglib.ui.URLUIItem;
039    import com.liferay.portal.kernel.template.Template;
040    import com.liferay.portal.kernel.template.TemplateConstants;
041    import com.liferay.portal.kernel.template.TemplateManagerUtil;
042    import com.liferay.portal.kernel.template.URLTemplateResource;
043    import com.liferay.portal.kernel.util.Constants;
044    import com.liferay.portal.kernel.util.HtmlUtil;
045    import com.liferay.portal.kernel.util.JavaConstants;
046    import com.liferay.portal.kernel.util.StringBundler;
047    import com.liferay.portal.kernel.util.StringPool;
048    import com.liferay.portal.kernel.util.TextFormatter;
049    import com.liferay.portal.theme.PortletDisplay;
050    import com.liferay.portal.theme.ThemeDisplay;
051    import com.liferay.portal.util.PortalUtil;
052    import com.liferay.portal.util.PropsValues;
053    import com.liferay.portal.util.WebKeys;
054    import com.liferay.portlet.PortletURLUtil;
055    import com.liferay.portlet.documentlibrary.display.context.DLUIItemKeys;
056    import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
057    import com.liferay.portlet.documentlibrary.util.DLUtil;
058    import com.liferay.portlet.trash.util.TrashUtil;
059    import com.liferay.taglib.security.PermissionsURLTag;
060    
061    import java.util.List;
062    
063    import javax.portlet.PortletRequest;
064    import javax.portlet.PortletResponse;
065    import javax.portlet.PortletURL;
066    
067    import javax.servlet.http.HttpServletRequest;
068    import javax.servlet.http.HttpServletResponse;
069    
070    /**
071     * @author Iv??n Zaera
072     */
073    public class UIItemsBuilder {
074    
075            public UIItemsBuilder(
076                            HttpServletRequest request, HttpServletResponse response,
077                            FileShortcut fileShortcut)
078                    throws PortalException {
079    
080                    this(request, response, fileShortcut.getFileVersion(), fileShortcut);
081            }
082    
083            public UIItemsBuilder(
084                    HttpServletRequest request, HttpServletResponse response,
085                    FileVersion fileVersion) {
086    
087                    this(request, response, fileVersion, null);
088            }
089    
090            public void addCancelCheckoutMenuItem(List<MenuItem> menuItems)
091                    throws PortalException {
092    
093                    if (!_fileEntryDisplayContextHelper.
094                                    isCancelCheckoutDocumentActionAvailable()) {
095    
096                            return;
097                    }
098    
099                    _addURLUIItem(
100                            new URLMenuItem(), menuItems, "icon-remove",
101                            DLUIItemKeys.CANCEL_CHECKOUT, "cancel-checkout[document]",
102                            _getActionURL(
103                                    "/document_library/edit_file_entry",
104                                    Constants.CANCEL_CHECKOUT));
105            }
106    
107            public void addCancelCheckoutToolbarItem(List<ToolbarItem> toolbarItems)
108                    throws PortalException {
109    
110                    if (!_fileEntryDisplayContextHelper.
111                                    isCancelCheckoutDocumentActionAvailable()) {
112    
113                            return;
114                    }
115    
116                    _addJavaScriptUIItem(
117                            new JavaScriptToolbarItem(), toolbarItems, "icon-undo",
118                            DLUIItemKeys.CANCEL_CHECKOUT,
119                            LanguageUtil.get(_request, "cancel-checkout[document]"),
120                            getSubmitFormJavaScript(Constants.CANCEL_CHECKOUT, null));
121            }
122    
123            public void addCheckinMenuItem(List<MenuItem> menuItems)
124                    throws PortalException {
125    
126                    if (!_fileEntryDisplayContextHelper.isCheckinActionAvailable()) {
127                            return;
128                    }
129    
130                    _addURLUIItem(
131                            new URLMenuItem(), menuItems, "icon-lock", DLUIItemKeys.CHECKIN,
132                            "checkin",
133                            _getActionURL(
134                                    "/document_library/edit_file_entry", Constants.CHECKIN));
135            }
136    
137            public void addCheckinToolbarItem(List<ToolbarItem> toolbarItems)
138                    throws PortalException {
139    
140                    if (!_fileEntryDisplayContextHelper.isCheckinActionAvailable()) {
141                            return;
142                    }
143    
144                    _addJavaScriptUIItem(
145                            new JavaScriptToolbarItem(), toolbarItems, "icon-lock",
146                            DLUIItemKeys.CHECKIN, LanguageUtil.get(_request, "checkin"),
147                            getSubmitFormJavaScript(Constants.CHECKIN, null));
148            }
149    
150            public void addCheckoutMenuItem(List<MenuItem> menuItems)
151                    throws PortalException {
152    
153                    if (!_fileEntryDisplayContextHelper.
154                                    isCheckoutDocumentActionAvailable()) {
155    
156                            return;
157                    }
158    
159                    _addURLUIItem(
160                            new URLMenuItem(), menuItems, "icon-unlock", DLUIItemKeys.CHECKOUT,
161                            "checkout[document]",
162                            _getActionURL(
163                                    "/document_library/edit_file_entry", Constants.CHECKOUT));
164            }
165    
166            public void addCheckoutToolbarItem(List<ToolbarItem> toolbarItems)
167                    throws PortalException {
168    
169                    if (!_fileEntryDisplayContextHelper.
170                                    isCheckoutDocumentActionAvailable()) {
171    
172                            return;
173                    }
174    
175                    _addJavaScriptUIItem(
176                            new JavaScriptToolbarItem(), toolbarItems, "icon-unlock",
177                            DLUIItemKeys.CHECKOUT,
178                            LanguageUtil.get(_request, "checkout[document]"),
179                            getSubmitFormJavaScript(Constants.CHECKOUT, null));
180            }
181    
182            public void addDeleteMenuItem(List<MenuItem> menuItems)
183                    throws PortalException {
184    
185                    if (isDeleteActionAvailable()) {
186                            DeleteMenuItem deleteMenuItem = new DeleteMenuItem();
187    
188                            deleteMenuItem.setKey(DLUIItemKeys.DELETE);
189                            deleteMenuItem.setURL(
190                                    _getActionURL(
191                                            "/document_library/edit_file_entry", Constants.DELETE));
192    
193                            menuItems.add(deleteMenuItem);
194                    }
195                    else if (isMoveToTheRecycleBinActionAvailable()) {
196                            DeleteMenuItem deleteMenuItem = new DeleteMenuItem();
197    
198                            deleteMenuItem.setKey(DLUIItemKeys.DELETE);
199                            deleteMenuItem.setTrash(true);
200                            deleteMenuItem.setURL(
201                                    _getActionURL(
202                                            "/document_library/edit_file_entry",
203                                            Constants.MOVE_TO_TRASH));
204    
205                            menuItems.add(deleteMenuItem);
206                    }
207            }
208    
209            public void addDeleteToolbarItem(List<ToolbarItem> toolbarItems)
210                    throws PortalException {
211    
212                    if (!isDeleteActionAvailable()) {
213                            return;
214                    }
215    
216                    LiferayPortletResponse liferayPortletResponse =
217                            _getLiferayPortletResponse();
218    
219                    PortletURL portletURL = liferayPortletResponse.createRenderURL();
220    
221                    portletURL.setParameter("struts_action", "/document_library/view");
222                    portletURL.setParameter(
223                            "folderId", String.valueOf(_fileEntry.getFolderId()));
224    
225                    StringBundler sb = new StringBundler(5);
226    
227                    sb.append("if (confirm('");
228                    sb.append(
229                            UnicodeLanguageUtil.get(
230                                    _request, "are-you-sure-you-want-to-delete-this"));
231                    sb.append("')) {");
232                    sb.append(
233                            getSubmitFormJavaScript(Constants.DELETE, portletURL.toString()));
234                    sb.append("}");
235    
236                    _addJavaScriptUIItem(
237                            new JavaScriptToolbarItem(), toolbarItems, "icon-remove",
238                            DLUIItemKeys.DELETE, LanguageUtil.get(_request, "delete"),
239                            sb.toString());
240            }
241    
242            public void addDownloadMenuItem(List<MenuItem> menuItems)
243                    throws PortalException {
244    
245                    if (!_fileEntryDisplayContextHelper.isDownloadActionAvailable()) {
246                            return;
247                    }
248    
249                    String label = TextFormatter.formatStorageSize(
250                            _fileEntry.getSize(), _themeDisplay.getLocale());
251    
252                    label = _themeDisplay.translate("download") + " (" + label + ")";
253    
254                    String url = DLUtil.getDownloadURL(
255                            _fileEntry, _fileVersion, _themeDisplay, StringPool.BLANK, false,
256                            true);
257    
258                    URLMenuItem urlMenuItem = _addURLUIItem(
259                            new URLMenuItem(), menuItems, "icon-download",
260                            DLUIItemKeys.DOWNLOAD, label, url);
261    
262                    urlMenuItem.setMethod("get");
263                    urlMenuItem.setTarget("_blank");
264            }
265    
266            public void addDownloadToolbarItem(List<ToolbarItem> toolbarItems)
267                    throws PortalException {
268    
269                    if (!_fileEntryDisplayContextHelper.isDownloadActionAvailable()) {
270                            return;
271                    }
272    
273                    _addURLUIItem(
274                            new URLToolbarItem(), toolbarItems, "icon-download",
275                            DLUIItemKeys.DOWNLOAD, LanguageUtil.get(_request, "download"),
276                            DLUtil.getDownloadURL(
277                                    _fileEntry, _fileVersion, _themeDisplay, StringPool.BLANK));
278            }
279    
280            public void addEditMenuItem(List<MenuItem> menuItems)
281                    throws PortalException {
282    
283                    if (!_fileEntryDisplayContextHelper.isEditActionAvailable()) {
284                            return;
285                    }
286    
287                    PortletURL portletURL = _getRenderURL(
288                            "/document_library/edit_file_entry");
289    
290                    portletURL.setParameter("backURL", _getCurrentURL());
291    
292                    _addURLUIItem(
293                            new URLMenuItem(), menuItems, "icon-edit", DLUIItemKeys.EDIT,
294                            "edit", portletURL.toString());
295            }
296    
297            public void addEditToolbarItem(List<ToolbarItem> toolbarItems)
298                    throws PortalException {
299    
300                    if (!_fileEntryDisplayContextHelper.isEditActionAvailable()) {
301                            return;
302                    }
303    
304                    PortletURL portletURL = _getRenderURL(
305                            "/document_library/edit_file_entry");
306    
307                    _addURLUIItem(
308                            new URLToolbarItem(), toolbarItems, "icon-edit", DLUIItemKeys.EDIT,
309                            LanguageUtil.get(_request, "edit"), portletURL.toString());
310            }
311    
312            public void addMoveMenuItem(List<MenuItem> menuItems)
313                    throws PortalException {
314    
315                    if (!_fileEntryDisplayContextHelper.isMoveActionAvailable()) {
316                            return;
317                    }
318    
319                    LiferayPortletResponse liferayPortletResponse =
320                            _getLiferayPortletResponse();
321    
322                    PortletURL portletURL = liferayPortletResponse.createRenderURL();
323    
324                    portletURL.setParameter(
325                            "struts_action", "/document_library/move_entry");
326    
327                    PortletURL redirectURL = liferayPortletResponse.createRenderURL();
328    
329                    redirectURL.setParameter("struts_action", "/document_library/view");
330                    redirectURL.setParameter("folderId", String.valueOf(_folderId));
331    
332                    portletURL.setParameter("redirect", redirectURL.toString());
333    
334                    portletURL.setParameter(
335                            "fileEntryIds", String.valueOf(_fileEntry.getFileEntryId()));
336    
337                    _addURLUIItem(
338                            new URLMenuItem(), menuItems, "icon-move", DLUIItemKeys.MOVE,
339                            "move", portletURL.toString());
340            }
341    
342            public void addMoveToolbarItem(List<ToolbarItem> toolbarItems)
343                    throws PortalException {
344    
345                    if (!_fileEntryDisplayContextHelper.isMoveActionAvailable()) {
346                            return;
347                    }
348    
349                    PortletURL portletURL = _getRenderURL("/document_library/move_entry");
350    
351                    _addURLUIItem(
352                            new URLToolbarItem(), toolbarItems, "icon-move", DLUIItemKeys.MOVE,
353                            LanguageUtil.get(_request, "move"), portletURL.toString());
354            }
355    
356            public void addMoveToTheRecycleBinToolbarItem(
357                            List<ToolbarItem> toolbarItems)
358                    throws PortalException {
359    
360                    if (!isMoveToTheRecycleBinActionAvailable()) {
361                            return;
362                    }
363    
364                    LiferayPortletResponse liferayPortletResponse =
365                            _getLiferayPortletResponse();
366    
367                    PortletURL portletURL = liferayPortletResponse.createRenderURL();
368    
369                    portletURL.setParameter("struts_action", "/document_library/view");
370                    portletURL.setParameter(
371                            "folderId", String.valueOf(_fileEntry.getFolderId()));
372    
373                    _addJavaScriptUIItem(
374                            new JavaScriptToolbarItem(), toolbarItems, "icon-trash",
375                            DLUIItemKeys.MOVE_TO_THE_RECYCLE_BIN,
376                            LanguageUtil.get(_request, "move-to-the-recycle-bin"),
377                            getSubmitFormJavaScript(
378                                    Constants.MOVE_TO_TRASH, portletURL.toString()));
379            }
380    
381            public void addOpenInMsOfficeMenuItem(List<MenuItem> menuItems)
382                    throws PortalException {
383    
384                    if (!isOpenInMsOfficeActionAvailable()) {
385                            return;
386                    }
387    
388                    String webDavURL = DLUtil.getWebDavURL(
389                            _themeDisplay, _fileEntry.getFolder(), _fileEntry,
390                            PropsValues.
391                                    DL_FILE_ENTRY_OPEN_IN_MS_OFFICE_MANUAL_CHECK_IN_REQUIRED,
392                            true);
393    
394                    String onClick = getNamespace() + "openDocument('" + webDavURL + "');";
395    
396                    JavaScriptMenuItem javascriptMenuItem = _addJavaScriptUIItem(
397                            new JavaScriptMenuItem(), menuItems, "icon-file-alt",
398                            DLUIItemKeys.OPEN_IN_MS_OFFICE, "open-in-ms-office", onClick);
399    
400                    String javaScript =
401                            "/com/liferay/portlet/documentlibrary/context/dependencies" +
402                                    "/open_in_ms_office_js.ftl";
403    
404                    Class<?> clazz = getClass();
405    
406                    URLTemplateResource urlTemplateResource = new URLTemplateResource(
407                            javaScript, clazz.getResource(javaScript));
408    
409                    Template template = TemplateManagerUtil.getTemplate(
410                            TemplateConstants.LANG_TYPE_FTL, urlTemplateResource, false);
411    
412                    template.put(
413                            "errorMessage", UnicodeLanguageUtil.get(
414                                    _request,
415                                    "cannot-open-the-requested-document-due-to-the-following-" +
416                                            "reason"));
417                    template.put("namespace", getNamespace());
418    
419                    UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
420    
421                    template.processTemplate(unsyncStringWriter);
422    
423                    javascriptMenuItem.setJavaScript(unsyncStringWriter.toString());
424            }
425    
426            public void addOpenInMsOfficeToolbarItem(List<ToolbarItem> toolbarItems)
427                    throws PortalException {
428    
429                    if (!isOpenInMsOfficeActionAvailable()) {
430                            return;
431                    }
432    
433                    String webDavURL = DLUtil.getWebDavURL(
434                            _themeDisplay, _fileEntry.getFolder(), _fileEntry,
435                            PropsValues.
436                                    DL_FILE_ENTRY_OPEN_IN_MS_OFFICE_MANUAL_CHECK_IN_REQUIRED);
437    
438                    StringBundler sb = new StringBundler(4);
439    
440                    sb.append(getNamespace());
441                    sb.append("openDocument('");
442                    sb.append(webDavURL);
443                    sb.append("');");
444    
445                    _addJavaScriptUIItem(
446                            new JavaScriptToolbarItem(), toolbarItems, "icon-file-alt",
447                            DLUIItemKeys.OPEN_IN_MS_OFFICE,
448                            LanguageUtil.get(_request, "open-in-ms-office"), sb.toString());
449            }
450    
451            public void addPermissionsMenuItem(List<MenuItem> menuItems)
452                    throws PortalException {
453    
454                    if (!_fileEntryDisplayContextHelper.isPermissionsButtonVisible()) {
455                            return;
456                    }
457    
458                    String url = null;
459    
460                    try {
461                            url = PermissionsURLTag.doTag(
462                                    null, DLFileEntryConstants.getClassName(),
463                                    HtmlUtil.unescape(_fileEntry.getTitle()), null,
464                                    String.valueOf(_fileEntry.getFileEntryId()),
465                                    LiferayWindowState.POP_UP.toString(), null, _request);
466                    }
467                    catch (Exception e) {
468                            throw new SystemException("Unable to create permissions URL", e);
469                    }
470    
471                    URLMenuItem urlMenuItem = _addURLUIItem(
472                            new URLMenuItem(), menuItems, "icon-lock", DLUIItemKeys.PERMISSIONS,
473                            "permissions", url);
474    
475                    urlMenuItem.setMethod("get");
476                    urlMenuItem.setUseDialog(true);
477            }
478    
479            public void addPermissionsToolbarItem(List<ToolbarItem> toolbarItems)
480                    throws PortalException {
481    
482                    if (!_fileEntryDisplayContextHelper.isPermissionsButtonVisible()) {
483                            return;
484                    }
485    
486                    String permissionsURL = null;
487    
488                    try {
489                            permissionsURL = PermissionsURLTag.doTag(
490                                    null, DLFileEntryConstants.getClassName(),
491                                    HtmlUtil.unescape(_fileEntry.getTitle()), null,
492                                    String.valueOf(_fileEntry.getFileEntryId()),
493                                    LiferayWindowState.POP_UP.toString(), null, _request
494                            );
495                    }
496                    catch (Exception e) {
497                            throw new SystemException("Unable to create permissions URL", e);
498                    }
499    
500                    StringBundler sb = new StringBundler(6);
501    
502                    sb.append("Liferay.Util.openWindow({");
503                    sb.append("title: '");
504                    sb.append(UnicodeLanguageUtil.get(_request, "permissions"));
505                    sb.append("', uri: '");
506                    sb.append(permissionsURL);
507                    sb.append("'});");
508    
509                    _addJavaScriptUIItem(
510                            new JavaScriptToolbarItem(), toolbarItems, "icon-lock",
511                            DLUIItemKeys.PERMISSIONS, LanguageUtil.get(_request, "permissions"),
512                            sb.toString());
513            }
514    
515            public void addViewOriginalFileMenuItem(List<MenuItem> menuItems) {
516                    if (_fileShortcut == null) {
517                            return;
518                    }
519    
520                    PortletURL portletURL = _getRenderURL(
521                            "/document_library/view_file_entry");
522    
523                    portletURL.setParameter("redirect", _getCurrentURL());
524                    portletURL.setParameter(
525                            "fileEntryId", String.valueOf(_fileShortcut.getToFileEntryId()));
526    
527                    _addURLUIItem(
528                            new URLMenuItem(), menuItems, "icon-search",
529                            DLUIItemKeys.VIEW_ORIGINAL_FILE, "view-original-file",
530                            portletURL.toString());
531            }
532    
533            protected String getNamespace() {
534                    LiferayPortletResponse liferayPortletResponse =
535                            _getLiferayPortletResponse();
536    
537                    return liferayPortletResponse.getNamespace();
538            }
539    
540            protected String getSubmitFormJavaScript(String cmd, String redirect) {
541                    StringBundler sb = new StringBundler(18);
542    
543                    sb.append("document.");
544                    sb.append(getNamespace());
545                    sb.append("fm.");
546                    sb.append(getNamespace());
547                    sb.append(Constants.CMD);
548                    sb.append(".value = '");
549                    sb.append(cmd);
550                    sb.append("';");
551    
552                    if (redirect != null) {
553                            sb.append("document.");
554                            sb.append(getNamespace());
555                            sb.append("fm.");
556                            sb.append(getNamespace());
557                            sb.append("redirect.value = '");
558                            sb.append(redirect);
559                            sb.append("';");
560                    }
561    
562                    sb.append("submitForm(document.");
563                    sb.append(getNamespace());
564                    sb.append("fm);");
565    
566                    return sb.toString();
567            }
568    
569            protected boolean isDeleteActionAvailable() throws PortalException {
570                    if (_fileEntryDisplayContextHelper.isFileEntryDeletable() &&
571                            !_isFileEntryTrashable()) {
572    
573                            return true;
574                    }
575    
576                    return false;
577            }
578    
579            protected boolean isMoveToTheRecycleBinActionAvailable()
580                    throws PortalException {
581    
582                    if (!isDeleteActionAvailable() &&
583                            _fileEntryDisplayContextHelper.isFileEntryDeletable()) {
584    
585                            return true;
586                    }
587    
588                    return false;
589            }
590    
591            protected boolean isOpenInMsOfficeActionAvailable() throws PortalException {
592                    if (_fileEntryDisplayContextHelper.hasViewPermission() &&
593                            _fileVersionDisplayContextHelper.isMsOffice() &&
594                            _isWebDAVEnabled() && _isIEOnWin32()) {
595    
596                            return true;
597                    }
598    
599                    return false;
600            }
601    
602            private UIItemsBuilder(
603                    HttpServletRequest request, HttpServletResponse response,
604                    FileVersion fileVersion, FileShortcut fileShortcut) {
605    
606                    try {
607                            _request = request;
608                            _fileVersion = fileVersion;
609                            _fileShortcut = fileShortcut;
610    
611                            FileEntry fileEntry = null;
612    
613                            if (fileVersion != null) {
614                                    fileEntry = fileVersion.getFileEntry();
615                            }
616    
617                            _fileEntry = fileEntry;
618    
619                            _folderId = BeanParamUtil.getLong(_fileEntry, request, "folderId");
620    
621                            _themeDisplay = (ThemeDisplay)request.getAttribute(
622                                    WebKeys.THEME_DISPLAY);
623    
624                            _fileEntryDisplayContextHelper = new FileEntryDisplayContextHelper(
625                                    _themeDisplay.getPermissionChecker(), _fileEntry);
626                            _fileVersionDisplayContextHelper =
627                                    new FileVersionDisplayContextHelper(fileVersion);
628                    }
629                    catch (PortalException pe) {
630                            throw new SystemException(
631                                    "Unable to build UIItemsBuilder for " + fileVersion, pe);
632                    }
633            }
634    
635            private <T extends JavaScriptUIItem> T _addJavaScriptUIItem(
636                    T javascriptUIItem, List<? super T> javascriptUIItems, String icon,
637                    String key, String label, String onClick ) {
638    
639                    javascriptUIItem.setIcon(icon);
640                    javascriptUIItem.setKey(key);
641                    javascriptUIItem.setLabel(label);
642                    javascriptUIItem.setOnClick(onClick);
643    
644                    javascriptUIItems.add(javascriptUIItem);
645    
646                    return javascriptUIItem;
647            }
648    
649            private <T extends URLUIItem> T _addURLUIItem(
650                    T urlUIItem, List<? super T> urlUIItems, String icon, String key,
651                    String label, String url ) {
652    
653                    urlUIItem.setIcon(icon);
654                    urlUIItem.setKey(key);
655                    urlUIItem.setLabel(label);
656                    urlUIItem.setURL(url);
657    
658                    urlUIItems.add(urlUIItem);
659    
660                    return urlUIItem;
661            }
662    
663            private String _getActionURL(String strutsAction, String cmd) {
664                    LiferayPortletResponse liferayPortletResponse =
665                            _getLiferayPortletResponse();
666    
667                    PortletURL portletURL = liferayPortletResponse.createActionURL();
668    
669                    portletURL.setParameter("struts_action", strutsAction);
670                    portletURL.setParameter(Constants.CMD, cmd);
671                    portletURL.setParameter("redirect", _getCurrentURL());
672                    portletURL.setParameter(
673                            "fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
674    
675                    return portletURL.toString();
676            }
677    
678            private String _getCurrentURL() {
679                    if (_currentURL != null) {
680                            return _currentURL;
681                    }
682    
683                    LiferayPortletRequest liferayPortletRequest =
684                            _getLiferayPortletRequest();
685    
686                    LiferayPortletResponse liferayPortletResponse =
687                            _getLiferayPortletResponse();
688    
689                    PortletURL portletURL = PortletURLUtil.getCurrent(
690                            liferayPortletRequest, liferayPortletResponse);
691    
692                    _currentURL = portletURL.toString();
693    
694                    return _currentURL;
695            }
696    
697            private LiferayPortletRequest _getLiferayPortletRequest() {
698                    PortletRequest portletRequest = (PortletRequest) _request.getAttribute(
699                            JavaConstants.JAVAX_PORTLET_REQUEST);
700    
701                    return PortalUtil.getLiferayPortletRequest(portletRequest);
702            }
703    
704            private LiferayPortletResponse _getLiferayPortletResponse() {
705                    PortletResponse portletResponse =
706                            (PortletResponse) _request.getAttribute(
707                                    JavaConstants.JAVAX_PORTLET_RESPONSE);
708    
709                    return PortalUtil.getLiferayPortletResponse(portletResponse);
710            }
711    
712            private PortletURL _getRenderURL(String strutsAction) {
713                    LiferayPortletResponse liferayPortletResponse =
714                            _getLiferayPortletResponse();
715    
716                    PortletURL portletURL = liferayPortletResponse.createRenderURL();
717    
718                    portletURL.setParameter("struts_action", strutsAction);
719                    portletURL.setParameter("redirect", _getCurrentURL());
720                    portletURL.setParameter(
721                            "fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
722    
723                    return portletURL;
724            }
725    
726            private boolean _isFileEntryTrashable() throws PortalException {
727                    if (_fileEntryDisplayContextHelper.isDLFileEntry() &&
728                            _isTrashEnabled()) {
729    
730                            return true;
731                    }
732    
733                    return false;
734            }
735    
736            private boolean _isIEOnWin32() {
737                    if (_ieOnWin32 == null) {
738                            _ieOnWin32 = BrowserSnifferUtil.isIeOnWin32(_request);
739                    }
740    
741                    return _ieOnWin32;
742            }
743    
744            private boolean _isTrashEnabled() throws PortalException {
745                    if (_trashEnabled == null) {
746                            _trashEnabled = TrashUtil.isTrashEnabled(
747                                    _themeDisplay.getScopeGroupId());
748                    }
749    
750                    return _trashEnabled;
751            }
752    
753            private boolean _isWebDAVEnabled() {
754                    PortletDisplay portletDisplay = _themeDisplay.getPortletDisplay();
755    
756                    return portletDisplay.isWebDAVEnabled();
757            }
758    
759            private String _currentURL;
760            private final FileEntry _fileEntry;
761            private final FileEntryDisplayContextHelper _fileEntryDisplayContextHelper;
762            private FileShortcut _fileShortcut;
763            private final FileVersion _fileVersion;
764            private final FileVersionDisplayContextHelper
765                    _fileVersionDisplayContextHelper;
766            private final long _folderId;
767            private Boolean _ieOnWin32;
768            private final HttpServletRequest _request;
769            private final ThemeDisplay _themeDisplay;
770            private Boolean _trashEnabled;
771    
772    }