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