package org.jivesoftware.openfire.plugin.gojara.utils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;
import org.dom4j.XPath;

public class XpathHelper {

	/**
	 * Search the specified document for Nodes corresponding to the xpath Keep
	 * in mind that you have to use xmpp namespace for searching
	 * Predefined namespaces: 
	 * 	jabber:iq:roster		//roster:*
	 * 	jabber:iq:register		//register:*
	 * 	http://jabber.org/protocol/disco#info			//disco/*
	 * e.g
	 * '//roster:features'
	 * 
	 * @param doc
	 *            document
	 * @param xpath
	 *            with roster namespace for searching in query nodes
	 * @return list of nodes found by xpath expression
	 */
	@SuppressWarnings("unchecked")
	public static List<Node> findNodesInDocument(Document doc, String xpath)
	{
		Map<String, String> namespaceUris = new HashMap<String, String>();
		namespaceUris.put("roster", "jabber:iq:roster");
		namespaceUris.put("discoitems", "http://jabber.org/protocol/disco#items");
		namespaceUris.put("register", "jabber:iq:register");
		namespaceUris.put("disco", "http://jabber.org/protocol/disco#info");
		XPath xPath = DocumentHelper.createXPath(xpath);
		xPath.setNamespaceURIs(namespaceUris);
		return xPath.selectNodes(doc);
	}


	/**
	 * Returns the username from the given jid. user.name@jabber.server.org
	 * returns "user.name"
	 * 
	 * @param jid
	 * @return the extracted username as string
	 */
	public static String getUsernameFromJid(String jid)
	{
		int firstAtPos = jid.indexOf("@");
		return firstAtPos != -1 ? jid.substring(0, firstAtPos) : jid;
	}

}
