/*
* Copyright (C) 2004 The Concord Consortium, Inc.,
* 10 Concord Crossing, Concord, MA 01742
*
* Web Site: http://www.concord.org
* Email: info@concord.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* END LICENSE */
package org.concord.swing;
import java.awt.Component;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.EventListener;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;
public class EventRelay
{
protected Map methodListsTable = new HashMap();
public void reset()
{
methodListsTable.clear();
}
public void addTarget(Component target, Class listenerClass, Class eventClass, String [] methodNames)
{
EventListener [] listeners = target.getListeners(listenerClass);
Class [] argClass = { eventClass };
for (int i = 0; i < methodNames.length; i++)
{
List methodList = new Vector();
for (int j = 0; j < listeners.length; j++)
{
EventListener listener = listeners[j];
Class objectClass = listener.getClass();
try
{
Method method = objectClass.getMethod(methodNames[i], argClass);
methodList.add(method);
methodList.add(listener);
}
catch (NoSuchMethodException e)
{
}
}
methodListsTable.put(methodNames[i], methodList);
}
}
protected void relay(String methodName, EventObject event)
{
Object [] args = { null };
List methodList = (List) methodListsTable.get(methodName);
Iterator methods = methodList.iterator();
while (methods.hasNext())
{
Method method = (Method) methods.next();
Object object = methods.next();
args[0] = event;
try
{
method.invoke(object, args);
}
catch (IllegalAccessException e)
{
}
catch (IllegalArgumentException e)
{
}
catch (InvocationTargetException e)
{
}
}
}
}