/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.so.activities.hook.social;
import com.liferay.blogs.kernel.model.BlogsEntry;
import com.liferay.blogs.kernel.service.BlogsEntryLocalServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.so.activities.util.SocialActivityKeyConstants;
import com.liferay.social.kernel.model.SocialActivity;
import com.liferay.social.kernel.model.SocialActivityConstants;
import com.liferay.social.kernel.model.SocialActivityFeedEntry;
import com.liferay.social.kernel.model.SocialActivitySet;
import com.liferay.social.kernel.service.SocialActivityLocalServiceUtil;
import com.liferay.social.kernel.service.SocialActivitySetLocalServiceUtil;
import java.util.Date;
/**
* @author Evan Thibodeau
* @author Matthew Kong
*/
public class BlogsActivityInterpreter extends SOSocialActivityInterpreter {
public String[] getClassNames() {
return _CLASS_NAMES;
}
@Override
public void updateActivitySet(long activityId) throws PortalException {
SocialActivity activity =
SocialActivityLocalServiceUtil.fetchSocialActivity(activityId);
if ((activity == null) || (activity.getActivitySetId() > 0)) {
return;
}
long activitySetId = getActivitySetId(activityId);
if (activitySetId > 0) {
SocialActivitySetLocalServiceUtil.incrementActivityCount(
activitySetId, activityId);
return;
}
SocialActivitySet activitySet =
SocialActivitySetLocalServiceUtil.addActivitySet(activityId);
if (activity.getType() != SocialActivityKeyConstants.BLOGS_ADD_ENTRY) {
return;
}
BlogsEntry blogsEntry = BlogsEntryLocalServiceUtil.getBlogsEntry(
activity.getClassPK());
Date displayDate = blogsEntry.getDisplayDate();
if (displayDate.before(blogsEntry.getCreateDate())) {
return;
}
activitySet.setModifiedDate(displayDate.getTime());
SocialActivitySetLocalServiceUtil.updateSocialActivitySet(activitySet);
}
@Override
protected long getActivitySetId(long activityId) {
try {
SocialActivitySet activitySet = null;
boolean comment = false;
SocialActivity activity =
SocialActivityLocalServiceUtil.getActivity(activityId);
if ((activity.getType() ==
SocialActivityKeyConstants.BLOGS_ADD_COMMENT) ||
(activity.getType() ==
SocialActivityConstants.TYPE_ADD_COMMENT)) {
activitySet =
SocialActivitySetLocalServiceUtil.getClassActivitySet(
activity.getClassNameId(), activity.getClassPK(),
activity.getType());
comment = true;
}
else if (activity.getType() ==
SocialActivityKeyConstants.BLOGS_UPDATE_ENTRY) {
activitySet =
SocialActivitySetLocalServiceUtil.getClassActivitySet(
activity.getUserId(), activity.getClassNameId(),
activity.getClassPK(), activity.getType());
}
if ((activitySet != null) && !isExpired(activitySet, comment)) {
return activitySet.getActivitySetId();
}
}
catch (Exception e) {
}
return 0;
}
@Override
protected String getBody(
SocialActivity activity, ServiceContext serviceContext)
throws Exception {
return getBody(
activity.getClassName(), activity.getClassPK(), serviceContext);
}
@Override
protected String getBody(
SocialActivitySet activitySet, ServiceContext serviceContext)
throws Exception {
if ((activitySet.getType() ==
SocialActivityKeyConstants.BLOGS_ADD_COMMENT) ||
(activitySet.getType() ==
SocialActivityKeyConstants.BLOGS_UPDATE_ENTRY) ||
(activitySet.getType() ==
SocialActivityConstants.TYPE_ADD_COMMENT)) {
return getBody(
activitySet.getClassName(), activitySet.getClassPK(),
serviceContext);
}
return super.getBody(activitySet, serviceContext);
}
protected String getBody(
String className, long classPK, ServiceContext serviceContext)
throws Exception {
StringBundler sb = new StringBundler(5);
sb.append("<div class=\"activity-body\"><div class=\"title\">");
sb.append(getPageTitle(className, classPK, serviceContext));
sb.append("</div><div class=\"blogs-page-content\">");
BlogsEntry blogsEntry = BlogsEntryLocalServiceUtil.getEntry(classPK);
String content = HtmlUtil.extractText(blogsEntry.getContent());
sb.append(StringUtil.shorten(content, 200));
sb.append("</div></div>");
return sb.toString();
}
@Override
protected SocialActivityFeedEntry getSubfeedEntry(
SocialActivity activity, ServiceContext serviceContext)
throws Exception {
String title = getPageTitle(
activity.getClassName(), activity.getClassPK(), serviceContext);
BlogsEntry blogsEntry = BlogsEntryLocalServiceUtil.getEntry(
activity.getClassPK());
String content = HtmlUtil.extractText(blogsEntry.getContent());
String body = StringUtil.shorten(content, 200);
return new SocialActivityFeedEntry(title, body);
}
@Override
protected String getTitlePattern(
String groupName, SocialActivity activity) {
if ((activity.getType() ==
SocialActivityKeyConstants.BLOGS_ADD_COMMENT) ||
(activity.getType() == SocialActivityConstants.TYPE_ADD_COMMENT)) {
return "commented-on-a-blog-entry";
}
else if (activity.getType() ==
SocialActivityKeyConstants.BLOGS_ADD_ENTRY) {
return "wrote-a-new-blog-entry";
}
else if (activity.getType() ==
SocialActivityKeyConstants.BLOGS_UPDATE_ENTRY) {
return "updated-a-blog-entry";
}
return StringPool.BLANK;
}
@Override
protected String getTitlePattern(
String groupName, SocialActivitySet activitySet) {
if ((activitySet.getType() ==
SocialActivityKeyConstants.BLOGS_ADD_COMMENT) ||
(activitySet.getType() ==
SocialActivityConstants.TYPE_ADD_COMMENT)) {
return "commented-on-a-blog-entry";
}
else if (activitySet.getType() ==
SocialActivityKeyConstants.BLOGS_ADD_ENTRY) {
return "wrote-x-new-blog-entries";
}
else if (activitySet.getType() ==
SocialActivityKeyConstants.BLOGS_UPDATE_ENTRY) {
return "made-x-updates-to-a-blog-entry";
}
return StringPool.BLANK;
}
@Override
protected boolean isVisible(SocialActivity activity) throws Exception {
BlogsEntry blogsEntry = BlogsEntryLocalServiceUtil.fetchBlogsEntry(
activity.getClassPK());
if ((blogsEntry == null) || !blogsEntry.isVisible()) {
return false;
}
if ((activity.getType() ==
SocialActivityKeyConstants.BLOGS_ADD_COMMENT) ||
(activity.getType() ==
SocialActivityKeyConstants.BLOGS_UPDATE_ENTRY) ||
(activity.getType() == SocialActivityConstants.TYPE_ADD_COMMENT)) {
Date displayDate = blogsEntry.getDisplayDate();
if (activity.getCreateDate() < displayDate.getTime()) {
return false;
}
}
return true;
}
private static final String[] _CLASS_NAMES = {BlogsEntry.class.getName()};
}