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.model.FileEntry;
021 import com.liferay.portal.kernel.repository.model.FileVersion;
022 import com.liferay.portal.kernel.trash.TrashRenderer;
023 import com.liferay.portal.kernel.util.CharPool;
024 import com.liferay.portal.kernel.util.FileUtil;
025 import com.liferay.portal.kernel.util.ParamUtil;
026 import com.liferay.portal.kernel.util.StringBundler;
027 import com.liferay.portal.kernel.util.StringPool;
028 import com.liferay.portal.kernel.util.Validator;
029 import com.liferay.portal.security.permission.ActionKeys;
030 import com.liferay.portal.security.permission.PermissionChecker;
031 import com.liferay.portal.theme.ThemeDisplay;
032 import com.liferay.portal.util.PortletKeys;
033 import com.liferay.portal.util.PropsValues;
034 import com.liferay.portal.util.WebKeys;
035 import com.liferay.portlet.asset.model.AssetRendererFactory;
036 import com.liferay.portlet.asset.model.BaseAssetRenderer;
037 import com.liferay.portlet.asset.model.DDMFormValuesReader;
038 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
039 import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
040 import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
041 import com.liferay.portlet.documentlibrary.util.DLUtil;
042 import com.liferay.portlet.documentlibrary.util.DocumentConversionUtil;
043 import com.liferay.portlet.trash.util.TrashUtil;
044
045 import java.util.Date;
046 import java.util.Locale;
047
048 import javax.portlet.PortletRequest;
049 import javax.portlet.PortletResponse;
050 import javax.portlet.PortletURL;
051 import javax.portlet.WindowState;
052
053
059 public class DLFileEntryAssetRenderer
060 extends BaseAssetRenderer implements TrashRenderer {
061
062 public DLFileEntryAssetRenderer(
063 FileEntry fileEntry, FileVersion fileVersion) {
064
065 _fileEntry = fileEntry;
066 _fileVersion = fileVersion;
067 }
068
069 @Override
070 public String getClassName() {
071 return DLFileEntry.class.getName();
072 }
073
074 @Override
075 public long getClassPK() {
076 if (!_fileVersion.isApproved() && _fileVersion.isDraft() &&
077 !_fileVersion.isPending() &&
078 !_fileVersion.getVersion().equals(
079 DLFileEntryConstants.VERSION_DEFAULT)) {
080
081 return _fileVersion.getFileVersionId();
082 }
083 else {
084 return _fileEntry.getFileEntryId();
085 }
086 }
087
088 @Override
089 public DDMFormValuesReader getDDMFormValuesReader() {
090 return new DLFileEntryDDMFormValuesReader(_fileEntry, _fileVersion);
091 }
092
093 @Override
094 public String getDiscussionPath() {
095 if (PropsValues.DL_FILE_ENTRY_COMMENTS_ENABLED) {
096 return "edit_file_entry_discussion";
097 }
098 else {
099 return null;
100 }
101 }
102
103 @Override
104 public Date getDisplayDate() {
105 return _fileEntry.getModifiedDate();
106 }
107
108 @Override
109 public long getGroupId() {
110 return _fileEntry.getGroupId();
111 }
112
113 @Override
114 public String getIconCssClass() {
115 return _fileEntry.getIconCssClass();
116 }
117
118 @Override
119 public String getIconPath(ThemeDisplay themeDisplay) {
120 return themeDisplay.getPathThemeImages() + "/file_system/small/" +
121 _fileEntry.getIcon() + ".png";
122 }
123
124 @Override
125 public String getNewName(String oldName, String token) {
126 String extension = FileUtil.getExtension(oldName);
127
128 if (Validator.isNull(extension)) {
129 return super.getNewName(oldName, token);
130 }
131
132 StringBundler sb = new StringBundler(5);
133
134 int index = oldName.lastIndexOf(CharPool.PERIOD);
135
136 sb.append(oldName.substring(0, index));
137
138 sb.append(StringPool.SPACE);
139 sb.append(token);
140 sb.append(StringPool.PERIOD);
141 sb.append(extension);
142
143 return sb.toString();
144 }
145
146 @Override
147 public String getPortletId() {
148 AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
149
150 return assetRendererFactory.getPortletId();
151 }
152
153 @Override
154 public String getSummary(
155 PortletRequest portletRequest, PortletResponse portletResponse) {
156
157 return _fileEntry.getDescription();
158 }
159
160 @Override
161 public String[] getSupportedConversions() {
162 return DocumentConversionUtil.getConversions(_fileEntry.getExtension());
163 }
164
165 @Override
166 public String getThumbnailPath(PortletRequest portletRequest)
167 throws Exception {
168
169 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
170 WebKeys.THEME_DISPLAY);
171
172 String thumbnailSrc = DLUtil.getThumbnailSrc(_fileEntry, themeDisplay);
173
174 if (Validator.isNotNull(thumbnailSrc)) {
175 return thumbnailSrc;
176 }
177
178 return themeDisplay.getPathThemeImages() +
179 "/file_system/large/document.png";
180 }
181
182 @Override
183 public String getTitle(Locale locale) {
184 String title = null;
185
186 if (getAssetRendererType() == AssetRendererFactory.TYPE_LATEST) {
187 title = _fileVersion.getTitle();
188 }
189 else {
190 title = _fileEntry.getTitle();
191 }
192
193 return TrashUtil.getOriginalTitle(title);
194 }
195
196 @Override
197 public String getType() {
198 return DLFileEntryAssetRendererFactory.TYPE;
199 }
200
201 @Override
202 public String getURLDownload(ThemeDisplay themeDisplay) {
203 return DLUtil.getPreviewURL(
204 _fileEntry, _fileVersion, themeDisplay, StringPool.BLANK);
205 }
206
207 @Override
208 public PortletURL getURLEdit(
209 LiferayPortletRequest liferayPortletRequest,
210 LiferayPortletResponse liferayPortletResponse)
211 throws Exception {
212
213 PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
214 getControlPanelPlid(liferayPortletRequest),
215 PortletKeys.DOCUMENT_LIBRARY, PortletRequest.RENDER_PHASE);
216
217 portletURL.setParameter(
218 "struts_action", "/document_library/edit_file_entry");
219 portletURL.setParameter(
220 "fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
221
222 return portletURL;
223 }
224
225 @Override
226 public PortletURL getURLExport(
227 LiferayPortletRequest liferayPortletRequest,
228 LiferayPortletResponse liferayPortletResponse)
229 throws Exception {
230
231 PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
232 getControlPanelPlid(liferayPortletRequest),
233 PortletKeys.DOCUMENT_LIBRARY, PortletRequest.ACTION_PHASE);
234
235 portletURL.setParameter("struts_action", "/document_library/get_file");
236 portletURL.setParameter(
237 "groupId", String.valueOf(_fileEntry.getRepositoryId()));
238 portletURL.setParameter(
239 "folderId", String.valueOf(_fileEntry.getFolderId()));
240 portletURL.setParameter("title", String.valueOf(_fileEntry.getTitle()));
241
242 return portletURL;
243 }
244
245 @Override
246 public String getURLImagePreview(PortletRequest portletRequest)
247 throws Exception {
248
249 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
250 WebKeys.THEME_DISPLAY);
251
252 return DLUtil.getImagePreviewURL(
253 _fileEntry, _fileVersion, themeDisplay);
254 }
255
256 @Override
257 public PortletURL getURLView(
258 LiferayPortletResponse liferayPortletResponse,
259 WindowState windowState)
260 throws Exception {
261
262 AssetRendererFactory assetRendererFactory = getAssetRendererFactory();
263
264 PortletURL portletURL = assetRendererFactory.getURLView(
265 liferayPortletResponse, windowState);
266
267 portletURL.setParameter(
268 "struts_action", "/document_library_display/view_file_entry");
269 portletURL.setParameter(
270 "fileEntryId", String.valueOf(_fileEntry.getFileEntryId()));
271 portletURL.setWindowState(windowState);
272
273 return portletURL;
274 }
275
276 @Override
277 public String getURLViewInContext(
278 LiferayPortletRequest liferayPortletRequest,
279 LiferayPortletResponse liferayPortletResponse,
280 String noSuchEntryRedirect) {
281
282 return getURLViewInContext(
283 liferayPortletRequest, noSuchEntryRedirect,
284 "/document_library/find_file_entry", "fileEntryId",
285 _fileEntry.getFileEntryId());
286 }
287
288 @Override
289 public long getUserId() {
290 return _fileEntry.getUserId();
291 }
292
293 @Override
294 public String getUserName() {
295 return _fileEntry.getUserName();
296 }
297
298 @Override
299 public String getUuid() {
300 return _fileEntry.getUuid();
301 }
302
303 public boolean hasDeletePermission(PermissionChecker permissionChecker)
304 throws PortalException {
305
306 return DLFileEntryPermission.contains(
307 permissionChecker, _fileEntry.getFileEntryId(), ActionKeys.DELETE);
308 }
309
310 @Override
311 public boolean hasEditPermission(PermissionChecker permissionChecker)
312 throws PortalException {
313
314 return DLFileEntryPermission.contains(
315 permissionChecker, _fileEntry.getFileEntryId(), ActionKeys.UPDATE);
316 }
317
318 @Override
319 public boolean hasViewPermission(PermissionChecker permissionChecker)
320 throws PortalException {
321
322 return DLFileEntryPermission.contains(
323 permissionChecker, _fileEntry.getFileEntryId(), ActionKeys.VIEW);
324 }
325
326 @Override
327 public boolean isConvertible() {
328 return true;
329 }
330
331 @Override
332 public boolean isPrintable() {
333 return false;
334 }
335
336 @Override
337 public String render(
338 PortletRequest portletRequest, PortletResponse portletResponse,
339 String template)
340 throws Exception {
341
342 if (template.equals(TEMPLATE_ABSTRACT) ||
343 template.equals(TEMPLATE_FULL_CONTENT)) {
344
345 portletRequest.setAttribute(
346 WebKeys.DOCUMENT_LIBRARY_FILE_ENTRY, _fileEntry);
347
348 String version = ParamUtil.getString(portletRequest, "version");
349
350 if ((getAssetRendererType() == AssetRendererFactory.TYPE_LATEST) ||
351 Validator.isNotNull(version)) {
352
353 if ((_fileEntry != null) && Validator.isNotNull(version)) {
354 _fileVersion = _fileEntry.getFileVersion(version);
355 }
356
357 portletRequest.setAttribute(
358 WebKeys.DOCUMENT_LIBRARY_FILE_VERSION, _fileVersion);
359 }
360 else {
361 portletRequest.setAttribute(
362 WebKeys.DOCUMENT_LIBRARY_FILE_VERSION,
363 _fileEntry.getFileVersion());
364 }
365
366 return "/html/portlet/document_library/asset/file_entry_" +
367 template + ".jsp";
368 }
369 else {
370 return null;
371 }
372 }
373
374 private final FileEntry _fileEntry;
375 private FileVersion _fileVersion;
376
377 }