/**
 * $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.container;

import java.io.Serializable;

/**
 * Special events sent by service lookup to registered listeners to notifyEvent of
 * service registration changes. The extra information covers the service
 * that caused the change, and the transition that occured. Sequence numbers
 * are guaranteed to be sequential and increasing. Missing sequence numbers
 * indicate an event may have been missed (missing numbers may also indicate
 * that a remote server has crashed and recovered).
 *
 * @author Iain Shigeoka
 */
public class ServiceEvent extends Event {

    private int transition;
    private ServiceID serviceID;
    private ServiceItem item;

    /**
     * Create a service event.
     *
     * @param source the event source (service lookup).
     * @param eventID the event type.
     * @param sequenceNumber the sequence number.
     * @param payload the payload for the event.
     * @param id the id of the server that caused the event.
     * @param serviceItem the state of the service that caused the event.
     * @param eventTransition the transition that triggered the event.
     */
    public ServiceEvent(Object source, long eventID, long sequenceNumber,
        Serializable payload, ServiceItem serviceItem, ServiceID id, int eventTransition)
    {
        super(source, eventID, sequenceNumber, payload);
        this.transition = eventTransition;
        this.serviceID = id;
        this.item = serviceItem;
    }

    /**
     * Returns the transition that caused the event.
     *
     * @return The transition that caused the event
     */
    public int getTransition() {
        return transition;
    }

    /**
     * Returns the service id of the service that caused the event.
     *
     * @return The service id of the service that caused the event.
     */
    public ServiceID getServiceID() {
        return serviceID;
    }

    /**
     * Returns the state of the item that caused the event.
     *
     * @return The state of the item that caused the event.
     */
    public ServiceItem getServiceItem() {
        return item;
    }
}
