package net.onrc.onos.core.util;

/**
 * Class for encapsulating events with event-related data entry.
 */
public class EventEntry<T> {
    /**
     * The event types.
     */
    public enum Type {
        ENTRY_ADD,            // Add or update an entry
        ENTRY_REMOVE            // Remove an entry
    }

    private Type eventType;    // The event type
    private T eventData;    // The relevant event data entry

    /**
     * Constructor for a given event type and event-related data entry.
     *
     * @param eventType the event type.
     * @param eventData the event data entry.
     */
    public EventEntry(EventEntry.Type eventType, T eventData) {
        this.eventType = eventType;
        this.eventData = eventData;
    }

    /**
     * Test whether the event type is ENTRY_ADD.
     *
     * @return true if the event type is ENTRY_ADD, otherwise false.
     */
    public boolean isAdd() {
        return (this.eventType == Type.ENTRY_ADD);
    }

    /**
     * Test whether the event type is ENTRY_REMOVE.
     *
     * @return true if the event type is ENTRY_REMOVE, otherwise false.
     */
    public boolean isRemove() {
        return (this.eventType == Type.ENTRY_REMOVE);
    }

    /**
     * Get the event type.
     *
     * @return the event type.
     */
    public EventEntry.Type eventType() {
        return this.eventType;
    }

    /**
     * Get the event-related data entry.
     *
     * @return the event-related data entry.
     */
    public T eventData() {
        return this.eventData;
    }
}
