### Eclipse Workspace Patch 1.0 #P activitystream2.6 Index: src/main/java/com/xpn/xwiki/plugin/activitystream/plugin/ActivityStreamPluginApi.java =================================================================== --- src/main/java/com/xpn/xwiki/plugin/activitystream/plugin/ActivityStreamPluginApi.java (revision 32899) +++ src/main/java/com/xpn/xwiki/plugin/activitystream/plugin/ActivityStreamPluginApi.java (working copy) @@ -722,4 +722,18 @@ { return wrapEvents(getActivityStream().getRelatedEvents(event.getEvent(), this.context)); } + + /** + * Get unique page events sorted by date + * + * @param hql HQL where query statement + * @param nb number of events to retrieve + * @param start query offset + * @return matching pages with events + * @throws ActivityStreamException if the search query fails + */ + public List searchUniquePageEvents(String hql, int nb, int start) throws ActivityStreamException + { + return getActivityStream().searchUniquePageEvents(hql, nb, start, this.context); + } } Index: src/main/java/com/xpn/xwiki/plugin/activitystream/impl/ActivityStreamImpl.java =================================================================== --- src/main/java/com/xpn/xwiki/plugin/activitystream/impl/ActivityStreamImpl.java (revision 32899) +++ src/main/java/com/xpn/xwiki/plugin/activitystream/impl/ActivityStreamImpl.java (working copy) @@ -976,4 +976,38 @@ return this.searchEvents("", "act.requestId= ? ", false, false, 0, 0, params, context); } + + /** + * {@inheritDoc} + * + * @see ActivityStream#searchUniquePageEvents(ActivityEvent, XWikiContext) + */ + public List searchUniquePageEvents(String hql, int nb, int start, XWikiContext context) + throws ActivityStreamException + { + StringBuffer searchHql = new StringBuffer(); + List results; + + searchHql.append("select act.page, max(act.date) from ActivityEventImpl as act "); + if (hql!=null && hql.length()>0){ + searchHql.append(" where "); + searchHql.append(hql); + } + + searchHql.append("group by act.page order by act.date desc"); + + List parametersValues = null; + + String oriDatabase = context.getDatabase(); + try { + context.setDatabase(context.getMainXWiki()); + results = context.getWiki().getStore().search(searchHql.toString(), nb, start, parametersValues, context); + } catch (XWikiException e) { + throw new ActivityStreamException(e); + } finally { + context.setDatabase(oriDatabase); + } + + return results; + } } Index: src/main/java/com/xpn/xwiki/plugin/activitystream/api/ActivityStream.java =================================================================== --- src/main/java/com/xpn/xwiki/plugin/activitystream/api/ActivityStream.java (revision 32899) +++ src/main/java/com/xpn/xwiki/plugin/activitystream/api/ActivityStream.java (working copy) @@ -470,4 +470,17 @@ * @throws ActivityStreamException if the retrieval fails */ List getRelatedEvents(ActivityEvent event, XWikiContext context) throws ActivityStreamException; + + /** + * Get unique page events sorted by date + * + * @param hql HQL where query statement + * @param nb number of events to retrieve + * @param start query offset + * @param context the XWiki context + * @return matching events + * @throws ActivityStreamException if the search query fails + */ + List searchUniquePageEvents(String hql, int nb, int start, XWikiContext context) + throws ActivityStreamException; }