Hi Sergiu,

First let me say this is cool! :)
Some minor comments below.

On Mar 4, 2008, at 10:55 PM, sdumitriu (SVN) wrote:

> Author: sdumitriu
> Date: 2008-03-04 22:55:30 +0100 (Tue, 04 Mar 2008)
> New Revision: 8200
>
> Modified:
>  xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ 
> XWiki.java
>  xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ 
> web/XWikiAction.java
> Log:
> XWIKI-1522: Rewrite the notification mechanism
> Notifications are sent
>
>
> Modified: xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/ 
> xwiki/XWiki.java
> ===================================================================
> --- xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ 
> XWiki.java    2008-03-04 18:33:04 UTC (rev 8199)
> +++ xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ 
> XWiki.java    2008-03-04 21:55:30 UTC (rev 8200)
> @@ -76,6 +76,11 @@
> import org.exoplatform.container.RootContainer;
> import org.hibernate.HibernateException;
> import org.securityfilter.filter.URLPatternMatcher;
> +import org.xwiki.observation.ObservationManager;
> +import org.xwiki.observation.event.ActionExecutionEvent;
> +import org.xwiki.observation.event.DocumentDeleteEvent;
> +import org.xwiki.observation.event.DocumentSaveEvent;
> +import org.xwiki.observation.event.DocumentUpdateEvent;
>
> import com.xpn.xwiki.api.Api;
> import com.xpn.xwiki.api.Document;
> @@ -1070,14 +1075,37 @@
>            XWikiDocument originalDocument = doc.getOriginalDocument();
>
>            // Notify listeners about the document change
> -            getNotificationManager().preverify(doc, originalDocument,
> -                XWikiDocChangeNotificationInterface.EVENT_CHANGE,  
> context);
> +            if (originalDocument == null ||  
> originalDocument.isNew()) {
> +                getNotificationManager().preverify(doc,  
> originalDocument,
> +                    XWikiDocChangeNotificationInterface.EVENT_NEW,  
> context);
> +            } else {
> +                getNotificationManager().preverify(doc,  
> originalDocument,
> +                     
> XWikiDocChangeNotificationInterface.EVENT_CHANGE, context);
> +            }
>
>            getStore().saveXWikiDoc(doc, context);
>
> -            // Notify listeners about the document change
> -            getNotificationManager().verify(doc, originalDocument,
> -                XWikiDocChangeNotificationInterface.EVENT_CHANGE,  
> context);
> +            try {
> +                ObservationManager om =
> +                    (ObservationManager)  
> Utils.getComponent(ObservationManager.ROLE, null,
> +                        context);
> +                // Notify listeners about the document change
> +                if (originalDocument == null ||  
> originalDocument.isNew()) {
> +                    getNotificationManager().verify(doc,  
> originalDocument,
> +                         
> XWikiDocChangeNotificationInterface.EVENT_NEW, context);
> +                    if (om != null) {
> +                        om.notify(new  
> DocumentSaveEvent(doc.getFullName()), doc, context);
> +                    }

It seems you're using both notification mechanisms, which is fine but  
I think this warrants some javadoc explanations.

>
> +                } else {
> +                    getNotificationManager().verify(doc,  
> originalDocument,
> +                         
> XWikiDocChangeNotificationInterface.EVENT_CHANGE, context);
> +                    if (om != null) {
> +                        om.notify(new  
> DocumentUpdateEvent(doc.getFullName()), doc, context);
> +                    }
> +                }
> +            } catch (Exception ex) {
> +                LOG.warn("Failed to send document notifications",  
> ex);

Our rule is: no stack trace printing for warnings. Only for errors. I  
would consider this an error. Also I would put more information in the  
text like for what document it failed.

> +            }
>        } finally {
>            if ((server != null) && (database != null)) {
>                context.setDatabase(database);
> @@ -3406,8 +3434,16 @@
>                true);
>        }
>        getStore().deleteXWikiDoc(doc, context);
> -        getNotificationManager().verify(new  
> XWikiDocument(doc.getSpace(), doc.getName()), doc,
> -            XWikiDocChangeNotificationInterface.EVENT_CHANGE,  
> context);
> +        try {
> +            getNotificationManager().verify(new  
> XWikiDocument(doc.getSpace(), doc.getName()), doc,
> +                XWikiDocChangeNotificationInterface.EVENT_DELETE,  
> context);
> +            ObservationManager om =
> +                (ObservationManager)  
> Utils.getComponent(ObservationManager.ROLE, null,
> +                    context);
> +            om.notify(new DocumentDeleteEvent(doc.getFullName()),  
> doc, context);
> +        } catch (Exception ex) {
> +            LOG.warn("Failed to send document notifications", ex);
> +        }

Same comments here.

>
>    }
>
>    public String getDatabase()
>
> Modified: xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/ 
> xwiki/web/XWikiAction.java
> ===================================================================
> --- xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ 
> web/XWikiAction.java  2008-03-04 18:33:04 UTC (rev 8199)
> +++ xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/ 
> web/XWikiAction.java  2008-03-04 21:55:30 UTC (rev 8200)
> @@ -35,6 +35,8 @@
> import org.apache.struts.action.ActionForward;
> import org.apache.struts.action.ActionMapping;
> import org.apache.velocity.VelocityContext;
> +import org.xwiki.observation.ObservationManager;
> +import org.xwiki.observation.event.ActionExecutionEvent;
>
> import com.xpn.xwiki.XWiki;
> import com.xpn.xwiki.XWikiContext;
> @@ -284,6 +286,14 @@
>                } catch (Throwable e) {
>                    e.printStackTrace();
>                }
> +                try {
> +                    ObservationManager om =
> +                        (ObservationManager)  
> Utils.getComponent(ObservationManager.ROLE, null,
> +                            context);
> +                    om.notify(new  
> ActionExecutionEvent(mapping.getName()), context.getDoc(), context);
> +                } catch (Throwable ex) {
> +                    LOG.warn("Cannot send notifications", ex);

Same here too.

>
> +                }
>
>                if (monitor != null) {
>                    monitor.endTimer("notify");

Thanks
-Vincent
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to