/portlets/opensocial-portlet/docroot/WEB-INF/src/com/liferay/opensocial/shindig/service/LiferayActivityService.java
Java | 447 lines | 325 code | 106 blank | 16 comment | 23 complexity | ea0fcb2259b3d8334848279d5ac10519 MD5 | raw file
- /**
- * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2.1 of the License, or (at your option)
- * any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- * details.
- */
- package com.liferay.opensocial.shindig.service;
- import com.liferay.opensocial.shindig.util.SerializerUtil;
- import com.liferay.portal.kernel.json.JSONArray;
- import com.liferay.portal.kernel.json.JSONFactoryUtil;
- import com.liferay.portal.kernel.json.JSONObject;
- import com.liferay.portal.kernel.log.Log;
- import com.liferay.portal.kernel.log.LogFactoryUtil;
- import com.liferay.portal.kernel.util.GetterUtil;
- import com.liferay.portal.model.Company;
- import com.liferay.portal.model.User;
- import com.liferay.portal.service.CompanyLocalServiceUtil;
- import com.liferay.portal.service.UserLocalServiceUtil;
- import com.liferay.portal.theme.ThemeDisplay;
- import com.liferay.portlet.social.model.SocialActivity;
- import com.liferay.portlet.social.model.SocialActivityFeedEntry;
- import com.liferay.portlet.social.service.SocialActivityInterpreterLocalServiceUtil;
- import com.liferay.portlet.social.service.SocialActivityLocalServiceUtil;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map.Entry;
- import java.util.Map;
- import java.util.Set;
- import java.util.concurrent.Future;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.shindig.auth.SecurityToken;
- import org.apache.shindig.common.util.ImmediateFuture;
- import org.apache.shindig.protocol.ProtocolException;
- import org.apache.shindig.protocol.RestfulCollection;
- import org.apache.shindig.social.core.model.ActivityImpl;
- import org.apache.shindig.social.core.model.MediaItemImpl;
- import org.apache.shindig.social.opensocial.model.Activity;
- import org.apache.shindig.social.opensocial.model.MediaItem.Type;
- import org.apache.shindig.social.opensocial.model.MediaItem;
- import org.apache.shindig.social.opensocial.spi.ActivityService;
- import org.apache.shindig.social.opensocial.spi.CollectionOptions;
- import org.apache.shindig.social.opensocial.spi.GroupId;
- import org.apache.shindig.social.opensocial.spi.UserId;
- /**
- * @author Michael Young
- */
- public class LiferayActivityService implements ActivityService {
- public Future<Void> createActivity(
- UserId userId, GroupId groupId, String appId, Set<String> fields,
- Activity activity, SecurityToken securityToken)
- throws ProtocolException {
- try {
- doCreateActivity(
- userId, groupId, appId, fields, activity, securityToken);
- return ImmediateFuture.newInstance(null);
- }
- catch (Exception e) {
- if (_log.isDebugEnabled()) {
- _log.debug(e, e);
- }
- throw new ProtocolException(
- HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
- e);
- }
- }
- public Future<Void> deleteActivities(
- UserId userId, GroupId groupId, String appId,
- Set<String> activityIds, SecurityToken securityToken)
- throws ProtocolException {
- try {
- doDeleteActivities(
- userId, groupId, appId, activityIds, securityToken);
- return ImmediateFuture.newInstance(null);
- }
- catch (Exception e) {
- if (_log.isDebugEnabled()) {
- _log.debug(e, e);
- }
- throw new ProtocolException(
- HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
- e);
- }
- }
- public void doCreateActivity(
- UserId userId, GroupId groupId, String appId, Set<String> fields,
- Activity activity, SecurityToken securityToken)
- throws Exception {
- long userIdLong = GetterUtil.getLong(userId.getUserId(securityToken));
- JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject();
- SerializerUtil.copyProperties(
- activity, extraDataJSONObject, _ACTIVITY_FIELDS);
- SocialActivityLocalServiceUtil.addActivity(
- userIdLong, 0L, Activity.class.getName(),
- activity.getPostedTime().longValue(),
- activity.getAppId().hashCode(), extraDataJSONObject.toString(), 0L);
- }
- public void doDeleteActivities(
- UserId userId, GroupId groupId, String appId,
- Set<String> activityIds, SecurityToken securityToken)
- throws Exception {
- for (String activityId : activityIds) {
- long activityIdLong = GetterUtil.getLong(activityId);
- SocialActivityLocalServiceUtil.deleteActivity(activityIdLong);
- }
- }
- public RestfulCollection<Activity> doGetActivities(
- Set<UserId> userIds, GroupId groupId, String appId,
- Set<String> fields, CollectionOptions collectionOptions,
- SecurityToken securityToken)
- throws Exception {
- ThemeDisplay themeDisplay = getThemeDisplay(securityToken);
- List<Activity> activities = new ArrayList<Activity>();
- for (UserId userId : userIds) {
- long userIdLong = GetterUtil.getLong(
- userId.getUserId(securityToken));
- List<Activity> personActivities = getActivities(
- themeDisplay, userIdLong);
- activities.addAll(personActivities);
- }
- return new RestfulCollection<Activity>(
- activities, collectionOptions.getFirst(), activities.size(),
- collectionOptions.getMax());
- }
- public RestfulCollection<Activity> doGetActivities(
- UserId userId, GroupId groupId, String appId, Set<String> fields,
- CollectionOptions collectionOptions, Set<String> activityIds,
- SecurityToken securityToken)
- throws Exception {
- ThemeDisplay themeDisplay = getThemeDisplay(securityToken);
- long userIdLong = GetterUtil.getLong(userId.getUserId(securityToken));
- List<Activity> activities = getActivities(themeDisplay, userIdLong);
- return new RestfulCollection<Activity>(
- activities, collectionOptions.getFirst(), activities.size(),
- collectionOptions.getMax());
- }
- public Activity doGetActivity(
- UserId userId, GroupId groupId, String appId, Set<String> fields,
- String activityId, SecurityToken securityToken)
- throws Exception {
- ThemeDisplay themeDisplay = getThemeDisplay(securityToken);
- long activityIdLong = GetterUtil.getLong(activityId);
- SocialActivity socialActivity =
- SocialActivityLocalServiceUtil.getActivity(activityIdLong);
- return getActivity(themeDisplay, socialActivity);
- }
- public Future<RestfulCollection<Activity>> getActivities(
- Set<UserId> userIds, GroupId groupId, String appId,
- Set<String> fields, CollectionOptions collectionOptions,
- SecurityToken securityToken)
- throws ProtocolException {
- try {
- RestfulCollection<Activity> activities = doGetActivities(
- userIds, groupId, appId, fields, collectionOptions,
- securityToken);
- return ImmediateFuture.newInstance(activities);
- }
- catch (Exception e) {
- if (_log.isDebugEnabled()) {
- _log.debug(e, e);
- }
- throw new ProtocolException(
- HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
- e);
- }
- }
- public Future<RestfulCollection<Activity>> getActivities(
- UserId userId, GroupId groupId, String appId, Set<String> fields,
- CollectionOptions collectionOptions, Set<String> activityIds,
- SecurityToken securityToken)
- throws ProtocolException {
- try {
- RestfulCollection<Activity> activities = doGetActivities(
- userId, groupId, appId, fields, collectionOptions, activityIds,
- securityToken);
- return ImmediateFuture.newInstance(activities);
- }
- catch (Exception e) {
- if (_log.isDebugEnabled()) {
- _log.debug(e, e);
- }
- throw new ProtocolException(
- HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
- e);
- }
- }
- public Future<Activity> getActivity(
- UserId userId, GroupId groupId, String appId, Set<String> fields,
- String activityId, SecurityToken securityToken)
- throws ProtocolException {
- try {
- Activity activity = doGetActivity(
- userId, groupId, appId, fields, activityId, securityToken);
- return ImmediateFuture.newInstance(activity);
- }
- catch (Exception e) {
- if (_log.isDebugEnabled()) {
- _log.debug(e, e);
- }
- throw new ProtocolException(
- HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(),
- e);
- }
- }
- protected List<Activity> getActivities(
- ThemeDisplay themeDisplay, long userId)
- throws Exception {
- List<Activity> activities = new ArrayList<Activity>();
- List<SocialActivity> socialActivities =
- SocialActivityLocalServiceUtil.getUserActivities(userId, 0, 20);
- for (SocialActivity socialActivity : socialActivities) {
- Activity activity = getActivity(themeDisplay, socialActivity);
- activities.add(activity);
- }
- return activities;
- }
- protected Activity getActivity(
- ThemeDisplay themeDisplay, SocialActivity socialActivity)
- throws Exception {
- Activity activity = null;
- if (socialActivity.getClassName().equals(Activity.class.getName())) {
- activity = getExternalActivity(socialActivity);
- }
- else {
- activity = new ActivityImpl(
- String.valueOf(socialActivity.getClassPK()),
- String.valueOf(socialActivity.getUserId()));
- SocialActivityFeedEntry socialActivityFeedEntry =
- SocialActivityInterpreterLocalServiceUtil.interpret(
- socialActivity, themeDisplay);
- activity.setBody(socialActivityFeedEntry.getBody());
- activity.setTitle(socialActivityFeedEntry.getTitle());
- activity.setUrl(socialActivityFeedEntry.getLink());
- }
- return activity;
- }
- protected Activity getExternalActivity(SocialActivity socialActivity)
- throws Exception {
- Activity activity = new ActivityImpl(
- String.valueOf(socialActivity.getClassPK()),
- String.valueOf(socialActivity.getUserId()));
- JSONObject extraDataJSONObject = JSONFactoryUtil.createJSONObject(
- socialActivity.getExtraData());
- SerializerUtil.copyProperties(
- extraDataJSONObject, activity, _ACTIVITY_FIELDS);
- return activity;
- }
- protected List<MediaItem> getMediaItems(JSONArray mediaItemsJSONArray) {
- if (mediaItemsJSONArray == null) {
- return null;
- }
- List<MediaItem> mediaItems = new ArrayList<MediaItem>();
- for (int i = 0; i < mediaItemsJSONArray.length(); i++) {
- JSONObject mediaItemsJsonObject = mediaItemsJSONArray.getJSONObject(
- i);
- MediaItem mediaItem = new MediaItemImpl(
- mediaItemsJsonObject.getString("mimeType"),
- Type.valueOf(mediaItemsJsonObject.getString("type")),
- mediaItemsJsonObject.getString("url"));
- mediaItems.add(mediaItem);
- }
- return mediaItems;
- }
- protected JSONArray getMediaItems(List<MediaItem> mediaItems) {
- if (mediaItems == null) {
- return null;
- }
- JSONArray mediaItemsJSONArray = JSONFactoryUtil.createJSONArray();
- for (MediaItem mediaItem : mediaItems) {
- JSONObject mediaItemsJsonObject =
- JSONFactoryUtil.createJSONObject();
- mediaItemsJsonObject.put("mimeType", mediaItem.getMimeType());
- mediaItemsJsonObject.put("type", mediaItem.getType().toString());
- mediaItemsJsonObject.put("url", mediaItem.getUrl());
- mediaItemsJSONArray.put(mediaItemsJsonObject);
- }
- return mediaItemsJSONArray;
- }
- protected Map<String, String> getTemplateParams(
- JSONArray templateParamsJSONArray) {
- if (templateParamsJSONArray == null) {
- return null;
- }
- Map<String, String> templateParams = new HashMap<String, String>();
- for (int i = 0; i < templateParamsJSONArray.length(); i++) {
- JSONObject templateParamJSONObject =
- templateParamsJSONArray.getJSONObject(i);
- JSONArray namesJSONArray = templateParamJSONObject.names();
- for (int j = 0; j < namesJSONArray.length(); j++) {
- String name = namesJSONArray.getString(j);
- String value = templateParamJSONObject.getString(name);
- templateParams.put(name, value);
- }
- }
- return templateParams;
- }
- protected JSONArray getTemplateParams(Map<String, String> map) {
- if (map == null) {
- return null;
- }
- JSONArray templateParamsJSONArray = JSONFactoryUtil.createJSONArray();
- for (Entry<String, String> entry : map.entrySet()) {
- JSONObject templateParamJSONObject =
- JSONFactoryUtil.createJSONObject();
- String name = entry.getKey();
- String value = entry.getValue();
- templateParamJSONObject.put(name, value);
- templateParamsJSONArray.put(templateParamJSONObject);
- }
- return templateParamsJSONArray;
- }
- protected ThemeDisplay getThemeDisplay(SecurityToken securityToken)
- throws Exception {
- long userIdLong = GetterUtil.getLong(securityToken.getViewerId());
- User user = UserLocalServiceUtil.getUserById(userIdLong);
- Company company = CompanyLocalServiceUtil.getCompanyById(
- user.getCompanyId());
- ThemeDisplay themeDisplay = new ThemeDisplay();
- themeDisplay.setCompany(company);
- themeDisplay.setLocale(user.getLocale());
- return themeDisplay;
- }
- private static final Activity.Field[] _ACTIVITY_FIELDS = {
- Activity.Field.APP_ID, Activity.Field.BODY, Activity.Field.BODY_ID,
- Activity.Field.EXTERNAL_ID, Activity.Field.MEDIA_ITEMS,
- Activity.Field.POSTED_TIME, Activity.Field.PRIORITY,
- Activity.Field.STREAM_FAVICON_URL, Activity.Field.STREAM_SOURCE_URL,
- Activity.Field.STREAM_TITLE, Activity.Field.STREAM_URL,
- Activity.Field.TEMPLATE_PARAMS, Activity.Field.TITLE,
- Activity.Field.TITLE_ID, Activity.Field.URL
- };
- private static Log _log = LogFactoryUtil.getLog(
- LiferayActivityService.class);
- }