/**
 * $RCSfile$
 * $Revision$
 * $Date$
 *
 * Copyright (C) 2004 Jive Software. All rights reserved.
 *
 * This software is published under the terms of the GNU Public License (GPL),
 * a copy of which is included in this distribution.
 */

package org.jivesoftware.messenger.roster;

import org.jivesoftware.util.Cacheable;
import org.jivesoftware.messenger.roster.RosterItem;

/**
 * <p>Represents a persistently stored roster item.</p>
 * <p/>
 * <p>The interface is primarily a marker interface to differentiate
 * the roster information passed around via XMPP XML roster packets,
 * and the persistently stored roster associated with a particular account.</p>
 *
 * @author Iain Shigeoka
 */
public interface CachedRosterItem extends RosterItem, Cacheable {
    /**
     * <p>Obtain the roster ID associated with this particular roster item.</p>
     * <p/>
     * <p>Databases can use the roster ID as the key in locating roster items.</p>
     *
     * @return The roster ID
     */
    public long getID();

    /**
     * <p>Update the cached item as a copy of the given item.</p>
     * <p/>
     * <p>A convenience for getting the item and setting each attribute.</p>
     *
     * @param item The item who's settings will be copied into the cached copy
     */
    void setAsCopyOf(org.xmpp.packet.Roster.Item item);
}
