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