001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.documentlibrary.social;
016    
017    import com.liferay.portal.kernel.repository.model.FileEntry;
018    import com.liferay.portal.kernel.util.StringBundler;
019    import com.liferay.portal.kernel.util.StringPool;
020    import com.liferay.portal.kernel.util.Validator;
021    import com.liferay.portal.security.permission.ActionKeys;
022    import com.liferay.portal.security.permission.PermissionChecker;
023    import com.liferay.portal.theme.ThemeDisplay;
024    import com.liferay.portlet.asset.AssetRendererFactoryRegistryUtil;
025    import com.liferay.portlet.asset.model.AssetRenderer;
026    import com.liferay.portlet.asset.model.AssetRendererFactory;
027    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
028    import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
029    import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
030    import com.liferay.portlet.social.model.BaseSocialActivityInterpreter;
031    import com.liferay.portlet.social.model.SocialActivity;
032    import com.liferay.portlet.social.model.SocialActivityFeedEntry;
033    
034    /**
035     * @author Ryan Park
036     */
037    public class DLActivityInterpreter extends BaseSocialActivityInterpreter {
038    
039            public String[] getClassNames() {
040                    return _CLASS_NAMES;
041            }
042    
043            @Override
044            protected SocialActivityFeedEntry doInterpret(
045                            SocialActivity activity, ThemeDisplay themeDisplay)
046                    throws Exception {
047    
048                    PermissionChecker permissionChecker =
049                            themeDisplay.getPermissionChecker();
050    
051                    FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
052                            activity.getClassPK());
053    
054                    if (!DLFileEntryPermission.contains(
055                                    permissionChecker, fileEntry.getFileEntryId(),
056                                    ActionKeys.VIEW)) {
057    
058                            return null;
059                    }
060    
061                    String groupName = StringPool.BLANK;
062    
063                    if (activity.getGroupId() != themeDisplay.getScopeGroupId()) {
064                            groupName = getGroupName(activity.getGroupId(), themeDisplay);
065                    }
066    
067                    String creatorUserName = getUserName(
068                            activity.getUserId(), themeDisplay);
069    
070                    int activityType = activity.getType();
071    
072                    // Link
073    
074                    StringBundler sb = new StringBundler(4);
075    
076                    sb.append(themeDisplay.getPortalURL());
077                    sb.append(themeDisplay.getPathMain());
078                    sb.append("/document_library/find_file_entry?fileEntryId=");
079                    sb.append(fileEntry.getFileEntryId());
080    
081                    String link = sb.toString();
082    
083                    // Title
084    
085                    String titlePattern = null;
086    
087                    if (activityType == DLActivityKeys.ADD_FILE_ENTRY) {
088                            if (Validator.isNull(groupName)) {
089                                    titlePattern = "activity-document-library-add-file";
090                            }
091                            else {
092                                    titlePattern = "activity-document-library-add-file-in";
093                            }
094                    }
095                    else if (activityType == DLActivityKeys.UPDATE_FILE_ENTRY) {
096                            if (Validator.isNull(groupName)) {
097                                    titlePattern = "activity-document-library-update-file";
098                            }
099                            else {
100                                    titlePattern = "activity-document-library-update-file-in";
101                            }
102                    }
103    
104                    String fileTitle = getValue(
105                            activity.getExtraData(), "title", fileEntry.getTitle());
106    
107                    Object[] titleArguments = new Object[] {
108                            groupName, creatorUserName, wrapLink(link, fileTitle)
109                    };
110    
111                    String title = themeDisplay.translate(titlePattern, titleArguments);
112    
113                    // Body
114    
115                    sb.setIndex(0);
116    
117                    AssetRendererFactory assetRendererFactory =
118                            AssetRendererFactoryRegistryUtil.getAssetRendererFactoryByClassName(
119                                    DLFileEntry.class.getName());
120    
121                    AssetRenderer assetRenderer = assetRendererFactory.getAssetRenderer(
122                            fileEntry.getFileEntryId());
123    
124                    String fileEntryLink = assetRenderer.getURLDownload(themeDisplay);
125    
126                    sb.append(wrapLink(fileEntryLink, "download-file", themeDisplay));
127    
128                    sb.append(StringPool.SPACE);
129    
130                    String folderLink = getFolderLink(themeDisplay, fileEntry);
131    
132                    sb.append(wrapLink(folderLink, "go-to-folder", themeDisplay));
133    
134                    String body = sb.toString();
135    
136                    return new SocialActivityFeedEntry(link, title, body);
137            }
138    
139            protected String getFolderLink(
140                    ThemeDisplay themeDisplay, FileEntry fileEntry) {
141    
142                    StringBundler sb = new StringBundler(6);
143    
144                    sb.append(themeDisplay.getPortalURL());
145                    sb.append(themeDisplay.getPathMain());
146                    sb.append("/document_library/find_folder?groupId=");
147                    sb.append(fileEntry.getRepositoryId());
148                    sb.append("&folderId=");
149                    sb.append(fileEntry.getFolderId());
150    
151                    return sb.toString();
152            }
153    
154            private static final String[] _CLASS_NAMES = new String[] {
155                    DLFileEntry.class.getName()
156            };
157    
158    }