package net.codjo.dataprocess.common.eventsbinder; import net.codjo.dataprocess.common.eventsbinder.dynalistener.EventReaction; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.EventObject; /** * */ class MethodCallEventReaction implements EventReaction { private Object boundObject; private final Object logicObject; private final Method logicMethod; private final Method logicErrorMethod; public static final String FATAL_ERROR_MSG = "Fatal Error, when call OnError Handler..."; MethodCallEventReaction(Object logicObject, Method logicMethod, Method logicErrorMethod, Object boundObject) { this.logicObject = logicObject; this.logicMethod = logicMethod; this.logicErrorMethod = logicErrorMethod; this.boundObject = boundObject; } public void reactToAnEvent(EventObject eventObject, String methodCalled) { try { Object parameters[] = new Object[logicMethod.getParameterTypes().length]; for (int index = 0; index < parameters.length; index++) { Class<?> paramClass = logicMethod.getParameterTypes()[index]; if (EventObject.class.isAssignableFrom(paramClass)) { parameters[index] = eventObject; } if (paramClass.isAssignableFrom(boundObject.getClass())) { parameters[index] = boundObject; } } logicMethod.invoke(logicObject, parameters); } catch (Exception ex) { Throwable toReThrow = ex; try { if (ex instanceof InvocationTargetException) { toReThrow = ex.getCause(); } logicErrorMethod.invoke(logicObject, toReThrow); } catch (Throwable th) { throw new RuntimeException(FATAL_ERROR_MSG, th); } } } }