package com.reucon.openfire.plugin.archive.xep;

import org.jivesoftware.openfire.IQHandlerInfo;
import org.jivesoftware.openfire.handler.IQHandler;
import org.jivesoftware.openfire.plugin.MonitoringPlugin;
import org.xmpp.packet.IQ;
import org.xmpp.packet.JID;
import org.xmpp.packet.Packet;
import org.xmpp.packet.PacketError;

import com.reucon.openfire.plugin.archive.IndexManager;
import com.reucon.openfire.plugin.archive.PersistenceManager;

/**
 * Abstract base class for XEP-specific IQ Handlers.
 */
public abstract class AbstractIQHandler extends IQHandler {

	private final IQHandlerInfo info;

	protected AbstractIQHandler(String moduleName, String elementName, String namespace) {
		super(moduleName);
		this.info = new IQHandlerInfo(elementName, namespace);
	}

	public final IQHandlerInfo getInfo() {
		return info;
	}

	protected PersistenceManager getPersistenceManager(JID jid) {
		return MonitoringPlugin.getInstance().getPersistenceManager(jid);
	}

	protected IndexManager getIndexManager() {
		return MonitoringPlugin.getInstance().getIndexManager();
	}

	protected IQ error(Packet packet, PacketError.Condition condition) {
		IQ reply;

		reply = new IQ(IQ.Type.error, packet.getID());
		reply.setFrom(packet.getTo());
		reply.setTo(packet.getFrom());
		reply.setError(condition);
		return reply;
	}
}
