1   /**
2    * Copyright (c) 2000-2008 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.util.StringMaker;
26  import com.liferay.portal.kernel.util.StringPool;
27  import com.liferay.portal.model.User;
28  import com.liferay.portal.service.UserLocalServiceUtil;
29  import com.liferay.portal.theme.ThemeDisplay;
30  import com.liferay.portlet.social.model.SocialActivity;
31  import com.liferay.portlet.social.model.SocialActivityFeedEntry;
32  import com.liferay.portlet.social.model.SocialActivityInterpreter;
33  import com.liferay.portlet.tasks.model.TasksProposal;
34  import com.liferay.portlet.tasks.service.TasksProposalLocalServiceUtil;
35  
36  import org.apache.commons.logging.Log;
37  import org.apache.commons.logging.LogFactory;
38  
39  import org.json.JSONObject;
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 implements SocialActivityInterpreter {
48  
49      public String[] getClassNames() {
50          return _CLASS_NAMES;
51      }
52  
53      public SocialActivityFeedEntry interpret(
54          SocialActivity activity, ThemeDisplay themeDisplay) {
55  
56          try {
57              return doInterpret(activity, themeDisplay);
58          }
59          catch (Exception e) {
60              if (_log.isWarnEnabled()) {
61                  _log.warn(e);
62              }
63          }
64  
65          return null;
66      }
67  
68      protected SocialActivityFeedEntry doInterpret(
69              SocialActivity activity, ThemeDisplay themeDisplay)
70          throws Exception {
71  
72          User creatorUser = UserLocalServiceUtil.getUserById(
73              activity.getUserId());
74  
75          String creatorUserName = "<b>" + creatorUser.getFullName() + "</b>";
76  
77          String type = activity.getType();
78  
79          String receiverUserName = activity.getReceiverUserName();
80  
81          if (activity.getReceiverUserId() > 0) {
82              User receiverUser = UserLocalServiceUtil.getUserById(
83                  activity.getReceiverUserId());
84  
85              receiverUserName = "<b>" + receiverUser.getFullName() + "</b>";
86          }
87  
88          // Title
89  
90          String title = StringPool.BLANK;
91  
92          if (type.equals(TasksActivityKeys.ASSIGN)) {
93              title = themeDisplay.translate(
94                  "activity-tasks-x-assigned-proposal-to-x-for-review",
95                  new Object[] {creatorUserName, receiverUserName});
96          }
97          else if (type.equals(TasksActivityKeys.PROPOSE)) {
98              title = themeDisplay.translate(
99                  "activity-tasks-x-created-proposal", creatorUserName);
100         }
101         else if (type.equals(TasksActivityKeys.REVIEW)) {
102             title = themeDisplay.translate(
103                 "activity-tasks-x-reviewed-proposal-from-x",
104                 new Object[] {creatorUserName, receiverUserName});
105         }
106 
107         // Body
108 
109         TasksProposal proposal = TasksProposalLocalServiceUtil.getProposal(
110             activity.getClassPK());
111 
112         StringMaker sm = new StringMaker();
113 
114         sm.append("<b>");
115         sm.append(proposal.getName());
116         sm.append("</b> (");
117         sm.append(
118             themeDisplay.translate(
119                 "model.resource." + proposal.getClassName()));
120         sm.append(")<br />");
121         sm.append(themeDisplay.translate("description"));
122         sm.append(": ");
123         sm.append(proposal.getDescription());
124 
125         if (!activity.equals(TasksActivityKeys.PROPOSE)) {
126             JSONObject extraData = new JSONObject(activity.getExtraData());
127 
128             int stage = extraData.getInt("stage");
129             boolean completed = extraData.getBoolean("completed");
130             boolean rejected = extraData.getBoolean("rejected");
131 
132             sm.append("<br />");
133             sm.append(themeDisplay.translate("stage"));
134             sm.append(": ");
135             sm.append(stage);
136             sm.append("<br />");
137             sm.append(themeDisplay.translate("status"));
138             sm.append(": ");
139 
140             if (completed && rejected) {
141                 sm.append(themeDisplay.translate("rejected"));
142             }
143             else if (completed && !rejected) {
144                 sm.append(themeDisplay.translate("approved"));
145             }
146             else {
147                 sm.append(themeDisplay.translate("awaiting-approval"));
148             }
149         }
150 
151         String body = sm.toString();
152 
153         return new SocialActivityFeedEntry(title, body);
154     }
155 
156     private static final String[] _CLASS_NAMES = new String[] {
157         TasksProposal.class.getName()
158     };
159 
160     private static Log _log = LogFactory.getLog(TasksActivityInterpreter.class);
161 
162 }