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