001
014
015 package com.liferay.portlet.journal.asset;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.language.LanguageUtil;
020 import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
021 import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
022 import com.liferay.portal.kernel.trash.TrashRenderer;
023 import com.liferay.portal.kernel.util.GetterUtil;
024 import com.liferay.portal.kernel.util.HtmlUtil;
025 import com.liferay.portal.kernel.util.StringUtil;
026 import com.liferay.portal.kernel.util.Validator;
027 import com.liferay.portal.model.Group;
028 import com.liferay.portal.model.Layout;
029 import com.liferay.portal.security.permission.ActionKeys;
030 import com.liferay.portal.security.permission.PermissionChecker;
031 import com.liferay.portal.service.GroupLocalServiceUtil;
032 import com.liferay.portal.service.LayoutLocalServiceUtil;
033 import com.liferay.portal.theme.ThemeDisplay;
034 import com.liferay.portal.util.PortalUtil;
035 import com.liferay.portal.util.PortletKeys;
036 import com.liferay.portal.util.PropsValues;
037 import com.liferay.portal.util.WebKeys;
038 import com.liferay.portlet.PortletPreferencesFactoryUtil;
039 import com.liferay.portlet.asset.model.BaseAssetRenderer;
040 import com.liferay.portlet.journal.model.JournalArticle;
041 import com.liferay.portlet.journal.model.JournalArticleConstants;
042 import com.liferay.portlet.journal.model.JournalArticleDisplay;
043 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
044 import com.liferay.portlet.journal.service.JournalContentSearchLocalServiceUtil;
045 import com.liferay.portlet.journal.service.permission.JournalArticlePermission;
046
047 import java.util.Date;
048 import java.util.List;
049 import java.util.Locale;
050
051 import javax.portlet.PortletPreferences;
052 import javax.portlet.PortletRequest;
053 import javax.portlet.PortletURL;
054 import javax.portlet.RenderRequest;
055 import javax.portlet.RenderResponse;
056
057
063 public class JournalArticleAssetRenderer
064 extends BaseAssetRenderer implements TrashRenderer {
065
066 public static final String TYPE = "journal_article";
067
068 public static long getClassPK(JournalArticle article) {
069 if ((article.isDraft() || article.isPending()) &&
070 (article.getVersion() !=
071 JournalArticleConstants.VERSION_DEFAULT)) {
072
073 return article.getPrimaryKey();
074 }
075 else {
076 return article.getResourcePrimKey();
077 }
078 }
079
080 public JournalArticleAssetRenderer(JournalArticle article) {
081 _article = article;
082 }
083
084 @Override
085 public String getAddToPagePortletId() throws Exception {
086 return PortletKeys.JOURNAL_CONTENT;
087 }
088
089 public JournalArticle getArticle() {
090 return _article;
091 }
092
093 @Override
094 public String[] getAvailableLanguageIds() {
095 return _article.getAvailableLanguageIds();
096 }
097
098 @Override
099 public String getClassName() {
100 return JournalArticle.class.getName();
101 }
102
103 @Override
104 public long getClassPK() {
105 return getClassPK(_article);
106 }
107
108 @Override
109 public String getDiscussionPath() {
110 if (PropsValues.JOURNAL_ARTICLE_COMMENTS_ENABLED) {
111 return "edit_article_discussion";
112 }
113 else {
114 return null;
115 }
116 }
117
118 @Override
119 public Date getDisplayDate() {
120 return _article.getDisplayDate();
121 }
122
123 @Override
124 public long getGroupId() {
125 return _article.getGroupId();
126 }
127
128 @Override
129 public String getPortletId() {
130 return PortletKeys.JOURNAL;
131 }
132
133 @Override
134 public String getSummary(Locale locale) {
135 String summary = _article.getDescription(locale);
136
137 if (Validator.isNull(summary)) {
138 try {
139 JournalArticleDisplay articleDisplay =
140 JournalArticleLocalServiceUtil.getArticleDisplay(
141 _article, null, null,
142 LanguageUtil.getLanguageId(locale), 1, null, null);
143
144 summary = StringUtil.shorten(
145 HtmlUtil.stripHtml(articleDisplay.getContent()), 200);
146 }
147 catch (Exception e) {
148 }
149 }
150
151 return summary;
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 = _article.getArticleImageURL(themeDisplay);
162
163 if (Validator.isNotNull(thumbnailSrc)) {
164 return thumbnailSrc;
165 }
166
167 return themeDisplay.getPathThemeImages() +
168 "/file_system/large/article.png";
169 }
170
171 @Override
172 public String getTitle(Locale locale) {
173 return _article.getTitle(locale);
174 }
175
176 @Override
177 public String getType() {
178 return TYPE;
179 }
180
181 @Override
182 public PortletURL getURLEdit(
183 LiferayPortletRequest liferayPortletRequest,
184 LiferayPortletResponse liferayPortletResponse)
185 throws Exception {
186
187 PortletURL portletURL = liferayPortletResponse.createLiferayPortletURL(
188 getControlPanelPlid(liferayPortletRequest), PortletKeys.JOURNAL,
189 PortletRequest.RENDER_PHASE);
190
191 portletURL.setParameter("struts_action", "/journal/edit_article");
192 portletURL.setParameter(
193 "groupId", String.valueOf(_article.getGroupId()));
194 portletURL.setParameter("articleId", _article.getArticleId());
195 portletURL.setParameter(
196 "version", String.valueOf(_article.getVersion()));
197
198 return portletURL;
199 }
200
201 @Override
202 public PortletURL getURLExport(
203 LiferayPortletRequest liferayPortletRequest,
204 LiferayPortletResponse liferayPortletResponse) {
205
206 PortletURL portletURL = liferayPortletResponse.createActionURL();
207
208 portletURL.setParameter(
209 "struts_action", "/asset_publisher/export_journal_article");
210 portletURL.setParameter(
211 "groupId", String.valueOf(_article.getGroupId()));
212 portletURL.setParameter("articleId", _article.getArticleId());
213
214 return portletURL;
215 }
216
217 @Override
218 public String getUrlTitle() {
219 return _article.getUrlTitle();
220 }
221
222 @Override
223 public String getURLViewInContext(
224 LiferayPortletRequest liferayPortletRequest,
225 LiferayPortletResponse liferayPortletResponse,
226 String noSuchEntryRedirect)
227 throws Exception {
228
229 ThemeDisplay themeDisplay =
230 (ThemeDisplay)liferayPortletRequest.getAttribute(
231 WebKeys.THEME_DISPLAY);
232
233 Layout layout = themeDisplay.getLayout();
234
235 if (Validator.isNotNull(_article.getLayoutUuid())) {
236 layout = LayoutLocalServiceUtil.getLayoutByUuidAndCompanyId(
237 _article.getLayoutUuid(), _article.getCompanyId());
238 }
239
240 String portletId = (String)liferayPortletRequest.getAttribute(
241 WebKeys.PORTLET_ID);
242
243 PortletPreferences portletSetup =
244 PortletPreferencesFactoryUtil.getStrictLayoutPortletSetup(
245 layout, portletId);
246
247 String linkToLayoutUuid = GetterUtil.getString(
248 portletSetup.getValue("portletSetupLinkToLayoutUuid", null));
249
250 if (Validator.isNotNull(_article.getLayoutUuid()) &&
251 Validator.isNull(linkToLayoutUuid)) {
252
253 Group group = themeDisplay.getScopeGroup();
254
255 if (group.getGroupId() != _article.getGroupId()) {
256 group = GroupLocalServiceUtil.getGroup(_article.getGroupId());
257 }
258
259 String groupFriendlyURL = PortalUtil.getGroupFriendlyURL(
260 group, layout.isPrivateLayout(), themeDisplay);
261
262 return PortalUtil.addPreservedParameters(
263 themeDisplay,
264 groupFriendlyURL.concat(
265 JournalArticleConstants.CANONICAL_URL_SEPARATOR).concat(
266 _article.getUrlTitle()));
267 }
268
269 List<Long> hitLayoutIds =
270 JournalContentSearchLocalServiceUtil.getLayoutIds(
271 _article.getGroupId(), layout.isPrivateLayout(),
272 _article.getArticleId());
273
274 if (!hitLayoutIds.isEmpty()) {
275 Long hitLayoutId = hitLayoutIds.get(0);
276
277 Layout hitLayout = LayoutLocalServiceUtil.getLayout(
278 _article.getGroupId(), layout.isPrivateLayout(),
279 hitLayoutId.longValue());
280
281 return PortalUtil.getLayoutURL(hitLayout, themeDisplay);
282 }
283
284 return noSuchEntryRedirect;
285 }
286
287 @Override
288 public long getUserId() {
289 return _article.getUserId();
290 }
291
292 @Override
293 public String getUserName() {
294 return _article.getUserName();
295 }
296
297 @Override
298 public String getUuid() {
299 return _article.getUuid();
300 }
301
302 @Override
303 public String getViewInContextMessage() {
304 return "view";
305 }
306
307 @Override
308 public boolean hasEditPermission(PermissionChecker permissionChecker)
309 throws PortalException, SystemException {
310
311 return JournalArticlePermission.contains(
312 permissionChecker, _article, ActionKeys.UPDATE);
313 }
314
315 @Override
316 public boolean hasViewPermission(PermissionChecker permissionChecker)
317 throws PortalException, SystemException {
318
319 return JournalArticlePermission.contains(
320 permissionChecker, _article, ActionKeys.VIEW);
321 }
322
323 @Override
324 public boolean isConvertible() {
325 return true;
326 }
327
328 @Override
329 public boolean isDisplayable() {
330 Date now = new Date();
331
332 Date displayDate = _article.getDisplayDate();
333
334 if ((displayDate != null) && displayDate.after(now)) {
335 return false;
336 }
337
338 Date expirationDate = _article.getExpirationDate();
339
340 if ((expirationDate != null) && expirationDate.before(now)) {
341 return false;
342 }
343
344 return true;
345 }
346
347 @Override
348 public boolean isLocalizable() {
349 return true;
350 }
351
352 @Override
353 public boolean isPrintable() {
354 return true;
355 }
356
357 @Override
358 public String render(
359 RenderRequest renderRequest, RenderResponse renderResponse,
360 String template)
361 throws Exception {
362
363 if (template.equals(TEMPLATE_ABSTRACT) ||
364 template.equals(TEMPLATE_FULL_CONTENT)) {
365
366 renderRequest.setAttribute(WebKeys.JOURNAL_ARTICLE, _article);
367
368 return "/html/portlet/journal/asset/" + template + ".jsp";
369 }
370 else {
371 return null;
372 }
373 }
374
375 @Override
376 public void setAddToPagePreferences(
377 PortletPreferences preferences, String portletId,
378 ThemeDisplay themeDisplay)
379 throws Exception {
380
381 preferences.setValue("articleId", _article.getArticleId());
382 preferences.setValue("groupId", String.valueOf(_article.getGroupId()));
383
384 Layout layout = themeDisplay.getLayout();
385
386 JournalContentSearchLocalServiceUtil.updateContentSearch(
387 layout.getGroupId(), layout.isPrivateLayout(), layout.getLayoutId(),
388 portletId, _article.getArticleId(), true);
389 }
390
391 @Override
392 protected String getIconPath(ThemeDisplay themeDisplay) {
393 return themeDisplay.getPathThemeImages() + "/common/history.png";
394 }
395
396 private JournalArticle _article;
397
398 }