1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    *
5    *
6    *
7    * The contents of this file are subject to the terms of the Liferay Enterprise
8    * Subscription License ("License"). You may not use this file except in
9    * compliance with the License. You can obtain a copy of the License by
10   * contacting Liferay, Inc. See the License for the specific language governing
11   * permissions and limitations under the License, including but not limited to
12   * distribution rights 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.HtmlUtil;
28  import com.liferay.portal.kernel.util.StringPool;
29  import com.liferay.portal.kernel.util.Validator;
30  import com.liferay.portal.model.Group;
31  import com.liferay.portal.security.permission.ActionKeys;
32  import com.liferay.portal.security.permission.PermissionChecker;
33  import com.liferay.portal.service.GroupLocalServiceUtil;
34  import com.liferay.portal.theme.ThemeDisplay;
35  import com.liferay.portlet.social.model.BaseSocialActivityInterpreter;
36  import com.liferay.portlet.social.model.SocialActivity;
37  import com.liferay.portlet.social.model.SocialActivityFeedEntry;
38  import com.liferay.portlet.tasks.model.TasksProposal;
39  import com.liferay.portlet.tasks.service.TasksProposalLocalServiceUtil;
40  import com.liferay.portlet.tasks.service.permission.TasksProposalPermission;
41  
42  /**
43   * <a href="TasksActivityInterpreter.java.html"><b><i>View Source</i></b></a>
44   *
45   * @author Raymond Augé
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[] {
101                 creatorUserName, HtmlUtil.escape(groupName)
102             };
103         }
104         else if (activityType == TasksActivityKeys.ASSIGN_PROPOSAL) {
105             titlePattern = "activity-tasks-assign-proposal";
106 
107             if (Validator.isNotNull(groupName)) {
108                 titlePattern += "-in";
109             }
110 
111             titleArguments = new Object[] {
112                 creatorUserName, receiverUserName, HtmlUtil.escape(groupName)
113             };
114         }
115         else if (activityType == TasksActivityKeys.REVIEW_PROPOSAL) {
116             titlePattern = "activity-tasks-review-proposal";
117 
118             if (Validator.isNotNull(groupName)) {
119                 titlePattern += "-in";
120             }
121 
122             titleArguments = new Object[] {
123                 creatorUserName, receiverUserName, HtmlUtil.escape(groupName)
124             };
125         }
126 
127         String title = themeDisplay.translate(titlePattern, titleArguments);
128 
129         // Body
130 
131         TasksProposal proposal = TasksProposalLocalServiceUtil.getProposal(
132             activity.getClassPK());
133 
134         StringBuilder sb = new StringBuilder();
135 
136         sb.append("<b>");
137         sb.append(HtmlUtil.escape(proposal.getName()));
138         sb.append("</b> (");
139         sb.append(
140             themeDisplay.translate(
141                 "model.resource." + proposal.getClassName()));
142         sb.append(")<br />");
143         sb.append(themeDisplay.translate("description"));
144         sb.append(": ");
145         sb.append(HtmlUtil.escape(proposal.getDescription()));
146 
147         if (activityType != TasksActivityKeys.ADD_PROPOSAL) {
148             int stage = extraData.getInt("stage");
149             boolean completed = extraData.getBoolean("completed");
150             boolean rejected = extraData.getBoolean("rejected");
151 
152             sb.append("<br />");
153             sb.append(themeDisplay.translate("stage"));
154             sb.append(": ");
155             sb.append(stage);
156             sb.append("<br />");
157             sb.append(themeDisplay.translate("status"));
158             sb.append(": ");
159 
160             if (completed && rejected) {
161                 sb.append(themeDisplay.translate("rejected"));
162             }
163             else if (completed && !rejected) {
164                 sb.append(themeDisplay.translate("approved"));
165             }
166             else {
167                 sb.append(themeDisplay.translate("awaiting-approval"));
168             }
169         }
170 
171         String body = sb.toString();
172 
173         return new SocialActivityFeedEntry(title, body);
174     }
175 
176     private static final String[] _CLASS_NAMES = new String[] {
177         TasksProposal.class.getName()
178     };
179 
180 }