PageRenderTime 25ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/portlets/opensocial-portlet/docroot/WEB-INF/src/com/liferay/opensocial/shindig/service/LiferayActivityService.java

https://github.com/l15k4/liferay-plugins
Java | 447 lines | 325 code | 106 blank | 16 comment | 23 complexity | ea0fcb2259b3d8334848279d5ac10519 MD5 | raw file
  1. /**
  2. * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
  3. *
  4. * This library is free software; you can redistribute it and/or modify it under
  5. * the terms of the GNU Lesser General Public License as published by the Free
  6. * Software Foundation; either version 2.1 of the License, or (at your option)
  7. * any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  11. * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
  12. * details.
  13. */
  14. package com.liferay.opensocial.shindig.service;
  15. import com.liferay.opensocial.shindig.util.SerializerUtil;
  16. import com.liferay.portal.kernel.json.JSONArray;
  17. import com.liferay.portal.kernel.json.JSONFactoryUtil;
  18. import com.liferay.portal.kernel.json.JSONObject;
  19. import com.liferay.portal.kernel.log.Log;
  20. import com.liferay.portal.kernel.log.LogFactoryUtil;
  21. import com.liferay.portal.kernel.util.GetterUtil;
  22. import com.liferay.portal.model.Company;
  23. import com.liferay.portal.model.User;
  24. import com.liferay.portal.service.CompanyLocalServiceUtil;
  25. import com.liferay.portal.service.UserLocalServiceUtil;
  26. import com.liferay.portal.theme.ThemeDisplay;
  27. import com.liferay.portlet.social.model.SocialActivity;
  28. import com.liferay.portlet.social.model.SocialActivityFeedEntry;
  29. import com.liferay.portlet.social.service.SocialActivityInterpreterLocalServiceUtil;
  30. import com.liferay.portlet.social.service.SocialActivityLocalServiceUtil;
  31. import java.util.ArrayList;
  32. import java.util.HashMap;
  33. import java.util.List;
  34. import java.util.Map.Entry;
  35. import java.util.Map;
  36. import java.util.Set;
  37. import java.util.concurrent.Future;
  38. import javax.servlet.http.HttpServletResponse;
  39. import org.apache.shindig.auth.SecurityToken;
  40. import org.apache.shindig.common.util.ImmediateFuture;
  41. import org.apache.shindig.protocol.ProtocolException;
  42. import org.apache.shindig.protocol.RestfulCollection;
  43. import org.apache.shindig.social.core.model.ActivityImpl;
  44. import org.apache.shindig.social.core.model.MediaItemImpl;
  45. import org.apache.shindig.social.opensocial.model.Activity;
  46. import org.apache.shindig.social.opensocial.model.MediaItem.Type;
  47. import org.apache.shindig.social.opensocial.model.MediaItem;
  48. import org.apache.shindig.social.opensocial.spi.ActivityService;
  49. import org.apache.shindig.social.opensocial.spi.CollectionOptions;
  50. import org.apache.shindig.social.opensocial.spi.GroupId;
  51. import org.apache.shindig.social.opensocial.spi.UserId;
  52. /**
  53. * @author Michael Young
  54. */
  55. public class LiferayActivityService implements ActivityService {
  56. public Future<Void> createActivity(
  57. UserId userId, GroupId groupId, String appId, Set<String> fields,
  58. Activity activity, SecurityToken securityToken)
  59. throws ProtocolException {
  60. try {
  61. doCreateActivity(
  62. userId, groupId, appId, fields, activity, securityToken);
  63. return ImmediateFuture.newInstance(null);
  64. }
  65. catch (Exception e) {
  66. if (_log.isDebugEnabled()) {
  67. _log.debug(e, e);
  68. }
  69. throw new ProtocolException(
  70. HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
  71. e);
  72. }
  73. }
  74. public Future<Void> deleteActivities(
  75. UserId userId, GroupId groupId, String appId,
  76. Set<String> activityIds, SecurityToken securityToken)
  77. throws ProtocolException {
  78. try {
  79. doDeleteActivities(
  80. userId, groupId, appId, activityIds, securityToken);
  81. return ImmediateFuture.newInstance(null);
  82. }
  83. catch (Exception e) {
  84. if (_log.isDebugEnabled()) {
  85. _log.debug(e, e);
  86. }
  87. throw new ProtocolException(
  88. HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
  89. e);
  90. }
  91. }
  92. public void doCreateActivity(
  93. UserId userId, GroupId groupId, String appId, Set<String> fields,
  94. Activity activity, SecurityToken securityToken)
  95. throws Exception {
  96. long userIdLong = GetterUtil.getLong(userId.getUserId(securityToken));
  97. JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
  98. SerializerUtil.copyProperties(
  99. activity, extraDataJSONObject, _ACTIVITY_FIELDS);
  100. SocialActivityLocalServiceUtil.addActivity(
  101. userIdLong, 0L, Activity.class.getName(),
  102. activity.getPostedTime().longValue(),
  103. activity.getAppId().hashCode(), extraDataJSONObject.toString(), 0L);
  104. }
  105. public void doDeleteActivities(
  106. UserId userId, GroupId groupId, String appId,
  107. Set<String> activityIds, SecurityToken securityToken)
  108. throws Exception {
  109. for (String activityId : activityIds) {
  110. long activityIdLong = GetterUtil.getLong(activityId);
  111. SocialActivityLocalServiceUtil.deleteActivity(activityIdLong);
  112. }
  113. }
  114. public RestfulCollection<Activity> doGetActivities(
  115. Set<UserId> userIds, GroupId groupId, String appId,
  116. Set<String> fields, CollectionOptions collectionOptions,
  117. SecurityToken securityToken)
  118. throws Exception {
  119. ThemeDisplay themeDisplay = getThemeDisplay(securityToken);
  120. List<Activity> activities = new ArrayList<Activity>();
  121. for (UserId userId : userIds) {
  122. long userIdLong = GetterUtil.getLong(
  123. userId.getUserId(securityToken));
  124. List<Activity> personActivities = getActivities(
  125. themeDisplay, userIdLong);
  126. activities.addAll(personActivities);
  127. }
  128. return new RestfulCollection<Activity>(
  129. activities, collectionOptions.getFirst(), activities.size(),
  130. collectionOptions.getMax());
  131. }
  132. public RestfulCollection<Activity> doGetActivities(
  133. UserId userId, GroupId groupId, String appId, Set<String> fields,
  134. CollectionOptions collectionOptions, Set<String> activityIds,
  135. SecurityToken securityToken)
  136. throws Exception {
  137. ThemeDisplay themeDisplay = getThemeDisplay(securityToken);
  138. long userIdLong = GetterUtil.getLong(userId.getUserId(securityToken));
  139. List<Activity> activities = getActivities(themeDisplay, userIdLong);
  140. return new RestfulCollection<Activity>(
  141. activities, collectionOptions.getFirst(), activities.size(),
  142. collectionOptions.getMax());
  143. }
  144. public Activity doGetActivity(
  145. UserId userId, GroupId groupId, String appId, Set<String> fields,
  146. String activityId, SecurityToken securityToken)
  147. throws Exception {
  148. ThemeDisplay themeDisplay = getThemeDisplay(securityToken);
  149. long activityIdLong = GetterUtil.getLong(activityId);
  150. SocialActivity socialActivity =
  151. SocialActivityLocalServiceUtil.getActivity(activityIdLong);
  152. return getActivity(themeDisplay, socialActivity);
  153. }
  154. public Future<RestfulCollection<Activity>> getActivities(
  155. Set<UserId> userIds, GroupId groupId, String appId,
  156. Set<String> fields, CollectionOptions collectionOptions,
  157. SecurityToken securityToken)
  158. throws ProtocolException {
  159. try {
  160. RestfulCollection<Activity> activities = doGetActivities(
  161. userIds, groupId, appId, fields, collectionOptions,
  162. securityToken);
  163. return ImmediateFuture.newInstance(activities);
  164. }
  165. catch (Exception e) {
  166. if (_log.isDebugEnabled()) {
  167. _log.debug(e, e);
  168. }
  169. throw new ProtocolException(
  170. HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
  171. e);
  172. }
  173. }
  174. public Future<RestfulCollection<Activity>> getActivities(
  175. UserId userId, GroupId groupId, String appId, Set<String> fields,
  176. CollectionOptions collectionOptions, Set<String> activityIds,
  177. SecurityToken securityToken)
  178. throws ProtocolException {
  179. try {
  180. RestfulCollection<Activity> activities = doGetActivities(
  181. userId, groupId, appId, fields, collectionOptions, activityIds,
  182. securityToken);
  183. return ImmediateFuture.newInstance(activities);
  184. }
  185. catch (Exception e) {
  186. if (_log.isDebugEnabled()) {
  187. _log.debug(e, e);
  188. }
  189. throw new ProtocolException(
  190. HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
  191. e);
  192. }
  193. }
  194. public Future<Activity> getActivity(
  195. UserId userId, GroupId groupId, String appId, Set<String> fields,
  196. String activityId, SecurityToken securityToken)
  197. throws ProtocolException {
  198. try {
  199. Activity activity = doGetActivity(
  200. userId, groupId, appId, fields, activityId, securityToken);
  201. return ImmediateFuture.newInstance(activity);
  202. }
  203. catch (Exception e) {
  204. if (_log.isDebugEnabled()) {
  205. _log.debug(e, e);
  206. }
  207. throw new ProtocolException(
  208. HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
  209. e);
  210. }
  211. }
  212. protected List<Activity> getActivities(
  213. ThemeDisplay themeDisplay, long userId)
  214. throws Exception {
  215. List<Activity> activities = new ArrayList<Activity>();
  216. List<SocialActivity> socialActivities =
  217. SocialActivityLocalServiceUtil.getUserActivities(userId, 0, 20);
  218. for (SocialActivity socialActivity : socialActivities) {
  219. Activity activity = getActivity(themeDisplay, socialActivity);
  220. activities.add(activity);
  221. }
  222. return activities;
  223. }
  224. protected Activity getActivity(
  225. ThemeDisplay themeDisplay, SocialActivity socialActivity)
  226. throws Exception {
  227. Activity activity = null;
  228. if (socialActivity.getClassName().equals(Activity.class.getName())) {
  229. activity = getExternalActivity(socialActivity);
  230. }
  231. else {
  232. activity = new ActivityImpl(
  233. String.valueOf(socialActivity.getClassPK()),
  234. String.valueOf(socialActivity.getUserId()));
  235. SocialActivityFeedEntry socialActivityFeedEntry =
  236. SocialActivityInterpreterLocalServiceUtil.interpret(
  237. socialActivity, themeDisplay);
  238. activity.setBody(socialActivityFeedEntry.getBody());
  239. activity.setTitle(socialActivityFeedEntry.getTitle());
  240. activity.setUrl(socialActivityFeedEntry.getLink());
  241. }
  242. return activity;
  243. }
  244. protected Activity getExternalActivity(SocialActivity socialActivity)
  245. throws Exception {
  246. Activity activity = new ActivityImpl(
  247. String.valueOf(socialActivity.getClassPK()),
  248. String.valueOf(socialActivity.getUserId()));
  249. JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject(
  250. socialActivity.getExtraData());
  251. SerializerUtil.copyProperties(
  252. extraDataJSONObject, activity, _ACTIVITY_FIELDS);
  253. return activity;
  254. }
  255. protected List<MediaItem> getMediaItems(JSONArray mediaItemsJSONArray) {
  256. if (mediaItemsJSONArray == null) {
  257. return null;
  258. }
  259. List<MediaItem> mediaItems = new ArrayList<MediaItem>();
  260. for (int i = 0; i < mediaItemsJSONArray.length(); i++) {
  261. JSONObject mediaItemsJsonObject = mediaItemsJSONArray.getJSONObject(
  262. i);
  263. MediaItem mediaItem = new MediaItemImpl(
  264. mediaItemsJsonObject.getString("mimeType"),
  265. Type.valueOf(mediaItemsJsonObject.getString("type")),
  266. mediaItemsJsonObject.getString("url"));
  267. mediaItems.add(mediaItem);
  268. }
  269. return mediaItems;
  270. }
  271. protected JSONArray getMediaItems(List<MediaItem> mediaItems) {
  272. if (mediaItems == null) {
  273. return null;
  274. }
  275. JSONArray mediaItemsJSONArray = JSONFactoryUtil.createJSONArray();
  276. for (MediaItem mediaItem : mediaItems) {
  277. JSONObject mediaItemsJsonObject =
  278. JSONFactoryUtil.createJSONObject();
  279. mediaItemsJsonObject.put("mimeType", mediaItem.getMimeType());
  280. mediaItemsJsonObject.put("type", mediaItem.getType().toString());
  281. mediaItemsJsonObject.put("url", mediaItem.getUrl());
  282. mediaItemsJSONArray.put(mediaItemsJsonObject);
  283. }
  284. return mediaItemsJSONArray;
  285. }
  286. protected Map<String, String> getTemplateParams(
  287. JSONArray templateParamsJSONArray) {
  288. if (templateParamsJSONArray == null) {
  289. return null;
  290. }
  291. Map<String, String> templateParams = new HashMap<String, String>();
  292. for (int i = 0; i < templateParamsJSONArray.length(); i++) {
  293. JSONObject templateParamJSONObject =
  294. templateParamsJSONArray.getJSONObject(i);
  295. JSONArray namesJSONArray = templateParamJSONObject.names();
  296. for (int j = 0; j < namesJSONArray.length(); j++) {
  297. String name = namesJSONArray.getString(j);
  298. String value = templateParamJSONObject.getString(name);
  299. templateParams.put(name, value);
  300. }
  301. }
  302. return templateParams;
  303. }
  304. protected JSONArray getTemplateParams(Map<String, String> map) {
  305. if (map == null) {
  306. return null;
  307. }
  308. JSONArray templateParamsJSONArray = JSONFactoryUtil.createJSONArray();
  309. for (Entry<String, String> entry : map.entrySet()) {
  310. JSONObject templateParamJSONObject =
  311. JSONFactoryUtil.createJSONObject();
  312. String name = entry.getKey();
  313. String value = entry.getValue();
  314. templateParamJSONObject.put(name, value);
  315. templateParamsJSONArray.put(templateParamJSONObject);
  316. }
  317. return templateParamsJSONArray;
  318. }
  319. protected ThemeDisplay getThemeDisplay(SecurityToken securityToken)
  320. throws Exception {
  321. long userIdLong = GetterUtil.getLong(securityToken.getViewerId());
  322. User user = UserLocalServiceUtil.getUserById(userIdLong);
  323. Company company = CompanyLocalServiceUtil.getCompanyById(
  324. user.getCompanyId());
  325. ThemeDisplay themeDisplay = new ThemeDisplay();
  326. themeDisplay.setCompany(company);
  327. themeDisplay.setLocale(user.getLocale());
  328. return themeDisplay;
  329. }
  330. private static final Activity.Field[] _ACTIVITY_FIELDS = {
  331. Activity.Field.APP_ID, Activity.Field.BODY, Activity.Field.BODY_ID,
  332. Activity.Field.EXTERNAL_ID, Activity.Field.MEDIA_ITEMS,
  333. Activity.Field.POSTED_TIME, Activity.Field.PRIORITY,
  334. Activity.Field.STREAM_FAVICON_URL, Activity.Field.STREAM_SOURCE_URL,
  335. Activity.Field.STREAM_TITLE, Activity.Field.STREAM_URL,
  336. Activity.Field.TEMPLATE_PARAMS, Activity.Field.TITLE,
  337. Activity.Field.TITLE_ID, Activity.Field.URL
  338. };
  339. private static Log _log = LogFactoryUtil.getLog(
  340. LiferayActivityService.class);
  341. }