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