package org.jivesoftware.openfire.plugin;
import java.io.File;
import java.util.TimerTask;
import org.jivesoftware.util.JiveGlobals;
import org.jivesoftware.util.TaskEngine;
import org.jivesoftware.openfire.MessageRouter;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.event.SessionEventDispatcher;
import org.jivesoftware.openfire.event.SessionEventListener;
import org.jivesoftware.openfire.session.Session;
import org.xmpp.packet.JID;
import org.xmpp.packet.Message;
/**
* MotD (Message of the Day) plugin.
*
* @author <a href="mailto:ryan@version2software.com">Ryan Graham</a>
*/
public class MotDPlugin implements Plugin {
private static final String SUBJECT = "plugin.motd.subject";
private static final String MESSAGE = "plugin.motd.message";
private static final String ENABLED = "plugin.motd.enabled";
private JID serverAddress;
private MessageRouter router;
private MotDSessionEventListener listener = new MotDSessionEventListener();
public void initializePlugin(PluginManager manager, File pluginDirectory) {
serverAddress = new JID(XMPPServer.getInstance().getServerInfo().getXMPPDomain());
router = XMPPServer.getInstance().getMessageRouter();
SessionEventDispatcher.addListener(listener);
}
public void destroyPlugin() {
SessionEventDispatcher.removeListener(listener);
listener = null;
serverAddress = null;
router = null;
}
public void setSubject(String message) {
JiveGlobals.setProperty(SUBJECT, message);
}
public String getSubject() {
return JiveGlobals.getProperty(SUBJECT, "Message of the Day");
}
public void setMessage(String message) {
JiveGlobals.setProperty(MESSAGE, message);
}
public String getMessage() {
return JiveGlobals.getProperty(MESSAGE, "Big Brother is watching.");
}
public void setEnabled(boolean enable) {
JiveGlobals.setProperty(ENABLED, Boolean.toString(enable));
}
public boolean isEnabled() {
return JiveGlobals.getBooleanProperty(ENABLED, false);
}
private class MotDSessionEventListener implements SessionEventListener {
public void sessionCreated(Session session) {
if (isEnabled()) {
final Message message = new Message();
message.setTo(session.getAddress());
message.setFrom(serverAddress);
message.setSubject(getSubject());
message.setBody(getMessage());
TimerTask messageTask = new TimerTask() {
@Override
public void run() {
router.route(message);
}
};
TaskEngine.getInstance().schedule(messageTask, 5000);
}
}
public void sessionDestroyed(Session session) {
//ignore
}
public void resourceBound(Session session) {
// Do nothing.
}
public void anonymousSessionCreated(Session session) {
//ignore
}
public void anonymousSessionDestroyed(Session session) {
//ignore
}
}
}