Jive Messenger Plugin Developer Guide

Introduction

Plugins enhance the functionality of Jive Messenger. This document is a developer's guide for creating plugins.

Structure of a Plugin

Plugins live in the plugins directory of messengerHome. If a plugin is deployed as a JAR file, it will be automatically expanded into a directory. The files in a plugin directory are as follows:

Plugin Structure
myplugin/
 |- plugin.xml     <- Plugin definition file
 |- classes/       <- Resources your plugin needs (i.e., a properties file)
 |- lib/           <- Libraries (JAR files) your plugin needs
 |- web            <- Resources for Admin Console integration.
     |- web.xml   
     |- images/  

The web directory exists for plugins that need to add content to the Jive Messenger Admin Console. Further details are below.

The plugin.xml file specifies the main Plugin class. A sample file might look like the following:

Sample plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
    <!-- Main plugin class -->
    <class>org.example.ExamplePlugin</class>

    <!-- Admin console entries -->
    <adminconsole>
        <!-- More on this below -->
    </adminconsole>
</plugin>

Your plugin class must be implement the Plugin interface from the Jive Messenger API. The Plugin interface has methods for initializing and destroying the plugin, as well as methods for retrieving meta-data such as the plugin name, description, version, and author.

Sample plugin implementation
package org.example;

import org.jivesoftware.messenger.container.Plugin;
import org.jivesoftware.messenger.container.PluginManager;

import java.io.File;

/**
 * A sample plugin for Jive Messenger.
 */
public class ExamplePlugin implements Plugin {

    public String getName() {
        return "My Plugin";
    }

    public String getDescription() {
        return "A simple plugin";
    }

    public String getAuthor() {
        return "Johnny Java Coder";
    }

    public String getVersion() {
        return "1.0";
    }

    public void initialize(PluginManager manager, File pluginDirectory) {
        // Your code goes here
    }

    public void destroy() {
        // Your code goes here
    }
}

Modifying the Admin Console

Plugins can add tabs, sections, and pages to the admin console. There are a several steps to accomplishing this:

The <adminconsole /> section of plugin.xml defines additional tabs, sections and entries in the Admin Console framework. A sample plugin.xml file might look like the following:

Sample plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
    <!-- Main plugin class -->
    <class>org.example.ExamplePlugin</class>

    <!-- Admin console entries -->
    <adminconsole>
        <tab id="mytab" name="Example" url="my-plugin-admin.jsp" description="Click to manage...">
            <sidebar id="mysidebar" name="My Plugin">
               <item id="my-plugin" name="My Plugin Admin"
                   url="my-plugin-admin.jsp"
                   description="Click to administer settings for my plugin" />
            </sidebar>
        </tab>
    </adminconsole>
</plugin>

In this example, we've defined a new tab "Example", a sidebar section "My Plugin" and a page "My Plugin Admin". We've registered my-plugin-admin.jsp as the page. You can override existing tabs, sections, and items by using the existing id attribute values in your own <adminconsole> defintion.

Using the Jive Messenger Build Script

The Jive Messenger build script will help you build and develop plugins. It looks for plugin development directories in the following format:

Plugin Structure
myplugin/
 |- plugin.xml     <- Plugin definition file
 |- classes/       <- Resources your plugin needs (i.e., a properties file)
 |- lib/           <- Libraries your plugin needs
 |- src/
     |- java       <- Java source code for your plugin
     |   |- com
     |       |- mycompany
     |           |- *.java
     |- web
         |- *.jsp      <- JSPs your plugin uses for the admin console
         |- images/    <- Any images your JSP pages need (optional)

The build script will compile source files and JSPs and create a valid plugin structure.