package org.jivesoftware.openfire.plugin.gojara.messagefilter.processors;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.jivesoftware.openfire.PacketRouter;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.plugin.gojara.utils.XpathHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.Packet;
/**
* This packet and sub packet implements the command pattern. Every processor
* that extends this class have to implement the process function. The
* {@link MainInterceptor} will register different implementations of
* this processor and redirect packages according to their functionality
*
* @author Holger Bergunde
* @author axel.frederik.brand
*
*/
abstract public class AbstractRemoteRosterProcessor {
protected static final Logger Log = LoggerFactory.getLogger(AbstractRemoteRosterProcessor.class);
XMPPServer _server;
PacketRouter _router;
public AbstractRemoteRosterProcessor() {
_server = XMPPServer.getInstance();
_router = _server.getPacketRouter();
}
/**
* Handles the passed packet. Might throw {@link PacketRejectedException} if
* the package should not be processed by openfire.
* See actual classes for info about their implementation.
* @param packet Packet itself
* @param subdomain String with subdomain contained in either from or to, may be ""
* @param to String with recipient of packet, may be ""
* @param from String with sender of packet, may be ""
* @throws PacketRejectedException
*/
abstract public void process(Packet packet,String subdomain, String to, String from) throws PacketRejectedException;
/**
* Use this method if you want to send your own packets through openfire
* @param packet packet to send
*/
protected void dispatchPacket(Packet packet) {
Log.debug("Sending package to PacketRouter: \n" + packet.toString() + "\n");
_router.route(packet);
}
/**
* Redirects this method. Have a closer look to {@link XpathHelper}
* @param doc
* @param xpath
* @return
*/
protected List<Node> findNodesInDocument(Document doc, String xpath) {
return XpathHelper.findNodesInDocument(doc, xpath);
}
/**
* Redirects this method. Have a closer look to {@link XpathHelper}
* @param doc
* @param xpath
* @return
*/
protected String getUsernameFromJid(String jid) {
return XpathHelper.getUsernameFromJid(jid);
}
}