001    /**
002     * Copyright (c) 2000-2012 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.asset;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
020    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
021    import com.liferay.portal.kernel.repository.model.FileEntry;
022    import com.liferay.portal.kernel.repository.model.FileVersion;
023    import com.liferay.portal.kernel.trash.TrashRenderer;
024    import com.liferay.portal.kernel.util.HtmlUtil;
025    import com.liferay.portal.kernel.util.ParamUtil;
026    import com.liferay.portal.kernel.util.StringPool;
027    import com.liferay.portal.kernel.util.Validator;
028    import com.liferay.portal.security.permission.ActionKeys;
029    import com.liferay.portal.security.permission.PermissionChecker;
030    import com.liferay.portal.theme.ThemeDisplay;
031    import com.liferay.portal.util.PortletKeys;
032    import com.liferay.portal.util.PropsValues;
033    import com.liferay.portal.util.WebKeys;
034    import com.liferay.portlet.asset.model.AssetRendererFactory;
035    import com.liferay.portlet.asset.model.BaseAssetRenderer;
036    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
037    import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
038    import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
039    import com.liferay.portlet.documentlibrary.util.DLUtil;
040    
041    import java.util.Locale;
042    
043    import javax.portlet.PortletRequest;
044    import javax.portlet.PortletURL;
045    import javax.portlet.RenderRequest;
046    import javax.portlet.RenderResponse;
047    
048    /**
049     * @author Julio Camarero
050     * @author Juan Fernández
051     * @author Sergio González
052     * @author Zsolt Berentey
053     */
054    public class DLFileEntryAssetRenderer
055            extends BaseAssetRenderer implements TrashRenderer {
056    
057            public DLFileEntryAssetRenderer(
058                    FileEntry fileEntry, FileVersion fileVersion, int type) {
059    
060                    _fileEntry = fileEntry;
061                    _fileVersion = fileVersion;
062                    _type = type;
063            }
064    
065            public String getAssetRendererFactoryClassName() {
066                    return DLFileEntryAssetRendererFactory.CLASS_NAME;
067            }
068    
069            public long getClassPK() {
070                    if (!_fileVersion.isApproved() && _fileVersion.isDraft() &&
071                            !_fileVersion.isPending() &&
072                            !_fileVersion.getVersion().equals(
073                                    DLFileEntryConstants.VERSION_DEFAULT)) {
074    
075                            return _fileVersion.getFileVersionId();
076                    }
077                    else {
078                            return _fileEntry.getFileEntryId();
079                    }
080            }
081    
082            @Override
083            public String getDiscussionPath() {
084                    if (PropsValues.DL_FILE_ENTRY_COMMENTS_ENABLED) {
085                            return "edit_file_entry_discussion";
086                    }
087                    else {
088                            return null;
089                    }
090            }
091    
092            public long getGroupId() {
093                    return _fileEntry.getGroupId();
094            }
095    
096            @Override
097            public String getIconPath(ThemeDisplay themeDisplay) {
098                    return themeDisplay.getPathThemeImages() + "/file_system/small/" +
099                            _fileEntry.getIcon() + ".png";
100            }
101    
102            public String getPortletId() {
103                    AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
104    
105                    return assetRendererFactory.getPortletId();
106            }
107    
108            @Override
109            public String getRestorePath(RenderRequest renderRequest) {
110                    DLFileEntry dlFileEntry = (DLFileEntry)_fileEntry.getModel();
111    
112                    if ((dlFileEntry != null) && dlFileEntry.isInTrashFolder()) {
113                            renderRequest.setAttribute(
114                                    WebKeys.DOCUMENT_LIBRARY_FILE_ENTRY, _fileEntry);
115                            renderRequest.setAttribute(
116                                    WebKeys.DOCUMENT_LIBRARY_FILE_VERSION, _fileVersion);
117    
118                            return
119                                    "/html/portlet/document_library/trash/file_entry_restore.jsp";
120                    }
121    
122                    return null;
123            }
124    
125            public String getSummary(Locale locale) {
126                    return HtmlUtil.stripHtml(_fileEntry.getDescription());
127            }
128    
129            public String getTitle(Locale locale) {
130                    if (_type == AssetRendererFactory.TYPE_LATEST) {
131                            return _fileVersion.getTitle();
132                    }
133                    else {
134                            return _fileEntry.getTitle();
135                    }
136            }
137    
138            public String getType() {
139                    return DLFileEntryAssetRendererFactory.TYPE;
140            }
141    
142            @Override
143            public String getURLDownload(ThemeDisplay themeDisplay) {
144                    return DLUtil.getPreviewURL(
145                            _fileEntry, _fileVersion, themeDisplay, StringPool.BLANK);
146            }
147    
148            @Override
149            public PortletURL getURLEdit(
150                            LiferayPortletRequest liferayPortletRequest,
151                            LiferayPortletResponse liferayPortletResponse)
152                    throws Exception {
153    
154                    PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
155                            getControlPanelPlid(liferayPortletRequest),
156                            PortletKeys.DOCUMENT_LIBRARY, PortletRequest.RENDER_PHASE);
157    
158                    portletURL.setParameter(
159                            "struts_action", "/document_library/edit_file_entry");
160                    portletURL.setParameter(
161                            "fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
162    
163                    return portletURL;
164            }
165    
166            @Override
167            public PortletURL getURLExport(
168                    LiferayPortletRequest liferayPortletRequest,
169                    LiferayPortletResponse liferayPortletResponse) {
170    
171                    PortletURL portletURL = liferayPortletResponse.createActionURL();
172    
173                    portletURL.setParameter("struts_action", "/asset_publisher/get_file");
174                    portletURL.setParameter(
175                            "groupId", String.valueOf(_fileEntry.getRepositoryId()));
176                    portletURL.setParameter(
177                            "folderId", String.valueOf(_fileEntry.getFolderId()));
178                    portletURL.setParameter("title", String.valueOf(_fileEntry.getTitle()));
179    
180                    return portletURL;
181            }
182    
183            @Override
184            public String getURLViewInContext(
185                    LiferayPortletRequest liferayPortletRequest,
186                    LiferayPortletResponse liferayPortletResponse,
187                    String noSuchEntryRedirect) {
188    
189                    return getURLViewInContext(
190                            liferayPortletRequest, noSuchEntryRedirect,
191                            "/document_library/find_file_entry", "fileEntryId",
192                            _fileEntry.getFileEntryId());
193            }
194    
195            public long getUserId() {
196                    return _fileEntry.getUserId();
197            }
198    
199            public String getUserName() {
200                    return _fileEntry.getUserName();
201            }
202    
203            public String getUuid() {
204                    return _fileEntry.getUuid();
205            }
206    
207            public boolean hasDeletePermission(PermissionChecker permissionChecker)
208                    throws PortalException, SystemException {
209    
210                    return DLFileEntryPermission.contains(
211                            permissionChecker, _fileEntry.getFileEntryId(), ActionKeys.DELETE);
212            }
213    
214            @Override
215            public boolean hasEditPermission(PermissionChecker permissionChecker)
216                    throws PortalException, SystemException {
217    
218                    return DLFileEntryPermission.contains(
219                            permissionChecker, _fileEntry.getFileEntryId(), ActionKeys.UPDATE);
220            }
221    
222            @Override
223            public boolean hasViewPermission(PermissionChecker permissionChecker)
224                    throws PortalException, SystemException {
225    
226                    return DLFileEntryPermission.contains(
227                            permissionChecker, _fileEntry.getFileEntryId(), ActionKeys.VIEW);
228            }
229    
230            @Override
231            public boolean isConvertible() {
232                    return true;
233            }
234    
235            @Override
236            public boolean isPrintable() {
237                    return false;
238            }
239    
240            public String render(
241                            RenderRequest renderRequest, RenderResponse renderResponse,
242                            String template)
243                    throws Exception {
244    
245                    if (template.equals(TEMPLATE_ABSTRACT) ||
246                            template.equals(TEMPLATE_FULL_CONTENT)) {
247    
248                            renderRequest.setAttribute(
249                                    WebKeys.DOCUMENT_LIBRARY_FILE_ENTRY, _fileEntry);
250    
251                            String version = ParamUtil.getString(renderRequest, "version");
252    
253                            if ((_type == AssetRendererFactory.TYPE_LATEST) ||
254                                    Validator.isNotNull(version)) {
255    
256                                    if ((_fileEntry != null) && Validator.isNotNull(version)) {
257                                            _fileVersion = _fileEntry.getFileVersion(version);
258                                    }
259    
260                                    renderRequest.setAttribute(
261                                            WebKeys.DOCUMENT_LIBRARY_FILE_VERSION, _fileVersion);
262                            }
263    
264                            return "/html/portlet/document_library/asset/" + template + ".jsp";
265                    }
266                    else {
267                            return null;
268                    }
269            }
270    
271            @Override
272            public String renderActions(
273                    RenderRequest renderRequest, RenderResponse renderResponse) {
274    
275                    renderRequest.setAttribute("view_entries.jsp-fileEntry", _fileEntry);
276    
277                    return "/html/portlet/document_library/file_entry_action.jsp";
278            }
279    
280            private FileEntry _fileEntry;
281            private FileVersion _fileVersion;
282            private int _type;
283    
284    }