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
This commit is contained in:
Florian Mü
2011-06-25 17:58:43 +00:00
parent 28161f0e2b
commit 1904f66734
7 changed files with 89 additions and 21 deletions

View File

@@ -21,6 +21,7 @@ package org.alfresco.repo.activities;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.repo.activities.feed.cleanup.FeedCleaner; import org.alfresco.repo.activities.feed.cleanup.FeedCleaner;
@@ -167,19 +168,27 @@ public class ActivityServiceImpl implements ActivityService, InitializingBean
*/ */
public List<String> getUserFeedEntries(String feedUserId, String format, String siteId) public List<String> 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) /* (non-Javadoc)
* @see org.alfresco.service.cmr.activities.ActivityService#getUserFeedEntries(java.lang.String, java.lang.String, java.lang.String, boolean, boolean) * @see org.alfresco.service.cmr.activities.ActivityService#getUserFeedEntries(java.lang.String, java.lang.String, java.lang.String, boolean, boolean)
*/ */
public List<String> getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers) public List<String> 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<String>, java.util.Set<String>)
*/
public List<String> getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, Set<String> userFilter, Set<String> actvityFilter)
{ {
List<String> activityFeedEntries = new ArrayList<String>(); List<String> activityFeedEntries = new ArrayList<String>();
try try
{ {
List<ActivityFeedEntity> activityFeeds = getUserFeedEntries(feedUserId, format, siteId, excludeThisUser, excludeOtherUsers, -1); List<ActivityFeedEntity> activityFeeds = getUserFeedEntries(feedUserId, format, siteId, excludeThisUser, excludeOtherUsers, userFilter, actvityFilter, -1);
if (activityFeeds != null) if (activityFeeds != null)
{ {
@@ -200,6 +209,11 @@ public class ActivityServiceImpl implements ActivityService, InitializingBean
} }
public List<ActivityFeedEntity> getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, long minFeedId) public List<ActivityFeedEntity> 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<ActivityFeedEntity> getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, Set<String> userFilter, Set<String> actvityFilter, long minFeedId)
{ {
// NOTE: siteId is optional // NOTE: siteId is optional
ParameterCheck.mandatoryString("feedUserId", feedUserId); ParameterCheck.mandatoryString("feedUserId", feedUserId);
@@ -232,6 +246,14 @@ public class ActivityServiceImpl implements ActivityService, InitializingBean
for (ActivityFeedEntity activityFeed : activityFeeds) 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())); activityFeed.setSiteNetwork(tenantService.getBaseName(activityFeed.getSiteNetwork()));
result.add(activityFeed); result.add(activityFeed);
} }

View File

@@ -130,17 +130,17 @@ public class ActivityServiceImplTest extends BaseSpringTest
assertNotNull(userFeedEntries); assertNotNull(userFeedEntries);
assertTrue(userFeedEntries.isEmpty()); 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); assertNotNull(userFeedEntries);
assertTrue(userFeedEntries.isEmpty()); 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); assertNotNull(userFeedEntries);
assertTrue(userFeedEntries.isEmpty()); 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); assertNotNull(userFeedEntries);
assertTrue(userFeedEntries.isEmpty()); assertTrue(userFeedEntries.isEmpty());

View File

@@ -302,7 +302,7 @@ public class SiteActivityTest extends TestCase
{ {
userId = AuthenticationUtil.getFullyAuthenticatedUser(); 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 public void testUserFeedControls() throws Exception

View File

@@ -19,9 +19,7 @@
package org.alfresco.repo.activities.feed; package org.alfresco.repo.activities.feed;
import java.io.Serializable; import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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) // own + others (note: template can be changed to filter out user's own activities if needed)
List<ActivityFeedEntity> feedEntries = activityService.getUserFeedEntries(feedUserId, FeedTaskProcessor.FEED_FORMAT_JSON, null, false, false, emailFeedDBID); List<ActivityFeedEntity> feedEntries = activityService.getUserFeedEntries(feedUserId, FeedTaskProcessor.FEED_FORMAT_JSON, null, false, false, null, null, emailFeedDBID);
if (feedEntries.size() > 0) if (feedEntries.size() > 0)
{ {

View File

@@ -265,13 +265,8 @@ public abstract class FeedTaskProcessor
} }
recipients.addAll(followerUsers); recipients.addAll(followerUsers);
if(recipients.size() == 0) { // Add the originator to recipients
if (logger.isDebugEnabled()) recipients.add(activityPost.getUserId());
{
logger.debug("No recipients for activity post " + activityPost.getId() + ".");
}
return;
}
try try
{ {

View File

@@ -75,7 +75,8 @@ public class SubscriptionsDAOImpl extends AbstractSubscriptionsDAO
map.put("userNodeId", userPair.getFirst()); map.put("userNodeId", userPair.getFirst());
map.put("false", Boolean.FALSE); 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") @SuppressWarnings("unchecked")
List<SubscriptionNodeEntity> nodeList = (List<SubscriptionNodeEntity>) template.selectList( List<SubscriptionNodeEntity> nodeList = (List<SubscriptionNodeEntity>) template.selectList(
@@ -219,7 +220,8 @@ public class SubscriptionsDAOImpl extends AbstractSubscriptionsDAO
map.put("userNodeId", userPair.getFirst()); map.put("userNodeId", userPair.getFirst());
map.put("false", Boolean.FALSE); 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") @SuppressWarnings("unchecked")
List<String> userList = (List<String>) template.selectList("alfresco.subscriptions.select_Following", map, List<String> userList = (List<String>) template.selectList("alfresco.subscriptions.select_Following", map,
@@ -256,7 +258,8 @@ public class SubscriptionsDAOImpl extends AbstractSubscriptionsDAO
map.put("userNodeId", userPair.getFirst()); map.put("userNodeId", userPair.getFirst());
map.put("false", Boolean.FALSE); 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") @SuppressWarnings("unchecked")
List<String> userList = (List<String>) template.selectList("alfresco.subscriptions.select_Followers", map, List<String> userList = (List<String>) template.selectList("alfresco.subscriptions.select_Followers", map,

View File

@@ -19,10 +19,10 @@
package org.alfresco.service.cmr.activities; package org.alfresco.service.cmr.activities;
import java.util.List; import java.util.List;
import java.util.Set;
import org.alfresco.repo.domain.activities.ActivityFeedEntity; import org.alfresco.repo.domain.activities.ActivityFeedEntity;
import org.alfresco.service.NotAuditable; import org.alfresco.service.NotAuditable;
import org.alfresco.service.PublicService;
/** /**
@@ -68,6 +68,30 @@ public interface ActivityService extends ActivityPostService
@NotAuditable @NotAuditable
public List<String> getUserFeedEntries(String userId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers); public List<String> 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<String> getUserFeedEntries(String userId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, Set<String> userFilter, Set<String> actvityFilter);
/** /**
* Retrieve user feed with optional site filter and optional user filters and optional min feed DB id * 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 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 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 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 * @param minFeedId - inclusive from min feed DB id, if -1 then return all available
* @return list of JSON feed entries * @return list of JSON feed entries
*/ */
@NotAuditable @NotAuditable
public List<ActivityFeedEntity> getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, long minFeedId); public List<ActivityFeedEntity> 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<ActivityFeedEntity> getUserFeedEntries(String feedUserId, String format, String siteId, boolean excludeThisUser, boolean excludeOtherUsers, Set<String> userFilter, Set<String> actvityFilter, long minFeedId);
/** /**
* Retrieve site feed * Retrieve site feed
* *