001    /**
002     * Copyright (c) 2000-present 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.journal.social;
016    
017    import com.liferay.portal.kernel.util.Validator;
018    import com.liferay.portal.model.Layout;
019    import com.liferay.portal.security.permission.ActionKeys;
020    import com.liferay.portal.security.permission.PermissionChecker;
021    import com.liferay.portal.service.ServiceContext;
022    import com.liferay.portal.util.PortalUtil;
023    import com.liferay.portlet.journal.model.JournalArticle;
024    import com.liferay.portlet.journal.model.JournalArticleConstants;
025    import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
026    import com.liferay.portlet.journal.service.permission.JournalArticlePermission;
027    import com.liferay.portlet.journal.service.permission.JournalFolderPermission;
028    import com.liferay.portlet.social.model.BaseSocialActivityInterpreter;
029    import com.liferay.portlet.social.model.SocialActivity;
030    import com.liferay.portlet.social.model.SocialActivityConstants;
031    
032    /**
033     * @author Roberto Diaz
034     * @author Zsolt Berentey
035     */
036    public class JournalArticleActivityInterpreter
037            extends BaseSocialActivityInterpreter {
038    
039            @Override
040            public String[] getClassNames() {
041                    return _CLASS_NAMES;
042            }
043    
044            @Override
045            protected String getPath(
046                            SocialActivity activity, ServiceContext serviceContext)
047                    throws Exception {
048    
049                    JournalArticle article =
050                            JournalArticleLocalServiceUtil.getLatestArticle(
051                                    activity.getClassPK());
052    
053                    Layout layout = article.getLayout();
054    
055                    if (layout != null) {
056                            String groupFriendlyURL = PortalUtil.getGroupFriendlyURL(
057                                    layout.getGroup(), layout.isPrivateLayout(),
058                                    serviceContext.getThemeDisplay());
059    
060                            return groupFriendlyURL.concat(
061                                    JournalArticleConstants.CANONICAL_URL_SEPARATOR).concat(
062                                            article.getUrlTitle());
063                    }
064    
065                    return null;
066            }
067    
068            @Override
069            protected String getTitlePattern(
070                    String groupName, SocialActivity activity) {
071    
072                    int activityType = activity.getType();
073    
074                    if (activityType == JournalActivityKeys.ADD_ARTICLE) {
075                            if (Validator.isNull(groupName)) {
076                                    return "activity-journal-article-add-web-content";
077                            }
078                            else {
079                                    return "activity-journal-article-add-web-content-in";
080                            }
081                    }
082                    else if (activityType == JournalActivityKeys.UPDATE_ARTICLE) {
083                            if (Validator.isNull(groupName)) {
084                                    return "activity-journal-article-update-web-content";
085                            }
086                            else {
087                                    return "activity-journal-article-update-web-content-in";
088                            }
089                    }
090                    else if (activityType == SocialActivityConstants.TYPE_MOVE_TO_TRASH) {
091                            if (Validator.isNull(groupName)) {
092                                    return "activity-journal-article-move-to-trash";
093                            }
094                            else {
095                                    return "activity-journal-article-move-to-trash-in";
096                            }
097                    }
098                    else if (activityType ==
099                                            SocialActivityConstants.TYPE_RESTORE_FROM_TRASH) {
100    
101                            if (Validator.isNull(groupName)) {
102                                    return "activity-journal-article-restore-from-trash";
103                            }
104                            else {
105                                    return "activity-journal-article-restore-from-trash-in";
106                            }
107                    }
108    
109                    return null;
110            }
111    
112            @Override
113            protected boolean hasPermissions(
114                            PermissionChecker permissionChecker, SocialActivity activity,
115                            String actionId, ServiceContext serviceContext)
116                    throws Exception {
117    
118                    int activityType = activity.getType();
119    
120                    if (activityType == JournalActivityKeys.ADD_ARTICLE) {
121                            JournalArticle article =
122                                    JournalArticleLocalServiceUtil.getLatestArticle(
123                                            activity.getClassPK());
124    
125                            return JournalFolderPermission.contains(
126                                    permissionChecker, article.getGroupId(), article.getFolderId(),
127                                    ActionKeys.ADD_ARTICLE);
128                    }
129                    else if (activityType == JournalActivityKeys.UPDATE_ARTICLE) {
130                            return JournalArticlePermission.contains(
131                                    permissionChecker, activity.getClassPK(), ActionKeys.UPDATE);
132                    }
133    
134                    return JournalArticlePermission.contains(
135                            permissionChecker, activity.getClassPK(), actionId);
136            }
137    
138            private static final String[] _CLASS_NAMES =
139                    {JournalArticle.class.getName()};
140    
141    }