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.bean.BeanParamUtil;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.exception.SystemException;
020    import com.liferay.portal.kernel.repository.model.FileEntry;
021    import com.liferay.portal.kernel.repository.model.FileVersion;
022    import com.liferay.portal.kernel.util.ParamUtil;
023    import com.liferay.portal.kernel.util.PrefsPropsUtil;
024    import com.liferay.portal.kernel.util.PropsKeys;
025    import com.liferay.portal.theme.ThemeDisplay;
026    import com.liferay.portal.util.WebKeys;
027    import com.liferay.portlet.documentlibrary.DLPortletInstanceSettings;
028    import com.liferay.portlet.documentlibrary.display.context.logic.FileEntryDisplayContextHelper;
029    import com.liferay.portlet.documentlibrary.display.context.logic.FileVersionDisplayContextHelper;
030    import com.liferay.portlet.documentlibrary.display.context.util.DLRequestHelper;
031    import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
032    import com.liferay.portlet.documentlibrary.util.DLUtil;
033    import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
034    
035    import java.util.UUID;
036    
037    import javax.servlet.http.HttpServletRequest;
038    import javax.servlet.http.HttpServletResponse;
039    
040    /**
041     * @author Iv??n Zaera
042     */
043    public class DefaultDLEditFileEntryDisplayContext
044            implements DLEditFileEntryDisplayContext {
045    
046            public DefaultDLEditFileEntryDisplayContext(
047                    HttpServletRequest request, HttpServletResponse response,
048                    DLFileEntryType dlFileEntryType) {
049    
050                    this(request, dlFileEntryType, null);
051            }
052    
053            public DefaultDLEditFileEntryDisplayContext(
054                    HttpServletRequest request, HttpServletResponse response,
055                    FileEntry fileEntry) {
056    
057                    this(request, (DLFileEntryType)null, fileEntry);
058            }
059    
060            @Override
061            public DLFilePicker getDLFilePicker(String onFilePickCallback) {
062                    return null;
063            }
064    
065            @Override
066            public long getMaximumUploadSize() {
067                    long fileMaxSize = PrefsPropsUtil.getLong(PropsKeys.DL_FILE_MAX_SIZE);
068    
069                    if (fileMaxSize == 0) {
070                            fileMaxSize = PrefsPropsUtil.getLong(
071                                    PropsKeys.UPLOAD_SERVLET_REQUEST_IMPL_MAX_SIZE);
072                    }
073    
074                    return fileMaxSize;
075            }
076    
077            @Override
078            public String getPublishButtonLabel() {
079                    String publishButtonLabel = "publish";
080    
081                    if (_hasFolderWorkflowDefinitionLink()) {
082                            publishButtonLabel = "submit-for-publication";
083                    }
084    
085                    DLPortletInstanceSettings dlPortletInstanceSettings =
086                            _dlRequestHelper.getDLPortletInstanceSettings();
087    
088                    if (dlPortletInstanceSettings.isEnableFileEntryDrafts()) {
089                            publishButtonLabel = "save";
090                    }
091    
092                    return publishButtonLabel;
093            }
094    
095            @Override
096            public String getSaveButtonLabel() {
097                    String saveButtonLabel = "save";
098    
099                    if ((_fileVersion == null) ||
100                            _fileVersionDisplayContextHelper.isApproved() ||
101                            _fileVersionDisplayContextHelper.isDraft()) {
102    
103                            saveButtonLabel = "save-as-draft";
104                    }
105    
106                    return saveButtonLabel;
107            }
108    
109            @Override
110            public UUID getUuid() {
111                    return _UUID;
112            }
113    
114            @Override
115            public boolean isCancelCheckoutDocumentButtonDisabled() {
116                    return false;
117            }
118    
119            @Override
120            public boolean isCancelCheckoutDocumentButtonVisible()
121                    throws PortalException {
122    
123                    return _fileEntryDisplayContextHelper.
124                            isCancelCheckoutDocumentActionAvailable();
125            }
126    
127            @Override
128            public boolean isCheckinButtonDisabled() {
129                    return false;
130            }
131    
132            @Override
133            public boolean isCheckinButtonVisible() throws PortalException {
134                    return _fileEntryDisplayContextHelper.isCheckinActionAvailable();
135            }
136    
137            @Override
138            public boolean isCheckoutDocumentButtonDisabled() {
139                    return false;
140            }
141    
142            @Override
143            public boolean isCheckoutDocumentButtonVisible() throws PortalException {
144                    return
145                            _fileEntryDisplayContextHelper.isCheckoutDocumentActionAvailable();
146            }
147    
148            @Override
149            public boolean isDDMStructureVisible(DDMStructure ddmStructure) {
150                    return true;
151            }
152    
153            @Override
154            public boolean isFolderSelectionVisible() {
155                    return _showSelectFolder;
156            }
157    
158            @Override
159            public boolean isPublishButtonDisabled() {
160                    DLPortletInstanceSettings dlPortletInstanceSettings =
161                            _dlRequestHelper.getDLPortletInstanceSettings();
162    
163                    if (_fileEntryDisplayContextHelper.isCheckedOutByOther() ||
164                            (_fileVersionDisplayContextHelper.isPending() &&
165                             dlPortletInstanceSettings.isEnableFileEntryDrafts())) {
166    
167                            return true;
168                    }
169    
170                    return false;
171            }
172    
173            @Override
174            public boolean isPublishButtonVisible() {
175                    return true;
176            }
177    
178            @Override
179            public boolean isSaveButtonDisabled() {
180                    if (_fileEntryDisplayContextHelper.isCheckedOutByOther()) {
181                            return true;
182                    }
183    
184                    return false;
185            }
186    
187            @Override
188            public boolean isSaveButtonVisible() {
189                    DLPortletInstanceSettings dlPortletInstanceSettings =
190                            _dlRequestHelper.getDLPortletInstanceSettings();
191    
192                    return dlPortletInstanceSettings.isEnableFileEntryDrafts();
193            }
194    
195            @Override
196            public boolean isVersionInfoVisible() {
197                    return true;
198            }
199    
200            private DefaultDLEditFileEntryDisplayContext(
201                    HttpServletRequest request, DLFileEntryType dlFileEntryType,
202                    FileEntry fileEntry) {
203    
204                    try {
205                            _dlRequestHelper = new DLRequestHelper(request);
206                            _fileEntry = fileEntry;
207    
208                            ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
209                                    WebKeys.THEME_DISPLAY);
210    
211                            _fileEntryDisplayContextHelper = new FileEntryDisplayContextHelper(
212                                    themeDisplay.getPermissionChecker(), _fileEntry);
213    
214                            if ((dlFileEntryType == null) && (fileEntry != null)) {
215                                    _dlFileEntryType =
216                                            _fileEntryDisplayContextHelper.getDLFileEntryType();
217                            }
218                            else {
219                                    _dlFileEntryType = dlFileEntryType;
220                            }
221    
222                            if (fileEntry != null) {
223                                    _fileVersion = fileEntry.getFileVersion();
224                            }
225                            else {
226                                    _fileVersion = null;
227                            }
228    
229                            _fileVersionDisplayContextHelper =
230                                    new FileVersionDisplayContextHelper(_fileVersion);
231    
232                            _showSelectFolder = ParamUtil.getBoolean(
233                                    request, "showSelectFolder");
234                    }
235                    catch (PortalException pe) {
236                            throw new SystemException(
237                                    "Unable to build DefaultDLEditFileEntryDisplayContext for " +
238                                            fileEntry,
239                                    pe);
240                    }
241            }
242    
243            private boolean _hasFolderWorkflowDefinitionLink() {
244                    try {
245                            if (_dlFileEntryType == null) {
246                                    return false;
247                            }
248    
249                            long folderId = BeanParamUtil.getLong(
250                                    _fileEntry, _dlRequestHelper.getRequest(), "folderId");
251    
252                            return DLUtil.hasWorkflowDefinitionLink(
253                                    _dlRequestHelper.getCompanyId(),
254                                    _dlRequestHelper.getScopeGroupId(), folderId,
255                                    _dlFileEntryType.getFileEntryTypeId());
256                    }
257                    catch (Exception e) {
258                            throw new SystemException(
259                                    "Unable to check if folder has workflow definition link", e);
260                    }
261            }
262    
263            private static final UUID _UUID = UUID.fromString(
264                    "63326141-02F6-42B5-AE38-ABC73FA72BB5");
265    
266            private final DLFileEntryType _dlFileEntryType;
267            private final DLRequestHelper _dlRequestHelper;
268            private final FileEntry _fileEntry;
269            private final FileEntryDisplayContextHelper _fileEntryDisplayContextHelper;
270            private final FileVersion _fileVersion;
271            private final FileVersionDisplayContextHelper
272                    _fileVersionDisplayContextHelper;
273            private final boolean _showSelectFolder;
274    
275    }