From 1904f66734c627ee95d2e7e3be9b5262875e129d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BC?= Date: Sat, 25 Jun 2011 17:58:43 +0000 Subject: [PATCH] User status changes now generate activities Activities Dashlet: - added "I'm following" filter - prepared activities filter (not working yet) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28589 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/activities/ActivityServiceImpl.java | 26 +++++++++- .../activities/ActivityServiceImplTest.java | 6 +-- .../repo/activities/SiteActivityTest.java | 2 +- .../activities/feed/FeedNotifierImpl.java | 4 +- .../activities/feed/FeedTaskProcessor.java | 11 ++-- .../ibatis/SubscriptionsDAOImpl.java | 9 ++-- .../cmr/activities/ActivityService.java | 52 ++++++++++++++++++- 7 files changed, 89 insertions(+), 21 deletions(-) diff --git a/source/java/org/alfresco/repo/activities/ActivityServiceImpl.java b/source/java/org/alfresco/repo/activities/ActivityServiceImpl.java index c4b6f253fa..85f0582973 100644 --- a/source/java/org/alfresco/repo/activities/ActivityServiceImpl.java +++ b/source/java/org/alfresco/repo/activities/ActivityServiceImpl.java @@ -21,6 +21,7 @@ package org.alfresco.repo.activities; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import java.util.Set; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.activities.feed.cleanup.FeedCleaner; @@ -167,19 +168,27 @@ public class ActivityServiceImpl implements ActivityService, InitializingBean */ public List getUserFeedEntries(String feedUserId, String format, String siteId) { - return getUserFeedEntries(feedUserId, format, siteId, false, false); + return getUserFeedEntries(feedUserId, format, siteId, false, false, null, null); } /* (non-Javadoc) * @see org.alfresco.service.cmr.activities.ActivityService#getUserFeedEntries(java.lang.String, java.lang.String, java.lang.String, boolean, boolean) */ public List getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers) + { + return getUserFeedEntries(feedUserId, format, siteId,excludeThisUser, excludeOtherUsers, null, null); + } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.activities.ActivityService#getUserFeedEntries(java.lang.String, java.lang.String, java.lang.String, boolean, boolean, java.util.Set, java.util.Set) + */ + public List getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, Set userFilter, Set actvityFilter) { List activityFeedEntries = new ArrayList(); try { - List activityFeeds = getUserFeedEntries(feedUserId, format, siteId, excludeThisUser, excludeOtherUsers, -1); + List activityFeeds = getUserFeedEntries(feedUserId, format, siteId, excludeThisUser, excludeOtherUsers, userFilter, actvityFilter, -1); if (activityFeeds != null) { @@ -200,6 +209,11 @@ public class ActivityServiceImpl implements ActivityService, InitializingBean } public List getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, long minFeedId) + { + return getUserFeedEntries(feedUserId, format, siteId, excludeThisUser, excludeOtherUsers, null, null, minFeedId); + } + + public List getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, Set userFilter, Set actvityFilter, long minFeedId) { // NOTE: siteId is optional ParameterCheck.mandatoryString("feedUserId", feedUserId); @@ -232,6 +246,14 @@ public class ActivityServiceImpl implements ActivityService, InitializingBean for (ActivityFeedEntity activityFeed : activityFeeds) { + if (actvityFilter != null && !actvityFilter.contains(activityFeed.getActivityType())) { + continue; + } + + if (userFilter != null && !userFilter.contains(activityFeed.getPostUserId())) { + continue; + } + activityFeed.setSiteNetwork(tenantService.getBaseName(activityFeed.getSiteNetwork())); result.add(activityFeed); } diff --git a/source/java/org/alfresco/repo/activities/ActivityServiceImplTest.java b/source/java/org/alfresco/repo/activities/ActivityServiceImplTest.java index f9e8c23930..cd2d49da1a 100644 --- a/source/java/org/alfresco/repo/activities/ActivityServiceImplTest.java +++ b/source/java/org/alfresco/repo/activities/ActivityServiceImplTest.java @@ -130,17 +130,17 @@ public class ActivityServiceImplTest extends BaseSpringTest assertNotNull(userFeedEntries); assertTrue(userFeedEntries.isEmpty()); - userFeedEntries = this.activityService.getUserFeedEntries("unknown user", "a format", "some site", true, false); + userFeedEntries = this.activityService.getUserFeedEntries("unknown user", "a format", "some site", true, false, null, null); assertNotNull(userFeedEntries); assertTrue(userFeedEntries.isEmpty()); - userFeedEntries = this.activityService.getUserFeedEntries("unknown user", "a format", "some site", false, true); + userFeedEntries = this.activityService.getUserFeedEntries("unknown user", "a format", "some site", false, true, null, null); assertNotNull(userFeedEntries); assertTrue(userFeedEntries.isEmpty()); - userFeedEntries = this.activityService.getUserFeedEntries("unknown user", "a format", "some site", true, true); + userFeedEntries = this.activityService.getUserFeedEntries("unknown user", "a format", "some site", true, true, null, null); assertNotNull(userFeedEntries); assertTrue(userFeedEntries.isEmpty()); diff --git a/source/java/org/alfresco/repo/activities/SiteActivityTest.java b/source/java/org/alfresco/repo/activities/SiteActivityTest.java index 2bb74dd128..da336af4fa 100644 --- a/source/java/org/alfresco/repo/activities/SiteActivityTest.java +++ b/source/java/org/alfresco/repo/activities/SiteActivityTest.java @@ -302,7 +302,7 @@ public class SiteActivityTest extends TestCase { userId = AuthenticationUtil.getFullyAuthenticatedUser(); } - assertEquals(expectedCount, activityService.getUserFeedEntries(userId, "json", siteId, excludeThisUser, excludeOtherUsers).size()); + assertEquals(expectedCount, activityService.getUserFeedEntries(userId, "json", siteId, excludeThisUser, excludeOtherUsers, null, null).size()); } public void testUserFeedControls() throws Exception diff --git a/source/java/org/alfresco/repo/activities/feed/FeedNotifierImpl.java b/source/java/org/alfresco/repo/activities/feed/FeedNotifierImpl.java index 65cf74bdae..68a733c561 100644 --- a/source/java/org/alfresco/repo/activities/feed/FeedNotifierImpl.java +++ b/source/java/org/alfresco/repo/activities/feed/FeedNotifierImpl.java @@ -19,9 +19,7 @@ package org.alfresco.repo.activities.feed; import java.io.Serializable; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -397,7 +395,7 @@ public class FeedNotifierImpl implements FeedNotifier // own + others (note: template can be changed to filter out user's own activities if needed) - List feedEntries = activityService.getUserFeedEntries(feedUserId, FeedTaskProcessor.FEED_FORMAT_JSON, null, false, false, emailFeedDBID); + List feedEntries = activityService.getUserFeedEntries(feedUserId, FeedTaskProcessor.FEED_FORMAT_JSON, null, false, false, null, null, emailFeedDBID); if (feedEntries.size() > 0) { diff --git a/source/java/org/alfresco/repo/activities/feed/FeedTaskProcessor.java b/source/java/org/alfresco/repo/activities/feed/FeedTaskProcessor.java index 501d5c0e35..ba0feab2cd 100644 --- a/source/java/org/alfresco/repo/activities/feed/FeedTaskProcessor.java +++ b/source/java/org/alfresco/repo/activities/feed/FeedTaskProcessor.java @@ -264,14 +264,9 @@ public abstract class FeedTaskProcessor followers.put(activityPost.getUserId(), followerUsers); } recipients.addAll(followerUsers); - - if(recipients.size() == 0) { - if (logger.isDebugEnabled()) - { - logger.debug("No recipients for activity post " + activityPost.getId() + "."); - } - return; - } + + // Add the originator to recipients + recipients.add(activityPost.getUserId()); try { diff --git a/source/java/org/alfresco/repo/domain/subscriptions/ibatis/SubscriptionsDAOImpl.java b/source/java/org/alfresco/repo/domain/subscriptions/ibatis/SubscriptionsDAOImpl.java index b56d9a67c6..75779c98a7 100644 --- a/source/java/org/alfresco/repo/domain/subscriptions/ibatis/SubscriptionsDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/subscriptions/ibatis/SubscriptionsDAOImpl.java @@ -75,7 +75,8 @@ public class SubscriptionsDAOImpl extends AbstractSubscriptionsDAO map.put("userNodeId", userPair.getFirst()); map.put("false", Boolean.FALSE); - int maxItems = (pagingRequest.getMaxItems() < 0 ? Integer.MAX_VALUE - 1 : pagingRequest.getMaxItems()); + int maxItems = (pagingRequest.getMaxItems() < 0 || pagingRequest.getMaxItems() > Integer.MAX_VALUE - 1 ? Integer.MAX_VALUE - 1 + : pagingRequest.getMaxItems() + 1); @SuppressWarnings("unchecked") List nodeList = (List) template.selectList( @@ -219,7 +220,8 @@ public class SubscriptionsDAOImpl extends AbstractSubscriptionsDAO map.put("userNodeId", userPair.getFirst()); map.put("false", Boolean.FALSE); - int maxItems = (pagingRequest.getMaxItems() < 0 ? Integer.MAX_VALUE - 1 : pagingRequest.getMaxItems() + 1); + int maxItems = (pagingRequest.getMaxItems() < 0 || pagingRequest.getMaxItems() > Integer.MAX_VALUE - 1 ? Integer.MAX_VALUE - 1 + : pagingRequest.getMaxItems() + 1); @SuppressWarnings("unchecked") List userList = (List) template.selectList("alfresco.subscriptions.select_Following", map, @@ -256,7 +258,8 @@ public class SubscriptionsDAOImpl extends AbstractSubscriptionsDAO map.put("userNodeId", userPair.getFirst()); map.put("false", Boolean.FALSE); - int maxItems = (pagingRequest.getMaxItems() < 0 ? Integer.MAX_VALUE - 1 : pagingRequest.getMaxItems() + 1); + int maxItems = (pagingRequest.getMaxItems() < 0 || pagingRequest.getMaxItems() > Integer.MAX_VALUE - 1 ? Integer.MAX_VALUE - 1 + : pagingRequest.getMaxItems() + 1); @SuppressWarnings("unchecked") List userList = (List) template.selectList("alfresco.subscriptions.select_Followers", map, diff --git a/source/java/org/alfresco/service/cmr/activities/ActivityService.java b/source/java/org/alfresco/service/cmr/activities/ActivityService.java index d63ddfe8dd..dcbfb0d8bf 100644 --- a/source/java/org/alfresco/service/cmr/activities/ActivityService.java +++ b/source/java/org/alfresco/service/cmr/activities/ActivityService.java @@ -19,10 +19,10 @@ package org.alfresco.service.cmr.activities; import java.util.List; +import java.util.Set; import org.alfresco.repo.domain.activities.ActivityFeedEntity; import org.alfresco.service.NotAuditable; -import org.alfresco.service.PublicService; /** @@ -67,6 +67,30 @@ public interface ActivityService extends ActivityPostService */ @NotAuditable public List getUserFeedEntries(String userId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers); + + + /** + * Retrieve user feed with optional site filter and optional user filters + * + * Will return activities for users across all sites, or optionally for users for specified site. + * + * User filters are: + * - all user activities (excludeThisUser = false, excludeOtherUsers = false) + * - other user activities (excludeThisUser = true, excludeOtherUsers = false) + * - my user activities (excludeThisUser = false, excludeOtherUsers = true) + * note: if both excludes are true then no activities will be returned. + * + * @param userId - required + * @param format - required + * @param siteId - optional, if set then will filter by given siteId else return all sites + * @param excludeThisUser - if TRUE then will exclude activities for this user (hence returning other users only) + * @param excludeOthersUsers - if TRUE then will exclude activities for other users (hence returning this user only) + * @param userFilter - if not NULL then will only return activities of users in this set + * @param actvityFilter - if not NULL then will only return activities that are in this set + * @return list of JSON feed entries + */ + @NotAuditable + public List getUserFeedEntries(String userId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, Set userFilter, Set actvityFilter); /** * Retrieve user feed with optional site filter and optional user filters and optional min feed DB id @@ -84,12 +108,38 @@ public interface ActivityService extends ActivityPostService * @param siteId - optional, if set then will filter by given siteId else return all sites * @param excludeThisUser - if TRUE then will exclude activities for this user (hence returning other users only) * @param excludeOthersUsers - if TRUE then will exclude activities for other users (hence returning this user only) + * @param onlyFollowing - if TRUE then will only return activities of users this user follows * @param minFeedId - inclusive from min feed DB id, if -1 then return all available * @return list of JSON feed entries */ @NotAuditable public List getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, long minFeedId); + /** + * Retrieve user feed with optional site filter and optional user filters and optional min feed DB id + * + * Will return activities for users across all sites, or optionally for users for specified site. + * + * User filters are: + * - all user activities (excludeThisUser = false, excludeOtherUsers = false) + * - other user activities (excludeThisUser = true, excludeOtherUsers = false) + * - my user activities (excludeThisUser = false, excludeOtherUsers = true) + * note: if both excludes are true then no activities will be returned. + * + * @param userId - required + * @param format - required + * @param siteId - optional, if set then will filter by given siteId else return all sites + * @param excludeThisUser - if TRUE then will exclude activities for this user (hence returning other users only) + * @param excludeOthersUsers - if TRUE then will exclude activities for other users (hence returning this user only) + * @param onlyFollowing - if TRUE then will only return activities of users this user follows + * @param userFilter - if not NULL then will only return activities of users in this set + * @param actvityFilter - if not NULL then will only return activities that are in this set + * @param minFeedId - inclusive from min feed DB id, if -1 then return all available + * @return list of JSON feed entries + */ + @NotAuditable + public List getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, Set userFilter, Set actvityFilter, long minFeedId); + /** * Retrieve site feed *