package org.jivesoftware.wildfire.gateway.roster;

import java.io.Serializable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.xmpp.packet.JID;

/**
 * 
 * Manage contacts for a paticular JID.
 * 
 * @author Noah Campbell
 *
 */
public class ContactManager implements Serializable {
	
    
    
    /**
     * Construct a new <code>ContactManager</code>
     */
    ContactManager() { }
    
	/**
	 * The serialVersionUID
	 */
	private static final long serialVersionUID = 1L;
	
    /**
     * The fcs
     *
     * @see java.util.Set
     */
    private final Set<AbstractForeignContact> fcs = new HashSet<AbstractForeignContact>();
    
	/**
	 * Maintain a mapping of JIDs to their contact list.
	 */
	private final Map<NormalizedJID, Roster> contactLists = 
		new HashMap<NormalizedJID, Roster>();
	
	/**
	 * Return a roster for a JID.
     * 
	 * @param name The <code>JID</code> to lookup.
	 * @return roster The roster for the <code>JID</code>.
	 */
	public synchronized Roster getRoster(JID name) {
		Roster r = contactLists.get(NormalizedJID.wrap(name));
		if(r == null) {
			r = new Roster();
			contactLists.put(NormalizedJID.wrap(name), r);
		}
		
		return r;
	}
    
    /**
     * @return foreignContacts A {@code java.util.Set} of {@code ForeignContact}s.
     */
    public Set<AbstractForeignContact> getAllForeignContacts() {
        return this.fcs;
    }


	/**
     * Remove the <code>JID</code> from the contact list.
     * 
	 * @param jid
	 */
	void remove(NormalizedJID jid) {
		contactLists.remove(jid);	
	}
}
