001
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
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 }