1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portlet.tasks.social;
24  
25  import com.liferay.portal.kernel.json.JSONFactoryUtil;
26  import com.liferay.portal.kernel.json.JSONObject;
27  import com.liferay.portal.kernel.util.StringPool;
28  import com.liferay.portal.kernel.util.Validator;
29  import com.liferay.portal.model.Group;
30  import com.liferay.portal.security.permission.ActionKeys;
31  import com.liferay.portal.security.permission.PermissionChecker;
32  import com.liferay.portal.service.GroupLocalServiceUtil;
33  import com.liferay.portal.theme.ThemeDisplay;
34  import com.liferay.portlet.social.model.BaseSocialActivityInterpreter;
35  import com.liferay.portlet.social.model.SocialActivity;
36  import com.liferay.portlet.social.model.SocialActivityFeedEntry;
37  import com.liferay.portlet.tasks.model.TasksProposal;
38  import com.liferay.portlet.tasks.service.TasksProposalLocalServiceUtil;
39  import com.liferay.portlet.tasks.service.permission.TasksProposalPermission;
40  
41  /**
42   * <a href="TasksActivityInterpreter.java.html"><b><i>View Source</i></b></a>
43   *
44   * @author Raymond Augé
45   *
46   */
47  public class TasksActivityInterpreter extends BaseSocialActivityInterpreter {
48  
49      public String[] getClassNames() {
50          return _CLASS_NAMES;
51      }
52  
53      protected SocialActivityFeedEntry doInterpret(
54              SocialActivity activity, ThemeDisplay themeDisplay)
55          throws Exception {
56  
57          PermissionChecker permissionChecker =
58              themeDisplay.getPermissionChecker();
59  
60          if (!TasksProposalPermission.contains(
61                  permissionChecker, activity.getClassPK(), ActionKeys.VIEW)) {
62  
63              return null;
64          }
65  
66          String creatorUserName = getUserName(
67              activity.getUserId(), themeDisplay);
68          String receiverUserName = getUserName(
69              activity.getReceiverUserId(), themeDisplay);
70  
71          int activityType = activity.getType();
72  
73          JSONObject extraData = null;
74  
75          if (Validator.isNotNull(activity.getExtraData())) {
76              extraData = JSONFactoryUtil.createJSONObject(
77                  activity.getExtraData());
78          }
79  
80          // Title
81  
82          String groupName = StringPool.BLANK;
83  
84          if (activity.getGroupId() != themeDisplay.getScopeGroupId()) {
85              Group group = GroupLocalServiceUtil.getGroup(activity.getGroupId());
86  
87              groupName = group.getDescriptiveName();
88          }
89  
90          String titlePattern = null;
91          Object[] titleArguments = null;
92  
93          if (activityType == TasksActivityKeys.ADD_PROPOSAL) {
94              titlePattern = "activity-tasks-add-proposal";
95  
96              if (Validator.isNotNull(groupName)) {
97                  titlePattern += "-in";
98              }
99  
100             titleArguments = new Object[] {creatorUserName, groupName};
101         }
102         else if (activityType == TasksActivityKeys.ASSIGN_PROPOSAL) {
103             titlePattern = "activity-tasks-assign-proposal";
104 
105             if (Validator.isNotNull(groupName)) {
106                 titlePattern += "-in";
107             }
108 
109             titleArguments = new Object[] {
110                 creatorUserName, receiverUserName, groupName
111             };
112         }
113         else if (activityType == TasksActivityKeys.REVIEW_PROPOSAL) {
114             titlePattern = "activity-tasks-review-proposal";
115 
116             if (Validator.isNotNull(groupName)) {
117                 titlePattern += "-in";
118             }
119 
120             titleArguments = new Object[] {
121                 creatorUserName, receiverUserName, groupName
122             };
123         }
124 
125         String title = themeDisplay.translate(titlePattern, titleArguments);
126 
127         // Body
128 
129         TasksProposal proposal = TasksProposalLocalServiceUtil.getProposal(
130             activity.getClassPK());
131 
132         StringBuilder sb = new StringBuilder();
133 
134         sb.append("<b>");
135         sb.append(proposal.getName());
136         sb.append("</b> (");
137         sb.append(
138             themeDisplay.translate(
139                 "model.resource." + proposal.getClassName()));
140         sb.append(")<br />");
141         sb.append(themeDisplay.translate("description"));
142         sb.append(": ");
143         sb.append(proposal.getDescription());
144 
145         if (activityType != TasksActivityKeys.ADD_PROPOSAL) {
146             int stage = extraData.getInt("stage");
147             boolean completed = extraData.getBoolean("completed");
148             boolean rejected = extraData.getBoolean("rejected");
149 
150             sb.append("<br />");
151             sb.append(themeDisplay.translate("stage"));
152             sb.append(": ");
153             sb.append(stage);
154             sb.append("<br />");
155             sb.append(themeDisplay.translate("status"));
156             sb.append(": ");
157 
158             if (completed && rejected) {
159                 sb.append(themeDisplay.translate("rejected"));
160             }
161             else if (completed && !rejected) {
162                 sb.append(themeDisplay.translate("approved"));
163             }
164             else {
165                 sb.append(themeDisplay.translate("awaiting-approval"));
166             }
167         }
168 
169         String body = sb.toString();
170 
171         return new SocialActivityFeedEntry(title, body);
172     }
173 
174     private static final String[] _CLASS_NAMES = new String[] {
175         TasksProposal.class.getName()
176     };
177 
178 }