Activities feed cleaner: improvement to maxFeedSize (to take into account current Share Activitities dashlet use-case)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@19950 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2010-04-22 12:27:36 +00:00
parent c18a123228
commit f5e487cc96
3 changed files with 50 additions and 4 deletions

View File

@@ -25,6 +25,7 @@
<!-- cleans out-of-date feed entries -->
<bean id="feedCleaner" class="org.alfresco.repo.activities.feed.cleanup.FeedCleaner">
<property name="feedDAO" ref="feedDAO"/>
<property name="siteService" ref="SiteService"/>
<property name="maxAgeMins">
<value>${activities.feed.max.age.mins}</value> <!-- max age in mins, eg. 44640 mins = 31 days -->
</property>

View File

@@ -24,6 +24,8 @@ import java.util.List;
import org.alfresco.repo.domain.activities.ActivityFeedDAO;
import org.alfresco.repo.domain.activities.ActivityFeedEntity;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.util.PropertyCheck;
import org.alfresco.util.VmShutdownListener;
import org.apache.commons.logging.Log;
@@ -45,11 +47,18 @@ public class FeedCleaner
private ActivityFeedDAO feedDAO;
private SiteService siteService;
public void setFeedDAO(ActivityFeedDAO feedDAO)
{
this.feedDAO = feedDAO;
}
public void setSiteService(SiteService siteService)
{
this.siteService = siteService;
}
public void setMaxAgeMins(int mins)
{
this.maxAgeMins = mins;
@@ -122,11 +131,13 @@ public class FeedCleaner
for (ActivityFeedEntity feed : feeds)
{
String siteId = feed.getSiteNetwork();
String feedUserId = feed.getFeedUserId();
final String feedUserId = feed.getFeedUserId();
String format = feed.getActivitySummaryFormat();
List<ActivityFeedEntity> feedToClean;
int feedUserSiteCount = 0;
if ((feedUserId == null) || (feedUserId.length() == 0))
{
feedToClean = feedDAO.selectSiteFeedEntries(siteId, format);
@@ -134,9 +145,22 @@ public class FeedCleaner
else
{
feedToClean = feedDAO.selectUserFeedEntries(feedUserId, format, null, false, false);
if (siteService != null)
{
// note: allow for fact that Share Activities dashlet currently uses userfeed within site context
feedUserSiteCount = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Integer>()
{
public Integer doWork() throws Exception
{
return siteService.listSites(feedUserId).size();
}
}, AuthenticationUtil.SYSTEM_USER_NAME);
}
}
if (feedToClean.size() > maxFeedSize)
if (((feedUserSiteCount == 0) && (feedToClean.size() > maxFeedSize)) ||
((feedToClean.size() > (maxFeedSize * feedUserSiteCount))))
{
Date oldestFeedEntry = feedToClean.get(maxFeedSize-1).getPostDate();

View File

@@ -680,7 +680,28 @@ public class SiteServiceImpl implements SiteService, SiteModel
/**
* @see org.alfresco.service.cmr.site.SiteService#listSites(java.lang.String)
*/
public List<SiteInfo> listSites(String userName)
public List<SiteInfo> listSites(final String userName)
{
// MT share - for activity service system callback
if (tenantService.isEnabled() && (AuthenticationUtil.SYSTEM_USER_NAME.equals(AuthenticationUtil.getRunAsUser())) && tenantService.isTenantUser(userName))
{
final String tenantDomain = tenantService.getUserDomain(userName);
return AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<List<SiteInfo>>()
{
public List<SiteInfo> doWork() throws Exception
{
return listSitesImpl(userName);
}
}, tenantService.getDomainUser(AuthenticationUtil.getSystemUserName(), tenantDomain));
}
else
{
return listSitesImpl(userName);
}
}
private List<SiteInfo> listSitesImpl(String userName)
{
List<SiteInfo> result = null;