/*******************************************************************************
 * Copyright (c) 2003, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.osgi.framework.eventmgr;

/**
 * The EventDispatcher interface contains the method that is called by the
 * Event Manager to complete the event delivery to the event listener.
 * <p>
 * Clients may implement this interface.
 * </p>
 * @since 3.1
 */
public interface EventDispatcher {
	/**
	 * This method is called once for each listener.
	 * This method must cast the event listener object to the appropriate listener
	 * class for the event type and call the appropriate listener method.
	 * 
	 * <p>The method should properly log/handle any exceptions thrown by the called
	 * listener. The EventManager will ignore any Throwable thrown by this method
	 * in order to continue delivery of the event to the next listener.
	 *
	 * @param eventListener This listener must be cast to the appropriate listener
	 * class for the event to be delivered and the appropriate listener method
	 * must then be called.
	 * @param listenerObject This is the optional companion object that was 
	 * specified when the listener was added to the EventListeners object.
	 * @param eventAction This value was passed to the ListenerQueue object via one of its
	 * dispatchEvent* method calls. It can provide information (such
	 * as which listener method to call) so that the EventDispatcher
	 * can complete the delivery of the event to the listener.
	 * @param eventObject This object was passed to the ListenerQueue object via one of its
	 * dispatchEvent* method calls. This object was created by the event source and
	 * is passed to this method. It should contain all the necessary information (such
	 * as what event object to pass) so that this method
	 * can complete the delivery of the event to the listener.
	 * This is typically the actual event object.
	 */
	public void dispatchEvent(Object eventListener, Object listenerObject, int eventAction, Object eventObject);
}
