Hi,
See below
Dan Svoboda wrote:
Hi,
I'm trying to use the notification system to trigger the sending of
email whenever a comment is added to a blog article. I'm patterning my
groovy class after the pircbot example on the xwiki snippets site.
My system is xwiki workspaces as a virtual xwiki under xem. The
platform version is 1.5.2.
Here's my groovy class (XWSNotify.BlogMailNotificationGroovyClass):
/* Groovy Class #* */
import com.xpn.xwiki.api.XWiki;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.notify.XWikiDocChangeNotificationInterface;
import com.xpn.xwiki.notify.DocObjectChangedRule;
import com.xpn.xwiki.notify.XWikiNotificationRule;
import com.xpn.xwiki.doc.XWikiDocument;
public class BlogMailNotificationGroovyClass implements \
XWikiDocChangeNotificationInterface
{
def xwiki;
def rule;
def name;
public void initClasses(XWikiContext context)
{
this.xwiki = context.getWiki();
// listen to notifications
this.rule = DocObjectChangedRule(this);
context.getWiki().getNotificationManager().addGeneralRule(rule);
}
public void notify(XWikiNotificationRule rule, XWikiDocument
newdoc, \
XWikiDocument olddoc, int event, XWikiContext
context)
{
def length = newdoc.getSpace().length();
def lastFour = length - 4;
if(newdoc.getSpace().substring(lastFour) == "Blog") {
def ms = xwiki.getPlugin("mailsender");
def nb = ms.sendHtmlMessage(context.getUser(), "myAddress(a)myHost.org
", \
context.get("ccrecipients"),
context.get("bccrecipients"), \
context.get("subject"),
newdoc.getRenderedContent(), \
newdoc.getContent(),
newdoc.getAttachments());
}
}
}
/* *# */
Here's a velocity script I'm using to initialize/test:
#set($sc =
$context.getContext().getEngineContext().getServletContext())
$sc.getAttribute("blgmailnotif")<br/>
#set($blgmlnotif =
$
xwiki
.parseGroovyFromPage("XWSNotify.BlogMailNotificationGroovyClass"))
#set($ok = $sc.setAttribute("blgmailnotif", $blgmlnotif))
#set($blgmailnotif = $sc.getAttribute("blgmailnotif"))
$sc.getAttribute("blgmailnotif")<br/>
#set($ok = $blgmlnotif.initClasses($context))
#set($ok = $blgmlnotif.notify($blgmlnotif.rule,$newdoc,$newdoc,
3,$context))
Here's the output from the velocity script:
BlogMailNotificationGroovyClass@68e4a47
BlogMailNotificationGroovyClass@3c401d45
So, the groovy class gets initialized to a new reference successfully
each time parseGroovyFromPage is called.
Here's what appears in the log after running the velocity script:
[ERROR] Left side ($request.title) of '!=' operation has null value.
Operation not possible. [line 53, column 43]
[WARNING] Cannot retrieve method notify from object of class
BlogMailNotificationGroovyClass due to security restrictions.
If I alter the velocity script to:
#set($sc =
$context.getContext().getEngineContext().getServletContext())
$sc.getAttribute("blgmailnotif")<br/>
Here's what appears in the log:
[ERROR] Left side ($request.title) of '!=' operation has null value.
Operation not possible. [line 53, column 43]
So, the [WARNING] is the only log entry pertaining to the groovy
class.
If I add a comment to a Blog article (with or without the
BlogMailNotificationGroovyClass initialized), the following appears in
the log:
[ERROR] Left side ($index) of addition operation has null value.
Operation not possible. [line 20, column 25]
[ERROR] Left side ($index) of addition operation has null value.
Operation not possible. [line 20, column 25]
[ERROR] Left side ($index) of addition operation has null value.
Operation not possible. [line 20, column 25]
[ERROR] Left side ($index) of addition operation has null value.
Operation not possible. [line 20, column 25]
[ERROR] Left side ($index) of addition operation has null value.
Operation not possible. [line 20, column 25]
[ERROR] Left side ($index) of addition operation has null value.
Operation not possible. [line 20, column 25]
[ERROR] Left side ($index) of addition operation has null value.
Operation not possible. [line 20, column 25]
[ERROR] Left side ($index) of addition operation has null value.
Operation not possible. [line 20, column 25]
[ERROR] Left side ($index) of addition operation has null value.
Operation not possible. [line 20, column 25]
The number of lines corresponds to the number of comments present in
the Blog article. There's nothing in the log pertaining to the groovy
class.
Indeed, this has nothing to do with your groovy notification. This is
generated by the velocity engine.
Is your skin customized ? Is the blog application modified ? (The log
says that somewhere a variable $index is trying to add something to
"null". Might be the pagination of blog articles ?)
Jerome.
I can't find a variable $index in any arithmetical expression in any
velocity script anywhere on the site.
The skin is customized only to the extent of some inconsequential
tweaks. Same with blog app.
There's no pagination of blog articles.
Would someone please review the basic mechanics of how groovy classes
work, particularly as it pertains to my notification class?
Also, I see by reading source that there's a newer way of monitoring
events through the "observation manager". Would someone please review
how to use this system?
Thanks,
Dan