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