Dashboard > blojsom 3.0 > ... > Event and Listener API Examples > Hello World Listener Plugin Example
  blojsom 3.0 Log In   View a printable version of the current page.  
  Hello World Listener Plugin Example
Added by David Czarnecki, last edited by David Czarnecki on Dec 03, 2006  (view change)
Labels: 
(None)

Hello World Listener Plugin

Listens for an event indicating an entry was deleted and increases a deleted entries counter.

Coding the Plugin

The following HelloWorldListenerPlugin.java file should be placed in a package called org.blojsom.plugin.example and compiled.

org.blojsom.plugin.example.HelloWorldListenerPlugin.java
package org.blojsom.plugin.example;

import org.blojsom.event.Listener;
import org.blojsom.event.Event;
import org.blojsom.event.EventBroadcaster;
import org.blojsom.plugin.Plugin;
import org.blojsom.plugin.PluginException;
import org.blojsom.plugin.admin.event.EntryDeletedEvent;
import org.blojsom.blog.Entry;
import org.blojsom.blog.Blog;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

public class HelloWorldListenerPlugin implements Plugin, Listener {

    private Log _logger = LogFactory.getLog(HelloWorldListenerPlugin.class);
    private EventBroadcaster _eventBroadcaster;
    private int _deletedEntries = 0;

    public HelloWorldListenerPlugin() {
    }

    public void setEventBroadcaster(EventBroadcaster eventBroadcaster) {
        _eventBroadcaster = eventBroadcaster;
    }
    
    public void init() throws PluginException {
        _eventBroadcaster.addListener(this);
    }

    public Entry[] process(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Blog blog,
                           Map context, Entry[] entries) throws PluginException {
        context.put("DELETED_ENTRIES", new Integer(_deletedEntries));
        
        return entries;
    }

    public void cleanup() throws PluginException {
    }

    public void destroy() throws PluginException {
    }

    /**
     * Handle an event broadcast from another component
     *
     * @param event {@link Event} to be handled
     */
    public void handleEvent(Event event) {
        if (event instanceof EntryDeletedEvent) {
            _deletedEntries += 1;

            EntryDeletedEvent entryDeletedEvent = (EntryDeletedEvent) event;

            if (_logger.isDebugEnabled()) {
                _logger.debug("It's such a shame that an entry, " + entryDeletedEvent.getEntry().getTitle() + " was deleted for " +
                        "its time was too short on this blog, " + entryDeletedEvent.getBlog().getBlogName());
            }
        }
    }

    /**
     * Process an event from another component
     *
     * @param event {@link Event} to be handled
     */
    public void processEvent(Event event) {
    }
}

The plugin makes available the current total number of entries that have been deleted to the context.

Configuring the Plugin

The compiled HelloWorldListenerPlugin.class should be placed in blojsom's /WEB-INF/classes directory keeping the org/blojsom/plugin/example directory structure.

Add the following to blojsom's plugin configuration file. /WEB-INF/classes/blojsom-plugins.xml.

<bean id="hello-world-listener" class="org.blojsom.plugin.example.HelloWorldListenerPlugin" init-method="init" destroy-method="destroy">
        <property name="eventBroadcaster">
            <ref bean="eventBroadcaster"/>
        </property>        
    </bean>

The eventBroadcaster bean is one that is initialized in /WEB-INF/classes/blojsom.xml. It has methods to add and remove listeners as well as to publish events to be handled or processed by other components. You can also read more about the event and listener API.

After starting your server, you can login to blojsom's web administration console and add this plugin to run in one of your plugin chains. This is configured under Plugins | Mappings. As this plugin doesn't depend on any other plugins, you can add it anywhere in the plugin chain.

Using the Plugin

As entries are deleted in your blog, the total number of entries deleted counter will increase. The total number of entries deleted is not persisted between restarts of your server.

In your template, for example using Velocity, you can now print out the number of entries delete.

Total # of entries deleted so far: $DELETED_ENTRIES

Congratulations! You have just written your first plugin for blojsom that listens for events.

Site running on a free Atlassian Confluence Open Source Project License granted to blojsom. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.4 Build:#809 Jun 12, 2007) - Bug/feature request - Contact Administrators