/**
 * 
 */
package icy.common;

/**
 * Collapsible interface for collapsible event used by UpdateEventHandler.<br/>
 * As we use HashMap to store these events, so we rely on Object.equals(..) and
 * Object.hashcode() implementation for these events.
 * 
 * @author Stephane
 */
public interface CollapsibleEvent
{
    /**
     * Collapse current object/event with specified one.
     * 
     * @return <code>false</code> if collapse operation failed (object are not 'equals')
     */
    public boolean collapse(CollapsibleEvent event);

    /**
     * Returns <code>true</code> if the current event is equivalent to the specified one.<br/>
     * We want event to override {@link Object#equals(Object)} method as we use an HashMap to store
     * these event
     * in the {@link UpdateEventHandler} class.
     */
    public boolean equals(Object event);

    /**
     * Returns hash code for current event. It should respect the default {@link Object#hashCode()}
     * contract.
     */
    public int hashCode();
}