/**
* 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.asset.kernel.model.AssetRenderer;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.document.library.kernel.service.DLAppLocalServiceUtil;
import com.liferay.document.library.kernel.util.DLUtil;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.FileVersion;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.HttpUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.so.activities.util.SocialActivityKeyConstants;
import com.liferay.social.kernel.model.SocialActivity;
import com.liferay.social.kernel.model.SocialActivitySet;
import com.liferay.social.kernel.service.SocialActivityLocalServiceUtil;
import com.liferay.social.kernel.service.SocialActivitySetLocalServiceUtil;
/**
* @author Evan Thibodeau
* @author Matthew Kong
*/
public class DLActivityInterpreter extends SOSocialActivityInterpreter {
public String[] getClassNames() {
return _CLASS_NAMES;
}
@Override
protected long getActivitySetId(long activityId) {
try {
SocialActivitySet activitySet = null;
SocialActivity activity =
SocialActivityLocalServiceUtil.getActivity(activityId);
if (activity.getType() ==
SocialActivityKeyConstants.DL_ADD_FILE_ENTRY) {
activitySet =
SocialActivitySetLocalServiceUtil.getUserActivitySet(
activity.getGroupId(), activity.getUserId(),
activity.getClassNameId(), activity.getType());
}
else if (activity.getType() ==
SocialActivityKeyConstants.DL_UPDATE_FILE_ENTRY) {
activitySet =
SocialActivitySetLocalServiceUtil.getClassActivitySet(
activity.getUserId(), activity.getClassNameId(),
activity.getClassPK(), activity.getType());
}
if ((activitySet != null) && !isExpired(activitySet, false)) {
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.DL_UPDATE_FILE_ENTRY) {
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(11);
sb.append("<div class=\"activity-body document\">");
sb.append("<span class=\"document-thumbnail\"><img src=\"");
FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(classPK);
FileVersion fileVersion = fileEntry.getFileVersion();
String thumbnailSrc = DLUtil.getThumbnailSrc(
fileEntry, fileVersion, null, serviceContext.getThemeDisplay());
sb.append(thumbnailSrc);
sb.append("\"></span>");
sb.append("<div class=\"document-container\"><div class=\"title\">");
sb.append(getPageTitle(className, classPK, serviceContext));
sb.append("</div><div class=\"version\">");
sb.append(
serviceContext.translate("version-x", fileVersion.getVersion()));
sb.append("</div><div class=\"document-content\">");
AssetRenderer assetRenderer = getAssetRenderer(className, classPK);
sb.append(
StringUtil.shorten(
HtmlUtil.escape(assetRenderer.getSummary(), 200)));
sb.append("</div></div></div>");
return sb.toString();
}
protected String getFolderLink(long classPK, ServiceContext serviceContext)
throws Exception {
FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(classPK);
if (fileEntry.getFolderId() <= 0) {
return null;
}
StringBundler sb = new StringBundler(6);
sb.append(serviceContext.getPortalURL());
sb.append(serviceContext.getPathMain());
sb.append("/document_library/find_folder?groupId=");
sb.append(fileEntry.getRepositoryId());
sb.append("&folderId=");
sb.append(fileEntry.getFolderId());
Folder folder = fileEntry.getFolder();
return wrapLink(sb.toString(), folder.getName());
}
@Override
protected String getLink(
SocialActivity activity, ServiceContext serviceContext)
throws Exception {
StringBundler sb = new StringBundler(8);
sb.append(serviceContext.getPortalURL());
sb.append(serviceContext.getPathMain());
sb.append("/document_library/get_file?groupId=");
FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
activity.getClassPK());
sb.append(fileEntry.getRepositoryId());
sb.append("&folderId=");
sb.append(fileEntry.getFolderId());
sb.append("&title=");
sb.append(HttpUtil.encodeURL(fileEntry.getTitle()));
String downloadLink = wrapLinkWithIcon(
sb.toString(), serviceContext.translate("download"));
return "<span class=\"download-link\">" + downloadLink + "</span>";
}
@Override
protected Object[] getTitleArguments(
String groupName, SocialActivity activity, String link,
String title, ServiceContext serviceContext)
throws Exception {
String folderLink = getFolderLink(
activity.getClassPK(), serviceContext);
if (Validator.isNull(folderLink)) {
return null;
}
return new Object[] {folderLink};
}
@Override
protected Object[] getTitleArguments(
String groupName, SocialActivitySet activitySet, String link,
String title, ServiceContext serviceContext)
throws Exception {
if (activitySet.getType() ==
SocialActivityKeyConstants.DL_UPDATE_FILE_ENTRY) {
String folderLink = getFolderLink(
activitySet.getClassPK(), serviceContext);
if (Validator.isNotNull(folderLink)) {
return new Object[] {
activitySet.getActivityCount(), folderLink
};
}
}
return super.getTitleArguments(
groupName, activitySet, link, title, serviceContext);
}
@Override
protected String getTitlePattern(String groupName, SocialActivity activity)
throws Exception {
String titlePattern = StringPool.BLANK;
if (activity.getType() ==
SocialActivityKeyConstants.DL_ADD_FILE_ENTRY) {
titlePattern = "uploaded-a-new-document";
}
else if (activity.getType() ==
SocialActivityKeyConstants.DL_UPDATE_FILE_ENTRY) {
titlePattern = "updated-a-document";
}
else {
return StringPool.BLANK;
}
FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
activity.getClassPK());
if (fileEntry.getFolderId() > 0) {
titlePattern = titlePattern.concat("-in-the-x-folder");
}
return titlePattern;
}
@Override
protected String getTitlePattern(
String groupName, SocialActivitySet activitySet)
throws Exception {
String titlePattern = StringPool.BLANK;
if (activitySet.getType() ==
SocialActivityKeyConstants.DL_ADD_FILE_ENTRY) {
titlePattern = "uploaded-x-new-documents";
}
else if (activitySet.getType() ==
SocialActivityKeyConstants.DL_UPDATE_FILE_ENTRY) {
titlePattern = "made-x-updates-to-a-document";
FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
activitySet.getClassPK());
if (fileEntry.getFolderId() > 0) {
titlePattern = titlePattern.concat("-in-the-x-folder");
}
}
else {
return StringPool.BLANK;
}
return titlePattern;
}
protected String wrapLinkWithIcon(String link, String text) {
StringBundler sb = new StringBundler(6);
sb.append("<a href=\"");
sb.append(link);
sb.append("\">");
sb.append("<i class=\"icon-download\"></i>");
sb.append(text);
sb.append("</a>");
return sb.toString();
}
private static final String[] _CLASS_NAMES = {DLFileEntry.class.getName()};
}