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.asset;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
019    import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
020    import com.liferay.portal.kernel.repository.RepositoryException;
021    import com.liferay.portal.kernel.repository.model.Folder;
022    import com.liferay.portal.kernel.trash.TrashRenderer;
023    import com.liferay.portal.kernel.util.ListUtil;
024    import com.liferay.portal.kernel.workflow.WorkflowConstants;
025    import com.liferay.portal.security.auth.PrincipalException;
026    import com.liferay.portal.security.permission.ActionKeys;
027    import com.liferay.portal.security.permission.PermissionChecker;
028    import com.liferay.portal.theme.ThemeDisplay;
029    import com.liferay.portal.util.PortletKeys;
030    import com.liferay.portal.util.PropsValues;
031    import com.liferay.portal.util.WebKeys;
032    import com.liferay.portlet.asset.model.AssetRendererFactory;
033    import com.liferay.portlet.asset.model.BaseAssetRenderer;
034    import com.liferay.portlet.documentlibrary.model.DLFolder;
035    import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;
036    import com.liferay.portlet.documentlibrary.service.permission.DLFolderPermission;
037    import com.liferay.portlet.trash.util.TrashUtil;
038    
039    import java.util.Date;
040    import java.util.List;
041    import java.util.Locale;
042    
043    import javax.portlet.PortletRequest;
044    import javax.portlet.PortletResponse;
045    import javax.portlet.PortletURL;
046    import javax.portlet.WindowState;
047    
048    /**
049     * @author Alexander Chow
050     */
051    public class DLFolderAssetRenderer
052            extends BaseAssetRenderer implements TrashRenderer {
053    
054            public static final String TYPE = "folder";
055    
056            public DLFolderAssetRenderer(Folder folder) {
057                    _folder = folder;
058            }
059    
060            @Override
061            public String getClassName() {
062                    return DLFolder.class.getName();
063            }
064    
065            @Override
066            public long getClassPK() {
067                    return _folder.getPrimaryKey();
068            }
069    
070            @Override
071            public Date getDisplayDate() {
072                    return _folder.getModifiedDate();
073            }
074    
075            @Override
076            public long getGroupId() {
077                    return _folder.getGroupId();
078            }
079    
080            @Override
081            public String getIconCssClass() throws PortalException {
082                    try {
083                            if (_folder.isMountPoint()) {
084                                    return "icon-drive";
085                            }
086    
087                            if (!PropsValues.DL_FOLDER_ICON_CHECK_COUNT) {
088                                    return "icon-folder-open";
089                            }
090    
091                            List<Long> subfolderIds = DLAppServiceUtil.getSubfolderIds(
092                                    _folder.getRepositoryId(), _folder.getFolderId(), false);
093    
094                            if (!subfolderIds.isEmpty()) {
095                                    return "icon-folder-open";
096                            }
097    
098                            int count = DLAppServiceUtil.getFoldersFileEntriesCount(
099                                    _folder.getRepositoryId(),
100                                    ListUtil.fromArray(new Long[] {_folder.getFolderId()}),
101                                    WorkflowConstants.STATUS_APPROVED);
102    
103                            if (count > 0) {
104                                    return "icon-folder-open";
105                            }
106                    }
107                    catch (PrincipalException pe) {
108                            return "icon-remove";
109                    }
110                    catch (RepositoryException re) {
111                            return "icon-remove";
112                    }
113    
114                    return super.getIconCssClass();
115            }
116    
117            @Override
118            public String getIconPath(ThemeDisplay themeDisplay) {
119                    try {
120                            if (PropsValues.DL_FOLDER_ICON_CHECK_COUNT &&
121                                    DLAppServiceUtil.getFoldersAndFileEntriesAndFileShortcutsCount(
122                                            _folder.getRepositoryId(), _folder.getFolderId(),
123                                            WorkflowConstants.STATUS_APPROVED, true) > 0) {
124    
125                                    return themeDisplay.getPathThemeImages() +
126                                            "/common/folder_full_document.png";
127                            }
128                    }
129                    catch (Exception e) {
130                    }
131    
132                    return themeDisplay.getPathThemeImages() + "/common/folder_empty.png";
133            }
134    
135            @Override
136            public String getPortletId() {
137                    AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
138    
139                    return assetRendererFactory.getPortletId();
140            }
141    
142            @Override
143            public String getSummary(
144                    PortletRequest portletRequest, PortletResponse portletResponse) {
145    
146                    return _folder.getDescription();
147            }
148    
149            @Override
150            public String getThumbnailPath(PortletRequest portletRequest)
151                    throws Exception {
152    
153                    ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
154                            WebKeys.THEME_DISPLAY);
155    
156                    if (!PropsValues.DL_FOLDER_ICON_CHECK_COUNT) {
157                            return themeDisplay.getPathThemeImages() +
158                                    "/file_system/large/folder_empty_document.png";
159                    }
160    
161                    int foldersCount = DLAppServiceUtil.getFoldersCount(
162                            _folder.getRepositoryId(), _folder.getFolderId());
163                    int entriesCount = DLAppServiceUtil.getFileEntriesAndFileShortcutsCount(
164                            _folder.getRepositoryId(), _folder.getFolderId(),
165                            WorkflowConstants.STATUS_APPROVED);
166    
167                    if ((entriesCount > 0) || (foldersCount > 0)) {
168                            return themeDisplay.getPathThemeImages() +
169                                    "/file_system/large/folder_full_document.png";
170                    }
171    
172                    return themeDisplay.getPathThemeImages() +
173                            "/file_system/large/folder_empty_document.png";
174            }
175    
176            @Override
177            public String getTitle(Locale locale) {
178                    return TrashUtil.getOriginalTitle(_folder.getName());
179            }
180    
181            @Override
182            public String getType() {
183                    return TYPE;
184            }
185    
186            @Override
187            public PortletURL getURLEdit(
188                            LiferayPortletRequest liferayPortletRequest,
189                            LiferayPortletResponse liferayPortletResponse)
190                    throws Exception {
191    
192                    PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
193                            getControlPanelPlid(liferayPortletRequest),
194                            PortletKeys.DOCUMENT_LIBRARY_ADMIN, PortletRequest.RENDER_PHASE);
195    
196                    portletURL.setParameter(
197                            "struts_action", "/document_library/edit_folder");
198                    portletURL.setParameter(
199                            "folderId", String.valueOf(_folder.getFolderId()));
200    
201                    return portletURL;
202            }
203    
204            @Override
205            public PortletURL getURLView(
206                            LiferayPortletResponse liferayPortletResponse,
207                            WindowState windowState)
208                    throws Exception {
209    
210                    AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
211    
212                    PortletURL portletURL = assetRendererFactory.getURLView(
213                            liferayPortletResponse, windowState);
214    
215                    portletURL.setParameter(
216                            "struts_action", "/document_library_display/view");
217                    portletURL.setParameter(
218                            "folderId", String.valueOf(_folder.getFolderId()));
219                    portletURL.setWindowState(windowState);
220    
221                    return portletURL;
222            }
223    
224            @Override
225            public String getURLViewInContext(
226                    LiferayPortletRequest liferayPortletRequest,
227                    LiferayPortletResponse liferayPortletResponse,
228                    String noSuchEntryRedirect) {
229    
230                    return getURLViewInContext(
231                            liferayPortletRequest, noSuchEntryRedirect,
232                            "/document_library/find_folder", "folderId", _folder.getFolderId());
233            }
234    
235            @Override
236            public long getUserId() {
237                    return _folder.getUserId();
238            }
239    
240            @Override
241            public String getUserName() {
242                    return _folder.getUserName();
243            }
244    
245            @Override
246            public String getUuid() {
247                    return _folder.getUuid();
248            }
249    
250            @Override
251            public boolean hasEditPermission(PermissionChecker permissionChecker)
252                    throws PortalException {
253    
254                    return DLFolderPermission.contains(
255                            permissionChecker, _folder, ActionKeys.UPDATE);
256            }
257    
258            @Override
259            public boolean hasViewPermission(PermissionChecker permissionChecker)
260                    throws PortalException {
261    
262                    return DLFolderPermission.contains(
263                            permissionChecker, _folder, ActionKeys.VIEW);
264            }
265    
266            @Override
267            public boolean isDisplayable() {
268                    if (_folder.isMountPoint()) {
269                            return false;
270                    }
271    
272                    return true;
273            }
274    
275            @Override
276            public String render(
277                            PortletRequest portletRequest, PortletResponse portletResponse,
278                            String template)
279                    throws Exception {
280    
281                    if (template.equals(TEMPLATE_ABSTRACT) ||
282                            template.equals(TEMPLATE_FULL_CONTENT)) {
283    
284                            portletRequest.setAttribute(
285                                    WebKeys.DOCUMENT_LIBRARY_FOLDER, _folder);
286    
287                            return "/html/portlet/document_library/asset/folder_" + template +
288                                    ".jsp";
289                    }
290                    else {
291                            return null;
292                    }
293            }
294    
295            private final Folder _folder;
296    
297    }