package org.ovirt.engine.core.compat;
public class Event {
private java.util.List<IEventListener> listeners;
private java.util.Map<IEventListener, Object> contexts;
private java.lang.Class privateOwnerType;
public java.lang.Class getOwnerType()
{
return privateOwnerType;
}
private void setOwnerType(java.lang.Class value)
{
privateOwnerType = value;
}
private String privateName;
public String getName()
{
return privateName;
}
private void setName(String value)
{
privateName = value;
}
/**
Gets an object representing current event context.
Specified when add listener.
*/
private Object privateContext;
public Object getContext()
{
return privateContext;
}
private void setContext(Object value)
{
privateContext = value;
}
public Event(String name, java.lang.Class ownerType)
{
setName(name);
setOwnerType(ownerType);
listeners = new java.util.ArrayList<IEventListener>();
contexts = new java.util.HashMap<IEventListener, Object>();
}
public Event()
{
}
public Event(EventDefinition definition)
{
this(definition.getName(), definition.getOwnerType());
}
/**
Add listener with no context specified.
*/
public void addListener(IEventListener listener)
{
listeners.add(listener);
}
public void addListener(IEventListener listener, Object context)
{
listeners.add(listener);
contexts.put(listener, context);
}
public void removeListener(IEventListener listener)
{
listeners.remove(listener);
if (contexts.containsKey(listener))
{
contexts.remove(listener);
}
}
public void raise(Object sender, EventArgs e)
{
//Iterate on a new instance of listeners list,
//to enable listener unsubscribe from event
//as a result on event fairing.
java.util.ArrayList<IEventListener> list = new java.util.ArrayList<IEventListener>();
for (IEventListener listener : listeners)
{
list.add(listener);
}
for (IEventListener listener : list)
{
//Update current context.
setContext(contexts.containsKey(listener) ? contexts.get(listener) : null);
listener.eventRaised(this, sender, e);
}
}
public boolean equals(Event other) {
if(other == null){
return false;
}
return StringHelper.stringsEqual(getName(), other.getName())
&& getOwnerType() == other.getOwnerType();
}
public boolean equals(EventDefinition other) {
if(other == null){
return false;
}
return StringHelper.stringsEqual(getName(), other.getName())
&& getOwnerType() == other.getOwnerType();
}
public java.util.List<IEventListener> getListeners() {
return listeners;
}
public void setListeners(java.util.List<IEventListener> listeners) {
this.listeners = listeners;
}
}