/*
* DrakkarKeel - An Enterprise Collaborative Search Platform
*
* The contents of this file are subject under the terms described in the
* DRAKKARKEEL_LICENSE file included in this distribution; you may not use this
* file except in compliance with the License.
*
* 2013-2014 DrakkarKeel Platform.
*/
package drakkar.oar.util;
import java.io.Serializable;
import java.lang.reflect.Method;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.ForwardEvent;
import org.zkoss.zk.ui.sys.ComponentsCtrl;
public class ZkUtil implements Serializable{
private static final long serialVersionUID = 77700000000005L;
/**
* Este método es el encargado de mapear la notificación relizada por el servidor
* para su despacho por el método correspondiente.
*
* @param object clase que implemta el listener
* @param evt evento
*
* @throws Exception
*/
public static void mappingEvent(Object object, Event evt) throws Exception {
final Object controller = object;
final Method mtd = ComponentsCtrl.getEventMethod(controller.getClass(), evt.getName());
if (mtd != null) {
if (mtd.getParameterTypes().length == 0) {
mtd.invoke(controller, null);
} else if (evt instanceof ForwardEvent) {
final Class paramcls = (Class) mtd.getParameterTypes()[0];
if (ForwardEvent.class.isAssignableFrom(paramcls)
|| Event.class.equals(paramcls)) {
mtd.invoke(controller, new Object[]{evt});
} else {
do {
evt = ((ForwardEvent) evt).getOrigin();
} while (evt instanceof ForwardEvent);
mtd.invoke(controller, new Object[]{evt});
}
} else {
mtd.invoke(controller, new Object[]{evt});
}
}
}
}