1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portlet.tasks.social;
16  
17  import com.liferay.portal.kernel.json.JSONFactoryUtil;
18  import com.liferay.portal.kernel.json.JSONObject;
19  import com.liferay.portal.kernel.util.HtmlUtil;
20  import com.liferay.portal.kernel.util.StringBundler;
21  import com.liferay.portal.kernel.util.StringPool;
22  import com.liferay.portal.kernel.util.Validator;
23  import com.liferay.portal.model.Group;
24  import com.liferay.portal.security.permission.ActionKeys;
25  import com.liferay.portal.security.permission.PermissionChecker;
26  import com.liferay.portal.service.GroupLocalServiceUtil;
27  import com.liferay.portal.theme.ThemeDisplay;
28  import com.liferay.portlet.social.model.BaseSocialActivityInterpreter;
29  import com.liferay.portlet.social.model.SocialActivity;
30  import com.liferay.portlet.social.model.SocialActivityFeedEntry;
31  import com.liferay.portlet.tasks.model.TasksProposal;
32  import com.liferay.portlet.tasks.service.TasksProposalLocalServiceUtil;
33  import com.liferay.portlet.tasks.service.permission.TasksProposalPermission;
34  
35  /**
36   * <a href="TasksActivityInterpreter.java.html"><b><i>View Source</i></b></a>
37   *
38   * @author Raymond Augé
39   */
40  public class TasksActivityInterpreter extends BaseSocialActivityInterpreter {
41  
42      public String[] getClassNames() {
43          return _CLASS_NAMES;
44      }
45  
46      protected SocialActivityFeedEntry doInterpret(
47              SocialActivity activity, ThemeDisplay themeDisplay)
48          throws Exception {
49  
50          PermissionChecker permissionChecker =
51              themeDisplay.getPermissionChecker();
52  
53          if (!TasksProposalPermission.contains(
54                  permissionChecker, activity.getClassPK(), ActionKeys.VIEW)) {
55  
56              return null;
57          }
58  
59          String creatorUserName = getUserName(
60              activity.getUserId(), themeDisplay);
61          String receiverUserName = getUserName(
62              activity.getReceiverUserId(), themeDisplay);
63  
64          int activityType = activity.getType();
65  
66          JSONObject extraData = null;
67  
68          if (Validator.isNotNull(activity.getExtraData())) {
69              extraData = JSONFactoryUtil.createJSONObject(
70                  activity.getExtraData());
71          }
72  
73          // Title
74  
75          String groupName = StringPool.BLANK;
76  
77          if (activity.getGroupId() != themeDisplay.getScopeGroupId()) {
78              Group group = GroupLocalServiceUtil.getGroup(activity.getGroupId());
79  
80              groupName = group.getDescriptiveName();
81          }
82  
83          String titlePattern = null;
84          Object[] titleArguments = null;
85  
86          if (activityType == TasksActivityKeys.ADD_PROPOSAL) {
87              titlePattern = "activity-tasks-add-proposal";
88  
89              if (Validator.isNotNull(groupName)) {
90                  titlePattern += "-in";
91              }
92  
93              titleArguments = new Object[] {
94                  creatorUserName, HtmlUtil.escape(groupName)
95              };
96          }
97          else if (activityType == TasksActivityKeys.ASSIGN_PROPOSAL) {
98              titlePattern = "activity-tasks-assign-proposal";
99  
100             if (Validator.isNotNull(groupName)) {
101                 titlePattern += "-in";
102             }
103 
104             titleArguments = new Object[] {
105                 creatorUserName, receiverUserName, HtmlUtil.escape(groupName)
106             };
107         }
108         else if (activityType == TasksActivityKeys.REVIEW_PROPOSAL) {
109             titlePattern = "activity-tasks-review-proposal";
110 
111             if (Validator.isNotNull(groupName)) {
112                 titlePattern += "-in";
113             }
114 
115             titleArguments = new Object[] {
116                 creatorUserName, receiverUserName, HtmlUtil.escape(groupName)
117             };
118         }
119 
120         String title = themeDisplay.translate(titlePattern, titleArguments);
121 
122         // Body
123 
124         TasksProposal proposal = TasksProposalLocalServiceUtil.getProposal(
125             activity.getClassPK());
126 
127         StringBundler sb = new StringBundler();
128 
129         sb.append("<b>");
130         sb.append(HtmlUtil.escape(proposal.getName()));
131         sb.append("</b> (");
132         sb.append(
133             themeDisplay.translate(
134                 "model.resource." + proposal.getClassName()));
135         sb.append(")<br />");
136         sb.append(themeDisplay.translate("description"));
137         sb.append(": ");
138         sb.append(HtmlUtil.escape(proposal.getDescription()));
139 
140         if (activityType != TasksActivityKeys.ADD_PROPOSAL) {
141             int stage = extraData.getInt("stage");
142             boolean completed = extraData.getBoolean("completed");
143             boolean rejected = extraData.getBoolean("rejected");
144 
145             sb.append("<br />");
146             sb.append(themeDisplay.translate("stage"));
147             sb.append(": ");
148             sb.append(stage);
149             sb.append("<br />");
150             sb.append(themeDisplay.translate("status"));
151             sb.append(": ");
152 
153             if (completed && rejected) {
154                 sb.append(themeDisplay.translate("rejected"));
155             }
156             else if (completed && !rejected) {
157                 sb.append(themeDisplay.translate("approved"));
158             }
159             else {
160                 sb.append(themeDisplay.translate("awaiting-approval"));
161             }
162         }
163 
164         String body = sb.toString();
165 
166         return new SocialActivityFeedEntry(title, body);
167     }
168 
169     private static final String[] _CLASS_NAMES = new String[] {
170         TasksProposal.class.getName()
171     };
172 
173 }