I found something else that was incorrect, but correcting it didn't  
help:

newdoc.getRenderedContent() needs to be  
newdoc.getRenderedContent(context)

Dan

> I tried changing newdoc.getAttachments() to  
> newdoc.newDocument(context).getAttachmentList().
>
> I've stripped down the class to remove dependance on getting values  
> out of the context; i.e I've provided string literals for sender,  
> cc, etc. I've also changed the rule to DocChangeRule(this), and  
> removed the test for the change coming from a space's Blog so that  
> any document save event would trigger email.
>
> Still no joy.
>
> The only clue in the log is when calling the notify method from a  
> velocity script:
>
> [WARNING] Cannot retrieve method notify from object of class  
> BlogMailNotificationGroovyClass due to security restrictions.
>
> Dan
>
> Here's the revised class:
>
> /* 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 = DocChangeRule(this);
>          
> context.getWiki().getNotificationManager().addGeneralRule(rule);
>     }
>
>     public void notify(XWikiNotificationRule rule, XWikiDocument  
> newdoc, \
>                        XWikiDocument olddoc, int event, XWikiContext  
> context)
>     {
>
>         def ms = xwiki.getPlugin("mailsender");
>         def nb = ms.sendHtmlMessage("XWiki.Admin", \
>                            "[EMAIL PROTECTED]", \
>                            "[EMAIL PROTECTED]", \
>                            "[EMAIL PROTECTED]", \
>                            "subject", \
>                            newdoc.getRenderedContent(), \
>                            newdoc.getContent(), \
>                             
> newdoc.newDocument(context).getAttachmentList());
>     }
> }
>
> /* *# */
>
>
>
>> Ok, I have another idea. Did you try sending the mail without  
>> attachments ?
>>
>> This because what you pass the plugin API are XWikiAttachments
>> (http://maven.xwiki.org/site/xwiki-core-parent/xwiki-core/apidocs/com/xpn/xwiki/doc/XWikiAttachment.html
>>  
>> ),
>> while it expects "com.xpn.xwiki.api.Attachment" (see the plugin API  
>> here
>> http://code.xwiki.org/xwiki/bin/view/Plugins/MailSenderPlugin).
>> If you want to have the proper wrapped attachments to pass the  
>> plugin,
>> you should use "newdoc.newDocument(context).getAttachmentList()"
>>
>> Hope this helps,
>> Jerome.
>>
>> Daniel Svoboda wrote:
>>> Thanks for the replies.
>>>
>>> I had already found that bug. If I take the conditional completely  
>>> out
>>> of the class, it still doesn't send an email.
>>>
>>> Dan
>>>
>>>> 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
>>>> http://www.unix.com.ua/orelly/java/langref/ch04_09.htm (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
>>>> (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#endsWith(java.lang.String
>>>>  
>>>> )
>>>> )
>>>> 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(),
>>>>>>>>> "[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>>>>>>>>> ", \
>>>>>>>>>                         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:
>>>>>>>>>
>>>>>>>>> [EMAIL PROTECTED]
>>>>>>>>> [EMAIL PROTECTED]
>>>>>>>>>
>>>>>>>>> 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@xwiki.org
http://lists.xwiki.org/mailman/listinfo/users

Reply via email to