Author: mflorea
Date: 2008-02-11 17:32:36 +0100 (Mon, 11 Feb 2008)
New Revision: 7506
Modified:
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/impl/CurrikiActivityStream.java
Log:
Distinguish between message events, documentation events, resource events and
members events
Modified:
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
2008-02-11 16:31:03 UTC (rev 7505)
+++
xwiki-products/curriki/trunk/plugins/currikiactivitystream/src/main/java/org/curriki/plugin/activitystream/impl/CurrikiActivityStream.java
2008-02-11 16:32:36 UTC (rev 7506)
@@ -1,51 +1,188 @@
package org.curriki.plugin.activitystream.impl;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.xwiki.plugin.activitystream.api.ActivityEventType;
import org.xwiki.plugin.activitystream.impl.ActivityStreamImpl;
-import org.xwiki.plugin.activitystream.api.ActivityEventType;
+
+import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.doc.XWikiDocument;
+import com.xpn.xwiki.notify.XWikiDocChangeNotificationInterface;
import com.xpn.xwiki.notify.XWikiNotificationRule;
-import com.xpn.xwiki.notify.XWikiDocChangeNotificationInterface;
-import com.xpn.xwiki.doc.XWikiDocument;
-import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.objects.BaseObject;
-import java.util.ArrayList;
+public class CurrikiActivityStream extends ActivityStreamImpl
+{
+ private static final String CURRIKI_SPACE_TYPE = "currikispace";
+ private static final String SPACE_CLASS_NAME = "XWiki.SpaceClass";
-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) {
+ /**
+ * [EMAIL PROTECTED]
+ */
+ public void notify(XWikiNotificationRule rule, XWikiDocument newdoc,
XWikiDocument olddoc,
+ int event, XWikiContext context)
+ {
+ String spaceName = newdoc.getSpace();
+ if (spaceName == null) {
+ return;
+ }
+ if (spaceName.startsWith("Messages_Group_")) {
+ handleMessageEvent(newdoc, olddoc, event, context);
+ } else if (spaceName.startsWith("Documentation_Group_")) {
+ // TODO and newdoc is truly a documentation
+ handleDocumentationEvent(newdoc, olddoc, event, context);
+ } else if (spaceName.startsWith("Coll_Group_")) {
+ // TODO and newdoc is truly a resource
+ handleResourceEvent(newdoc, olddoc, event, context);
+ } else if (spaceName.startsWith("UserProfiles_Group_")
+ && newdoc.getObject("XWiki.SpaceUserProfileClass") != null) {
+ handleMemberEvent(newdoc, olddoc, event, context);
+ }
+ // TODO handle events from MemberGroup, AdminGroup and
Role_<roleName>Group
+ }
+
+ protected void handleMessageEvent(XWikiDocument newdoc, XWikiDocument
olddoc, int event,
+ XWikiContext context)
+ {
+ String streamName = getStreamName(newdoc.getSpace(), context);
+ if (streamName == null) {
+ return;
+ }
+
+ BaseObject article = newdoc.getObject("XWiki.ArticleClass");
+ if (article == null) {
+ if (olddoc == null) {
+ return;
+ }
+ article = olddoc.getObject("XWiki.ArticleClass");
+ if (article == null) {
+ return;
+ }
+ event = XWikiDocChangeNotificationInterface.EVENT_DELETE;
+ } else if (olddoc == null
+ || (olddoc != null && olddoc.getObject("XWiki.ArticleClass") ==
null)) {
+ event = XWikiDocChangeNotificationInterface.EVENT_NEW;
+ }
+
+ List params = new ArrayList();
+ params.add(article.getStringValue("title"));
+
try {
- ArrayList params = new ArrayList();
+ switch (event) {
+ case XWikiDocChangeNotificationInterface.EVENT_NEW:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.CREATE,
+ "as_message_has_been_created", params, context);
+ break;
+ case XWikiDocChangeNotificationInterface.EVENT_CHANGE:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE,
+ "as_message_has_been_updated", params, context);
+ break;
+ case XWikiDocChangeNotificationInterface.EVENT_DELETE:
+ addDocumentActivityEvent(streamName, olddoc,
ActivityEventType.DELETE,
+ "as_message_has_been_deleted", params, context);
+ break;
+ }
+ } catch (Throwable e) {
+ // Error in activity stream notify should be ignored but logged in
the log file
+ e.printStackTrace();
+ }
+ }
+
+ protected void handleDocumentationEvent(XWikiDocument newdoc,
XWikiDocument olddoc,
+ int event, XWikiContext context)
+ {
+ List params = new ArrayList();
params.add(newdoc.getDisplayTitle(context));
String streamName = getStreamName(newdoc.getSpace(), context);
- if (streamName==null)
- return;
+ if (streamName == null) {
+ return;
+ }
+ try {
switch (event) {
+ case XWikiDocChangeNotificationInterface.EVENT_NEW:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.CREATE,
+ "as_documentation_has_been_created", params, context);
+ break;
case XWikiDocChangeNotificationInterface.EVENT_CHANGE:
- addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE,
+ "as_documentation_has_been_updated", params, context);
break;
+ case XWikiDocChangeNotificationInterface.EVENT_DELETE:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.DELETE,
+ "as_documentation_has_been_deleted", params, context);
+ break;
+ }
+ } catch (Throwable e) {
+ // Error in activity stream notify should be ignored but logged in
the log file
+ e.printStackTrace();
+ }
+ }
+
+ protected void handleResourceEvent(XWikiDocument newdoc, XWikiDocument
olddoc, int event,
+ XWikiContext context)
+ {
+ List params = new ArrayList();
+ params.add(newdoc.getDisplayTitle(context));
+
+ String streamName = getStreamName(newdoc.getSpace(), context);
+ if (streamName == null) {
+ return;
+ }
+
+ try {
+ switch (event) {
case XWikiDocChangeNotificationInterface.EVENT_NEW:
- addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.CREATE, "as_document_has_been_created", params, context);
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.CREATE,
+ "as_resource_has_been_created", params, context);
break;
+ case XWikiDocChangeNotificationInterface.EVENT_CHANGE:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE,
+ "as_resource_has_been_updated", params, context);
+ break;
case XWikiDocChangeNotificationInterface.EVENT_DELETE:
- addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.DELETE, "as_document_has_been_deleted", params, context);
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.DELETE,
+ "as_resource_has_been_deleted", params, context);
break;
- case XWikiDocChangeNotificationInterface.EVENT_UPDATE_CONTENT:
- addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
+ }
+ } catch (Throwable e) {
+ // Error in activity stream notify should be ignored but logged in
the log file
+ e.printStackTrace();
+ }
+ }
+
+ protected void handleMemberEvent(XWikiDocument newdoc, XWikiDocument
olddoc, int event,
+ XWikiContext context)
+ {
+ List params = new ArrayList();
+ params.add(newdoc.getDisplayTitle(context));
+
+ String streamName = getStreamName(newdoc.getSpace(), context);
+ if (streamName == null) {
+ return;
+ }
+
+ try {
+ switch (event) {
+ case XWikiDocChangeNotificationInterface.EVENT_NEW:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.CREATE,
+ "as_member_has_been_created", params, context);
break;
- case XWikiDocChangeNotificationInterface.EVENT_UPDATE_OBJECT:
- addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
+ case XWikiDocChangeNotificationInterface.EVENT_CHANGE:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE,
+ "as_member_has_been_updated", params, context);
break;
- case XWikiDocChangeNotificationInterface.EVENT_UPDATE_CLASS:
- addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.UPDATE, "as_document_has_been_updated", params, context);
+ case XWikiDocChangeNotificationInterface.EVENT_DELETE:
+ addDocumentActivityEvent(streamName, newdoc,
ActivityEventType.DELETE,
+ "as_member_has_been_deleted", params, context);
break;
}
} catch (Throwable e) {
@@ -54,7 +191,8 @@
}
}
- public String getStreamName(String space, XWikiContext context) {
+ public String getStreamName(String space, XWikiContext context)
+ {
XWikiDocument doc;
try {
doc = context.getWiki().getDocument(space, "WebPreferences",
context);
@@ -69,7 +207,7 @@
if (CURRIKI_SPACE_TYPE.equals(type))
return parentSpace;
- // could not find a curriki space
+ // could not find a Curriki space
return null;
} catch (Exception e) {
return null;
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications