/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.event;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import org.dspace.core.Context;
/**
* Interface for event dispatchers. The primary role of a dispatcher is to
* deliver a set of events to a configured list of consumers. It may also
* transform, consolidate, and otherwise optimize the event stream prior to
* delivering events to its consumers.
*
* @version $Revision$
*/
public abstract class Dispatcher
{
protected String name;
/** unique identifier of this dispatcher - cached hash of its text Name */
protected int identifier;
/**
* Map of consumers by their configured name.
*/
protected Map<String, ConsumerProfile> consumers = new LinkedHashMap<String, ConsumerProfile>();
protected Dispatcher(String name)
{
super();
this.name = name;
this.identifier = name.hashCode();
}
public Collection getConsumers()
{
return consumers.values();
}
/**
* @return unique integer that identifies this Dispatcher configuration.
*/
public int getIdentifier()
{
return identifier;
}
/**
* Add a consumer profile to the end of the list.
*
* @param cp
* the event consumer profile to add
*/
public abstract void addConsumerProfile(ConsumerProfile cp)
throws IllegalArgumentException;
/**
* Dispatch all events added to this Context according to configured
* consumers.
*
* @param ctx
* the execution context object
*/
public abstract void dispatch(Context ctx);
}