Author: ludovic
Date: 2008-02-10 23:38:10 +0100 (Sun, 10 Feb 2008)
New Revision: 7476
Added:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/resources/
xwiki-products/curriki/trunk/plugins/activitystream/src/main/resources/activitystream.hbm.xml
xwiki-products/curriki/trunk/plugins/currikiactivitystream/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/pom.xml
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/impl/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/impl/CurrikiActivityStream.java
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/plugin/
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/plugin/CurrikiActivityStreamPlugin.java
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/plugin/CurrikiActivityStreamPluginApi.java
Modified:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/api/ActivityEvent.java
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/api/ActivityStream.java
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/impl/ActivityEventImpl.java
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/impl/ActivityStreamImpl.java
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/plugin/ActivityStreamPlugin.java
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/plugin/ActivityStreamPluginApi.java
Log:
CURRIKI-1569 Activity Stream Core storage
Modified:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/api/ActivityEvent.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/api/ActivityEvent.java
2008-02-10 22:32:26 UTC (rev 7475)
+++
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/api/ActivityEvent.java
2008-02-10 22:38:10 UTC (rev 7476)
@@ -20,6 +20,7 @@
package org.xwiki.plugin.activitystream.api;
import java.util.Date;
+import java.util.List;
import com.xpn.xwiki.XWikiContext;
@@ -268,4 +269,10 @@
* @return
*/
String getDisplayUser(XWikiContext context);
+
+ /**
+ * Set all params at once
+ * @param params
+ */
+ void setParams(List params);
}
Modified:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/api/ActivityStream.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/api/ActivityStream.java
2008-02-10 22:32:26 UTC (rev 7475)
+++
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/api/ActivityStream.java
2008-02-10 22:38:10 UTC (rev 7476)
@@ -36,6 +36,13 @@
void initClasses(XWikiContext context) throws XWikiException;
/**
+ * Tranforms space name into stream name
+ * @param space
+ * @return
+ */
+ String getStreamName(String space);
+
+ /**
* Adding and activity event. The Id does not need to be filled as it will
be created. Date and
* Wiki are optional
*
@@ -46,12 +53,18 @@
void addActivityEvent(ActivityEvent event, XWikiContext context)
throws ActivityStreamException;
- void addActivityEvent(String type, String title, XWikiContext context)
+ void addActivityEvent(String streamName, String type, String title,
XWikiContext context)
throws ActivityStreamException;
- void addDocumentActivityEvent(XWikiDocument doc, String type, String title,
+ void addActivityEvent(String streamName, String type, String title, List
params, XWikiContext context)
+ throws ActivityStreamException;
+
+ void addDocumentActivityEvent(String streamName, XWikiDocument doc, String
type, String title,
XWikiContext context) throws ActivityStreamException;
+ void addDocumentActivityEvent(String streamName, XWikiDocument doc, String
type, String title, List params,
+ XWikiContext context) throws ActivityStreamException;
+
List searchEvents(String hql, boolean filter, int nb, int start,
XWikiContext context)
throws ActivityStreamException;
Modified:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/impl/ActivityEventImpl.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/impl/ActivityEventImpl.java
2008-02-10 22:32:26 UTC (rev 7475)
+++
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/impl/ActivityEventImpl.java
2008-02-10 22:38:10 UTC (rev 7476)
@@ -20,6 +20,7 @@
package org.xwiki.plugin.activitystream.impl;
import java.util.Date;
+import java.util.List;
import org.xwiki.plugin.activitystream.api.ActivityEvent;
@@ -85,6 +86,26 @@
return context.getWiki().getLocalUserName(user, context);
}
+ public void setParams(List params) {
+ if (params!=null) {
+ if (params.size()>0) {
+ setParam1(params.get(0).toString());
+ }
+ if (params.size()>1) {
+ setParam1(params.get(1).toString());
+ }
+ if (params.size()>2) {
+ setParam1(params.get(2).toString());
+ }
+ if (params.size()>3) {
+ setParam1(params.get(3).toString());
+ }
+ if (params.size()>4) {
+ setParam1(params.get(4).toString());
+ }
+ }
+ }
+
public String getEventId()
{
return eventId;
Modified:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/impl/ActivityStreamImpl.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/impl/ActivityStreamImpl.java
2008-02-10 22:32:26 UTC (rev 7475)
+++
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/impl/ActivityStreamImpl.java
2008-02-10 22:38:10 UTC (rev 7476)
@@ -20,6 +20,7 @@
package org.xwiki.plugin.activitystream.impl;
import java.util.List;
+import java.util.ArrayList;
import org.apache.commons.lang.RandomStringUtils;
import org.hibernate.Session;
@@ -43,28 +44,33 @@
{
// listen to notifications
context.getWiki().getNotificationManager().addGeneralRule(
- new DocChangeRule(this, true, true));
+ new DocChangeRule(this));
}
- protected void prepareEvent(ActivityEvent event, XWikiContext context)
+ protected void prepareEvent(ActivityEvent event, XWikiDocument doc,
XWikiContext context)
{
+ if (doc==null)
+ doc = context.getDoc();
+
if (event.getUser() == null) {
event.setUser(context.getUser());
}
if (event.getStream() == null) {
- event.setStream(context.getUser());
+ String space = (doc==null) ? "" : doc.getSpace();
+
+ event.setStream(getStreamName(space));
}
if (event.getWiki() == null) {
event.setWiki(context.getDatabase());
}
if (event.getSpace() == null) {
- event.setSpace(context.getDoc().getSpace());
+ event.setSpace((doc==null) ? "" : doc.getSpace());
}
if (event.getPage() == null) {
- event.setPage(context.getDoc().getFullName());
+ event.setPage((doc==null) ? "" : doc.getFullName());
}
if (event.getUrl() == null) {
- event.setUrl(context.getDoc().getURL("view", context));
+ event.setUrl((doc==null) ? "" : doc.getURL("view", context));
}
if (event.getApplication() == null) {
event.setApplication("xwiki");
@@ -80,44 +86,78 @@
}
}
+ public String getStreamName(String space) {
+ return space;
+ }
+
protected String generateEventId(ActivityEvent event, XWikiContext context)
{
- return event.getStream() + "-" + event.getApplication() + "-" +
event.getWiki() + ":"
- + event.getPage() + "-" + event.getType() + "-" +
event.getDate().getTime() + "-"
- + RandomStringUtils.randomAlphanumeric(4);
+ String key = event.getStream() + "-" + event.getApplication() + "-" +
event.getWiki() + ":"
+ + event.getPage() + "-" + event.getType();
+ long hash = key.hashCode();
+ if (hash<0)
+ hash = -hash;
+
+ String id = "" + hash + "-" + event.getDate().getTime() + "-"
+ + RandomStringUtils.randomAlphanumeric(8);
+ if (context.get("activitystream_requestid")==null) {
+ context.put("activitystream_requestid", id);
+ }
+ return id;
}
public void addActivityEvent(ActivityEvent event, XWikiContext context)
- throws ActivityStreamException
+ throws ActivityStreamException
{
- prepareEvent(event, context);
+ addActivityEvent(event, null, context);
+ }
+ public void addActivityEvent(ActivityEvent event, XWikiDocument doc,
XWikiContext context)
+ throws ActivityStreamException
+ {
+ prepareEvent(event, doc, context);
+
// store event using hibernate
XWikiHibernateStore hibstore = context.getWiki().getHibernateStore();
try {
hibstore.beginTransaction(context);
Session session = hibstore.getSession(context);
- session.saveOrUpdate(event);
+ session.save(event);
hibstore.endTransaction(context, true);
} catch (XWikiException e) {
hibstore.endTransaction(context, false);
}
}
- public void addActivityEvent(String type, String title, XWikiContext
context)
- throws ActivityStreamException
+ public void addActivityEvent(String streamName, String type, String title,
XWikiContext context)
+ throws ActivityStreamException
{
+ addActivityEvent(streamName, type, title, null, context);
+ }
+
+ public void addActivityEvent(String streamName, String type, String title,
List params, XWikiContext context)
+ throws ActivityStreamException
+ {
ActivityEvent event = newActivityEvent();
+ event.setStream(streamName);
event.setType(type);
event.setTitle(title);
event.setBody(title);
+ event.setParams(params);
addActivityEvent(event, context);
}
- public void addDocumentActivityEvent(XWikiDocument doc, String type,
String title,
- XWikiContext context) throws ActivityStreamException
+ public void addDocumentActivityEvent(String streamName, XWikiDocument doc,
String type, String title,
+ XWikiContext context) throws
ActivityStreamException
{
+ addDocumentActivityEvent(streamName, doc, type, title, null, context);
+ }
+
+ public void addDocumentActivityEvent(String streamName, XWikiDocument doc,
String type, String title, List params,
+ XWikiContext context) throws
ActivityStreamException
+ {
ActivityEvent event = newActivityEvent();
+ event.setStream(streamName);
event.setPage(doc.getFullName());
if (doc.getDatabase() != null) {
event.setWiki(doc.getDatabase());
@@ -127,15 +167,16 @@
event.setType(type);
event.setTitle(title);
event.setBody(title);
- addActivityEvent(event, context);
+ event.setParams(params);
+ addActivityEvent(event, doc, context);
}
public List searchEvents(String hql, boolean filter, int nb, int start,
XWikiContext context)
- throws ActivityStreamException
+ throws ActivityStreamException
{
String searchHql = "select act.* from ActivityEvent as act " + hql;
String filterQuery =
- ", ActivityEvent act2 where act.eventId=act2.eventId and
act.priority=max(act2.priority)";
+ ", ActivityEvent act2 where act.eventId=act2.eventId and
act.priority=max(act2.priority)";
if (filter) {
searchHql += filterQuery;
}
@@ -152,41 +193,41 @@
}
public List getEvents(boolean filter, int nb, int start, XWikiContext
context)
- throws ActivityStreamException
+ throws ActivityStreamException
{
return searchEvents("", filter, nb, start, context);
}
public List getEventsForSpace(String space, boolean filter, int nb, int
start,
- XWikiContext context) throws ActivityStreamException
+ XWikiContext context) throws
ActivityStreamException
{
return searchEvents("where act.space='" + space + "'", filter, nb,
start, context);
}
public List getEventsForUser(String user, boolean filter, int nb, int
start,
- XWikiContext context) throws ActivityStreamException
+ XWikiContext context) throws
ActivityStreamException
{
return searchEvents("where act.user='" + user + "'", filter, nb,
start, context);
}
public List getEvents(String stream, boolean filter, int nb, int start,
XWikiContext context)
- throws ActivityStreamException
+ throws ActivityStreamException
{
return searchEvents("where act.stream='" + stream + "'", filter, nb,
start, context);
}
public List getEventsForSpace(String stream, String space, boolean filter,
int nb, int start,
- XWikiContext context) throws ActivityStreamException
+ XWikiContext context) throws
ActivityStreamException
{
return searchEvents("where act.space='" + space + "' and act.stream='"
+ stream + "'",
- filter, nb, start, context);
+ filter, nb, start, context);
}
public List getEventsForUser(String stream, String user, boolean filter,
int nb, int start,
- XWikiContext context) throws ActivityStreamException
+ XWikiContext context) throws
ActivityStreamException
{
return searchEvents("where act.user='" + user + "' and act.stream='" +
stream + "'",
- filter, nb, start, context);
+ filter, nb, start, context);
}
protected ActivityEvent newActivityEvent()
@@ -195,31 +236,46 @@
}
public void notify(XWikiNotificationRule rule, XWikiDocument newdoc,
XWikiDocument olddoc,
- int event, XWikiContext context)
+ int event, XWikiContext context)
{
+ ArrayList params = new ArrayList();
+ params.set(0, newdoc.getDisplayTitle(context));
+
+ String streamName = getStreamName(newdoc.getSpace());
+
+ if (streamName==null)
+ return;
+
try {
switch (event) {
case XWikiDocChangeNotificationInterface.EVENT_CHANGE:
- addActivityEvent(ActivityEventType.UPDATE, null, context);
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
break;
case XWikiDocChangeNotificationInterface.EVENT_NEW:
- addActivityEvent(ActivityEventType.CREATE, null, context);
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.CREATE, "as_document_has_been_created", params, context);
break;
case XWikiDocChangeNotificationInterface.EVENT_DELETE:
- addActivityEvent(ActivityEventType.DELETE, null, context);
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.DELETE, "as_document_has_been_deleted", params, context);
break;
case XWikiDocChangeNotificationInterface.EVENT_UPDATE_CONTENT:
- addActivityEvent(ActivityEventType.UPDATE, null, context);
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
break;
case XWikiDocChangeNotificationInterface.EVENT_UPDATE_OBJECT:
- // TODO
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
break;
case XWikiDocChangeNotificationInterface.EVENT_UPDATE_CLASS:
- // TODO
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
break;
}
- } catch (ActivityStreamException e) {
- // ignore
+ } catch (Throwable e) {
+ // Error in activity stream notify should be ignored but logged in
the log file
+ e.printStackTrace();
}
}
+
+ /*
+ public FeedEntry getFeedEntry(ActivityEvent event, XWikiContext context) {
+ return null;
+ } */
+
}
Modified:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/plugin/ActivityStreamPlugin.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/plugin/ActivityStreamPlugin.java
2008-02-10 22:32:26 UTC (rev 7475)
+++
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/plugin/ActivityStreamPlugin.java
2008-02-10 22:38:10 UTC (rev 7476)
@@ -37,7 +37,7 @@
/**
* We should user inversion of control instead
*/
- private ActivityStream activityStream = new ActivityStreamImpl();
+ private ActivityStream activityStream;
/**
* @see
XWikiDefaultPlugin#XWikiDefaultPlugin(String,String,com.xpn.xwiki.XWikiContext)
@@ -45,6 +45,7 @@
public ActivityStreamPlugin(String name, String className, XWikiContext
context)
{
super(name, className, context);
+ setActivityStream(new ActivityStreamImpl());
}
/**
Modified:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/plugin/ActivityStreamPluginApi.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/plugin/ActivityStreamPluginApi.java
2008-02-10 22:32:26 UTC (rev 7475)
+++
xwiki-products/curriki/trunk/plugins/activitystream/src/main/java/org/xwiki/plugin/activitystream/plugin/ActivityStreamPluginApi.java
2008-02-10 22:38:10 UTC (rev 7476)
@@ -20,11 +20,17 @@
package org.xwiki.plugin.activitystream.plugin;
import org.xwiki.plugin.activitystream.api.ActivityStream;
+import org.xwiki.plugin.activitystream.api.ActivityEvent;
+import org.xwiki.plugin.activitystream.api.ActivityStreamException;
import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.api.Document;
+import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.plugin.PluginApi;
import com.xpn.xwiki.plugin.XWikiPluginInterface;
+import java.util.List;
+
/**
* API for [EMAIL PROTECTED] ActivityStreamPlugin}
*/
@@ -45,4 +51,91 @@
{
return ((ActivityStreamPlugin) getPlugin()).getActivityStream();
}
+
+ public void addActivityEvent(ActivityEvent event) throws
ActivityStreamException {
+ if (hasProgrammingRights()) {
+ getActivityStream().addActivityEvent(event, context);
+ }
+ }
+
+ public void addActivityEvent(String streamName, String type, String title)
throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ getActivityStream().addActivityEvent(streamName, type, title,
context);
+ }
+ }
+
+ public void addDocumentActivityEvent(String streamName, Document doc,
String type, String title) throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ getActivityStream().addDocumentActivityEvent(streamName,
doc.getDocument(), type, title, context);
+ }
+ }
+
+ public void addActivityEvent(String streamName, String type, String title,
List params) throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ getActivityStream().addActivityEvent(streamName, type, title,
params, context);
+ }
+ }
+
+ public void addDocumentActivityEvent(String streamName, Document doc,
String type, String title, List params) throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ getActivityStream().addDocumentActivityEvent(streamName,
doc.getDocument(), type, title, params, context);
+ }
+ }
+
+ public List searchEvents(String hql, boolean filter, int nb, int start)
throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ return getActivityStream().searchEvents(hql, filter, nb, start,
context);
+ } else {
+ return null;
+ }
+ }
+
+ public List getEvents(boolean filter, int nb, int start) throws
ActivityStreamException {
+ if (hasProgrammingRights()) {
+ return getActivityStream().getEvents(filter, nb, start, context);
+ } else {
+ return null;
+ }
+ }
+
+ public List getEventsForSpace(String space, boolean filter, int nb, int
start) throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ return getActivityStream().getEventsForSpace(space, filter, nb,
start, context);
+ } else {
+ return null;
+ }
+ }
+
+ public List getEventsForUser(String user, boolean filter, int nb, int
start) throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ return getActivityStream().getEventsForUser(user, filter, nb,
start, context);
+ } else {
+ return null;
+ }
+ }
+
+ public List getEvents(String streamName, boolean filter, int nb, int
start) throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ return getActivityStream().getEvents(streamName, filter, nb,
start, context);
+ } else {
+ return null;
+ }
+ }
+
+ public List getEventsForSpace(String streamName, String space, boolean
filter, int nb, int start) throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ return getActivityStream().getEventsForSpace(streamName, space,
filter, nb, start, context);
+ } else {
+ return null;
+ }
+ }
+
+ public List getEventsForUser(String streamName, String user, boolean
filter, int nb, int start) throws ActivityStreamException {
+ if (hasProgrammingRights()) {
+ return getActivityStream().getEventsForUser(streamName, user,
filter, nb, start, context);
+ } else {
+ return null;
+ }
+ }
+
}
Added:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/resources/activitystream.hbm.xml
===================================================================
---
xwiki-products/curriki/trunk/plugins/activitystream/src/main/resources/activitystream.hbm.xml
(rev 0)
+++
xwiki-products/curriki/trunk/plugins/activitystream/src/main/resources/activitystream.hbm.xml
2008-02-10 22:38:10 UTC (rev 7476)
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+ <class name="org.xwiki.plugin.activitystream.impl.ActivityEventImpl"
table="activitystream_events">
+ <id name="eventId" type="string" unsaved-value="any"><column
name="ase_eventid" length="255" not-null="true" /><generator class="assigned"
/></id>
+ <property name="requestId" type="string"><column name="ase_requestid"
length="2000" /></property>
+ <property name="stream" type="string"><column name="ase_stream"
length="255" /></property>
+ <property name="date" type="timestamp"><column name="ase_date"
/></property>
+ <property name="priority" type="integer"><column name="ase_priority"
/></property>
+ <property name="type" type="string"><column name="ase_type"
length="255" /></property>
+ <property name="application" type="string"><column
name="ase_application" length="255" /></property>
+ <property name="user" type="string"><column name="ase_user"
length="255" /></property>
+ <property name="wiki" type="string"><column name="ase_wiki"
length="255" /></property>
+ <property name="space" type="string"><column name="ase_space"
length="255" /></property>
+ <property name="page" type="string"><column name="ase_page"
length="255" /></property>
+ <property name="url" type="string"><column name="ase_url"
length="2000" /></property>
+ <property name="title" type="string"><column name="ase_title"
length="2000" /></property>
+ <property name="body" type="string"><column name="ase_body"
length="2000" /></property>
+ <property name="param1" type="string"><column name="ase_param1"
length="2000" /></property>
+ <property name="param2" type="string"><column name="ase_param2"
length="2000" /></property>
+ <property name="param3" type="string"><column name="ase_param3"
length="2000" /></property>
+ <property name="param4" type="string"><column name="ase_param4"
length="2000" /></property>
+ <property name="param5" type="string"><column name="ase_param5"
length="2000" /></property>
+ </class>
+</hibernate-mapping>
Property changes on:
xwiki-products/curriki/trunk/plugins/activitystream/src/main/resources/activitystream.hbm.xml
___________________________________________________________________
Name: svn:executable
+ *
Added: xwiki-products/curriki/trunk/plugins/currikiactivitystream/pom.xml
===================================================================
--- xwiki-products/curriki/trunk/plugins/currikiactivitystream/pom.xml
(rev 0)
+++ xwiki-products/curriki/trunk/plugins/currikiactivitystream/pom.xml
2008-02-10 22:38:10 UTC (rev 7476)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+
+<!--
+ *
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This 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 software 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ *
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.curriki</groupId>
+ <artifactId>curriki-plugins</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>curriki-plugin-activitystream</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>XWiki Products - Curriki - Plugins - Activity Stream</name>
+ <packaging>jar</packaging>
+ <description>XWiki Products - Curriki - Plugins - Activity
Stream</description>
+ <dependencies>
+ <dependency>
+ <groupId>com.xpn.xwiki.platform</groupId>
+ <artifactId>xwiki-core</artifactId>
+ <version>1.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>jmock</groupId>
+ <artifactId>jmock-cglib</artifactId>
+ <version>1.1.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.xpn.xwiki.platform.plugins</groupId>
+ <artifactId>xwiki-plugin-mailsender</artifactId>
+ <version>1.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>com.xpn.xwiki.platform.plugins</groupId>
+ <artifactId>xwiki-plugin-activitystream</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
Added:
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/impl/CurrikiActivityStream.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/impl/CurrikiActivityStream.java
(rev 0)
+++
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/impl/CurrikiActivityStream.java
2008-02-10 22:38:10 UTC (rev 7476)
@@ -0,0 +1,78 @@
+package org.curriki.plugin.activitystream.impl;
+
+import org.xwiki.plugin.activitystream.impl.ActivityStreamImpl;
+import org.xwiki.plugin.activitystream.api.ActivityEventType;
+import com.xpn.xwiki.notify.XWikiNotificationRule;
+import com.xpn.xwiki.notify.XWikiDocChangeNotificationInterface;
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.XWikiContext;
+
+import java.util.ArrayList;
+
+
+public class CurrikiActivityStream extends ActivityStreamImpl {
+ private String CURRIKI_SPACE_TYPE = "currikispace";
+ private String SPACE_CLASS_NAME = "XWiki.SpaceClass";
+
+ public CurrikiActivityStream()
+ {
+ super();
+ }
+
+ public void notify(XWikiNotificationRule rule, XWikiDocument newdoc,
XWikiDocument olddoc, int event, XWikiContext context) {
+ try {
+ ArrayList params = new ArrayList();
+ params.add(newdoc.getDisplayTitle(context));
+
+ String streamName = getStreamName(newdoc.getSpace(), context);
+ if (streamName==null)
+ return;
+
+ switch (event) {
+ case XWikiDocChangeNotificationInterface.EVENT_CHANGE:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
+ break;
+ case XWikiDocChangeNotificationInterface.EVENT_NEW:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.CREATE, "as_document_has_been_created", params, context);
+ break;
+ case XWikiDocChangeNotificationInterface.EVENT_DELETE:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.DELETE, "as_document_has_been_deleted", params, context);
+ break;
+ case XWikiDocChangeNotificationInterface.EVENT_UPDATE_CONTENT:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
+ break;
+ case XWikiDocChangeNotificationInterface.EVENT_UPDATE_OBJECT:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
+ break;
+ case XWikiDocChangeNotificationInterface.EVENT_UPDATE_CLASS:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
+ break;
+ }
+ } catch (Throwable e) {
+ // Error in activity stream notify should be ignored but logged in
the log file
+ e.printStackTrace();
+ }
+ }
+
+ public String getStreamName(String space, XWikiContext context) {
+ XWikiDocument doc;
+ try {
+ doc = context.getWiki().getDocument(space, "WebPreferences",
context);
+ String type = doc.getStringValue(SPACE_CLASS_NAME, "type");
+
+ if (CURRIKI_SPACE_TYPE.equals(type))
+ return space;
+
+ String parentSpace = space.substring(space.indexOf("_") + 1);
+ doc = context.getWiki().getDocument(parentSpace, "WebPreferences",
context);
+ type = doc.getStringValue(SPACE_CLASS_NAME, "type");
+ if (CURRIKI_SPACE_TYPE.equals(type))
+ return parentSpace;
+
+ // could not find a curriki space
+ return null;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
Added:
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/plugin/CurrikiActivityStreamPlugin.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/plugin/CurrikiActivityStreamPlugin.java
(rev 0)
+++
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/plugin/CurrikiActivityStreamPlugin.java
2008-02-10 22:38:10 UTC (rev 7476)
@@ -0,0 +1,34 @@
+package org.curriki.plugin.activitystream.plugin;
+
+import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.api.Api;
+import com.xpn.xwiki.plugin.XWikiPluginInterface;
+import org.xwiki.plugin.activitystream.plugin.ActivityStreamPlugin;
+import org.curriki.plugin.activitystream.impl.CurrikiActivityStream;
+
+
+public class CurrikiActivityStreamPlugin extends ActivityStreamPlugin {
+
+ public CurrikiActivityStreamPlugin(String name, String className,
XWikiContext context)
+ {
+ super(name, className, context);
+ setActivityStream(new CurrikiActivityStream());
+ }
+
+ public String getName() {
+ return "activitystream";
+ }
+
+
+
+ /**
+ * Gets the activity plugin Api
+ * @param plugin The plugin interface
+ * @param context Xwiki context
+ * @return
+ */
+ public Api getPluginApi(XWikiPluginInterface plugin, XWikiContext context)
{
+ return new
CurrikiActivityStreamPluginApi((CurrikiActivityStreamPlugin) plugin, context);
+ }
+
+}
Added:
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/plugin/CurrikiActivityStreamPluginApi.java
===================================================================
---
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/plugin/CurrikiActivityStreamPluginApi.java
(rev 0)
+++
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/plugin/CurrikiActivityStreamPluginApi.java
2008-02-10 22:38:10 UTC (rev 7476)
@@ -0,0 +1,19 @@
+package org.curriki.plugin.activitystream.plugin;
+
+
+import org.curriki.plugin.activitystream.impl.CurrikiActivityStream;
+import org.xwiki.plugin.activitystream.plugin.ActivityStreamPluginApi;
+
+import com.xpn.xwiki.XWikiContext;
+
+public class CurrikiActivityStreamPluginApi extends ActivityStreamPluginApi {
+
+ public CurrikiActivityStreamPluginApi(CurrikiActivityStreamPlugin plugin,
XWikiContext context)
+ {
+ super(plugin, context);
+ }
+
+ protected CurrikiActivityStream getCurrikiActivityStream() {
+ return (CurrikiActivityStream) ((CurrikiActivityStreamPlugin)
getPlugin()).getActivityStream();
+ }
+}
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications