/** * 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()}; }