It is probably due to the following :
"if(newdoc.getSpace().substring(lastFour) == "Blog") {"
in Java, if you have the following :
String st1 = "Blog";
String st2 = new String("Blog");
then st1 == st2 will always return false, as the objects are not the
same. What you want is to compare their values, using st1.equals(st2),
which will return true.
You can read here to find out more
(especially this
sentence : "Because the == operator determines if two objects are the
same object, it is not appropriate for comparisons that need to
determine if two objects have the same contents. For example, if you
need to know whether two String objects contain the same sequences of
characters, the == operator is inappropriate. You should use the
equals() method")
Anyway, their is even simpler for you. What you want to do is check if
the space name finishes by "Blog". For this the appropriate method is
String#endsWith
(
)
As in :
"if(newdoc.getSpace().endsWith("Blog")) {"
Hope this helps and fixes your issue,
Regards,
Jerome
Daniel Svoboda wrote:
Yes. The problem is that no mail gets sent, which is
the purpose of
the notification. I reread my initial post, and now I understand your
confusion. I didn't explicitly state that the class wasn't working.
I'm using XWiki Enterprise manager 1.3 with platform version 1.5.2.
Dan
Do you actually encounter a problem, besides the
error in the logs ?
I believe those logs are generated when you call getRenderedContent on
your blog article, so I maintain they have nothing to do with your
notification class.
Which version of XWiki Enterprise are you using ?
Jerome.
Dan Svoboda wrote:
> 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 <mailto:myAddress@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
_______________________________________________
users mailing list
users(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/users