/*
* EventSender.java
*
* Created on September 20, 2002, 5:07 PM
*/
package org.freehep.application.studio;
import java.util.EventObject;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
*
* @author tonyj
*/
public class EventSender
{
EventSender()
{
}
public void broadcast(EventObject event)
{
//FIXME: needs to be much more efficient
for (Iterator i = listeners.iterator(); i.hasNext(); )
{
ListenerEntry l = (ListenerEntry) i.next();
if (l.getEntryClass().isAssignableFrom(event.getClass()))
{
l.getListener().handleEvent(event);
}
}
}
public boolean hasListeners(Class c)
{
// FIXME:
return true;
}
public void addEventListener(StudioListener l, Class c)
{
listeners.add(new ListenerEntry(l,c));
}
public void removeEventListener(StudioListener l, Class c)
{
listeners.remove(new ListenerEntry(l,c));
}
private Set listeners = new HashSet();
private class ListenerEntry
{
private StudioListener l;
private Class c;
ListenerEntry(StudioListener l, Class c)
{
this.l = l;
this.c = c;
}
public boolean equals(Object o)
{
if (o instanceof ListenerEntry)
{
ListenerEntry that = (ListenerEntry) o;
return this.l == that.l && this.c == that.c;
}
else return false;
}
public int hashCode()
{
return l.hashCode() + c.hashCode();
}
Class getEntryClass()
{
return c;
}
StudioListener getListener()
{
return l;
}
}
}