package net.codjo.dataprocess.common.eventsbinder.dynalistener;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.EventListener;
import java.util.EventObject;
/**
*
*/
public class DynamicListener implements InvocationHandler {
private final EventReaction eventReaction;
private final EventChecker eventChecker;
private DynamicListener(EventReaction eventReaction,
EventChecker eventChecker) {
this.eventReaction = eventReaction;
this.eventChecker = eventChecker;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
EventObject eventObject = (EventObject)args[0];
if (eventChecker.checkEvent(eventObject, method.getName())) {
eventReaction.reactToAnEvent(eventObject, method.getName());
}
return null;
}
public static EventListener createEventListener(Class<? extends EventListener> listenerTypeClass,
EventReaction eventReaction,
EventChecker eventChecker) {
return (EventListener)Proxy.newProxyInstance(DynamicListener.class.getClassLoader(),
new Class[]{
listenerTypeClass},
new DynamicListener(eventReaction, eventChecker));
}
}