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;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.repository.model.FileEntry;
020    import com.liferay.portal.kernel.repository.model.FileShortcut;
021    import com.liferay.portal.kernel.repository.model.FileVersion;
022    import com.liferay.portal.kernel.servlet.taglib.ui.Menu;
023    import com.liferay.portal.kernel.servlet.taglib.ui.MenuItem;
024    import com.liferay.portal.kernel.servlet.taglib.ui.ToolbarItem;
025    import com.liferay.portal.kernel.util.StringPool;
026    import com.liferay.portal.util.WebKeys;
027    import com.liferay.portlet.documentlibrary.display.context.logic.DLPortletInstanceSettingsHelper;
028    import com.liferay.portlet.documentlibrary.display.context.logic.DLVisualizationHelper;
029    import com.liferay.portlet.documentlibrary.display.context.logic.FileEntryDisplayContextHelper;
030    import com.liferay.portlet.documentlibrary.display.context.logic.FileVersionDisplayContextHelper;
031    import com.liferay.portlet.documentlibrary.display.context.logic.UIItemsBuilder;
032    import com.liferay.portlet.documentlibrary.display.context.util.DLRequestHelper;
033    import com.liferay.portlet.documentlibrary.display.context.util.JSPRenderer;
034    import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata;
035    import com.liferay.portlet.documentlibrary.model.DLFileVersion;
036    import com.liferay.portlet.documentlibrary.service.DLFileEntryMetadataLocalServiceUtil;
037    import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
038    import com.liferay.portlet.dynamicdatamapping.storage.DDMFormValues;
039    import com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil;
040    
041    import java.io.IOException;
042    
043    import java.util.ArrayList;
044    import java.util.Collections;
045    import java.util.List;
046    import java.util.UUID;
047    
048    import javax.servlet.ServletException;
049    import javax.servlet.http.HttpServletRequest;
050    import javax.servlet.http.HttpServletResponse;
051    
052    /**
053     * @author Adolfo P??rez
054     */
055    public class DefaultDLViewFileVersionDisplayContext
056            implements DLViewFileVersionDisplayContext {
057    
058            public DefaultDLViewFileVersionDisplayContext(
059                            HttpServletRequest request, HttpServletResponse response,
060                            FileShortcut fileShortcut)
061                    throws PortalException {
062    
063                    this(request, response, fileShortcut.getFileVersion(), fileShortcut);
064            }
065    
066            public DefaultDLViewFileVersionDisplayContext(
067                    HttpServletRequest request, HttpServletResponse response,
068                    FileVersion fileVersion) {
069    
070                    this(request, response, fileVersion, null);
071            }
072    
073            @Override
074            public DDMFormValues getDDMFormValues(DDMStructure ddmStructure)
075                    throws PortalException {
076    
077                    DLFileEntryMetadata dlFileEntryMetadata =
078                            DLFileEntryMetadataLocalServiceUtil.getFileEntryMetadata(
079                                    ddmStructure.getStructureId(), _fileVersion.getFileVersionId());
080    
081                    return StorageEngineUtil.getDDMFormValues(
082                            dlFileEntryMetadata.getDDMStorageId());
083            }
084    
085            @Override
086            public List<DDMStructure> getDDMStructures() throws PortalException {
087                    if (_fileVersionDisplayContextHelper.isDLFileVersion()) {
088                            DLFileVersion dlFileVersion =
089                                    (DLFileVersion)_fileVersion.getModel();
090    
091                            return dlFileVersion.getDDMStructures();
092                    }
093    
094                    return Collections.emptyList();
095            }
096    
097            @Override
098            public Menu getMenu() throws PortalException {
099                    Menu menu = new Menu();
100    
101                    String direction = "left";
102    
103                    if (_dlVisualizationHelper.isShowMinimalActionsButton()) {
104                            direction = "down";
105                    }
106    
107                    menu.setDirection(direction);
108    
109                    boolean extended = true;
110    
111                    if (_dlVisualizationHelper.isShowMinimalActionsButton()) {
112                            extended = false;
113                    }
114    
115                    menu.setExtended(extended);
116    
117                    String icon = null;
118    
119                    if (_dlVisualizationHelper.isShowMinimalActionsButton()) {
120                            icon = StringPool.BLANK;
121                    }
122    
123                    menu.setIcon(icon);
124    
125                    menu.setMenuItems(_getMenuItems());
126    
127                    String message = "actions";
128    
129                    if (_dlVisualizationHelper.isShowMinimalActionsButton()) {
130                            message = StringPool.BLANK;
131                    }
132    
133                    menu.setMessage(message);
134    
135                    menu.setShowWhenSingleIcon(
136                            _dlVisualizationHelper.isShowWhenSingleIconActionButton());
137                    menu.setTriggerCssClass("btn btn-default");
138    
139                    return menu;
140            }
141    
142            @Override
143            public List<ToolbarItem> getToolbarItems() throws PortalException {
144                    List<ToolbarItem> toolbarItems = new ArrayList<>();
145    
146                    _uiItemsBuilder.addDownloadToolbarItem(toolbarItems);
147    
148                    _uiItemsBuilder.addOpenInMsOfficeToolbarItem(toolbarItems);
149    
150                    _uiItemsBuilder.addEditToolbarItem(toolbarItems);
151    
152                    _uiItemsBuilder.addMoveToolbarItem(toolbarItems);
153    
154                    _uiItemsBuilder.addCheckoutToolbarItem(toolbarItems);
155    
156                    _uiItemsBuilder.addCancelCheckoutToolbarItem(toolbarItems);
157    
158                    _uiItemsBuilder.addCheckinToolbarItem(toolbarItems);
159    
160                    _uiItemsBuilder.addPermissionsToolbarItem(toolbarItems);
161    
162                    _uiItemsBuilder.addMoveToTheRecycleBinToolbarItem(toolbarItems);
163    
164                    _uiItemsBuilder.addDeleteToolbarItem(toolbarItems);
165    
166                    return toolbarItems;
167            }
168    
169            @Override
170            public UUID getUuid() {
171                    return _UUID;
172            }
173    
174            @Override
175            public boolean isDownloadLinkVisible() throws PortalException {
176                    return _fileEntryDisplayContextHelper.isDownloadActionAvailable();
177            }
178    
179            @Override
180            public boolean isVersionInfoVisible() {
181                    return true;
182            }
183    
184            @Override
185            public void renderPreview(
186                            HttpServletRequest request, HttpServletResponse response)
187                    throws IOException, ServletException {
188    
189                    JSPRenderer jspRenderer = new JSPRenderer(
190                            "/html/portlet/document_library/view_file_entry_preview.jsp");
191    
192                    jspRenderer.setAttribute(
193                            WebKeys.DOCUMENT_LIBRARY_FILE_VERSION, _fileVersion);
194    
195                    jspRenderer.render(request, response);
196            }
197    
198            private DefaultDLViewFileVersionDisplayContext(
199                    HttpServletRequest request, HttpServletResponse response,
200                    FileVersion fileVersion, FileShortcut fileShortcut) {
201    
202                    try {
203                            _fileVersion = fileVersion;
204    
205                            DLRequestHelper dlRequestHelper = new DLRequestHelper(request);
206    
207                            _dlVisualizationHelper = new DLVisualizationHelper(dlRequestHelper);
208    
209                            _dlPortletInstanceSettingsHelper =
210                                    new DLPortletInstanceSettingsHelper(dlRequestHelper);
211    
212                            _fileEntryDisplayContextHelper = new FileEntryDisplayContextHelper(
213                                    dlRequestHelper.getPermissionChecker(),
214                                    _getFileEntry(fileVersion));
215    
216                            _fileVersionDisplayContextHelper =
217                                    new FileVersionDisplayContextHelper(fileVersion);
218    
219                            if (fileShortcut == null) {
220                                    _uiItemsBuilder = new UIItemsBuilder(
221                                            request, response, fileVersion);
222                            }
223                            else {
224                                    _uiItemsBuilder = new UIItemsBuilder(
225                                            request, response, fileShortcut);
226                            }
227                    }
228                    catch (PortalException pe) {
229                            throw new SystemException(
230                                    "Unable to build DefaultDLViewFileVersionDisplayContext for " +
231                                            fileVersion,
232                                    pe);
233                    }
234            }
235    
236            private FileEntry _getFileEntry(FileVersion fileVersion)
237                    throws PortalException {
238    
239                    if (fileVersion != null) {
240                            return fileVersion.getFileEntry();
241                    }
242    
243                    return null;
244            }
245    
246            private List<MenuItem> _getMenuItems() throws PortalException {
247                    List<MenuItem> menuItems = new ArrayList<>();
248    
249                    if (_dlPortletInstanceSettingsHelper.isShowActions()) {
250                            _uiItemsBuilder.addDownloadMenuItem(menuItems);
251    
252                            _uiItemsBuilder.addOpenInMsOfficeMenuItem(menuItems);
253    
254                            _uiItemsBuilder.addViewOriginalFileMenuItem(menuItems);
255    
256                            _uiItemsBuilder.addEditMenuItem(menuItems);
257    
258                            _uiItemsBuilder.addMoveMenuItem(menuItems);
259    
260                            _uiItemsBuilder.addCheckoutMenuItem(menuItems);
261    
262                            _uiItemsBuilder.addCheckinMenuItem(menuItems);
263    
264                            _uiItemsBuilder.addCancelCheckoutMenuItem(menuItems);
265    
266                            _uiItemsBuilder.addPermissionsMenuItem(menuItems);
267    
268                            _uiItemsBuilder.addDeleteMenuItem(menuItems);
269                    }
270    
271                    return menuItems;
272            }
273    
274            private static final UUID _UUID = UUID.fromString(
275                    "85F6C50E-3893-4E32-9D63-208528A503FA");
276    
277            private final DLPortletInstanceSettingsHelper
278                    _dlPortletInstanceSettingsHelper;
279            private final DLVisualizationHelper _dlVisualizationHelper;
280            private final FileEntryDisplayContextHelper _fileEntryDisplayContextHelper;
281            private final FileVersion _fileVersion;
282            private final FileVersionDisplayContextHelper
283                    _fileVersionDisplayContextHelper;
284            private final UIItemsBuilder _uiItemsBuilder;
285    
286    }