01: package net.xoetrope.xui.events;
02:
03: import net.xoetrope.xui.XPage;
04: import java.lang.reflect.Method;
05: import net.xoetrope.xui.data.XDataBinding;
06: import java.awt.Component;
07: import net.xoetrope.debug.DebugLogger;
08:
09: /**
10: * A utility class to look up and invoke a handler method
11: * <p> Copyright (c) Xoetrope Ltd., 2002-2004</p>
12: * <p> $Revision: 1.3 $</p>
13: * <p> License: see License.txt</p>
14: */
15: public class XHandlerInvoker {
16: XPage targetPage;
17: Method handlerMethod;
18: XDataBinding targetBinding;
19:
20: /**
21: * Create a new method invoker. Used in conjunction with the XListenerHelper
22: * interface so the the XuiBuilder can add event handlers and so that the
23: * components that trigger these events can call back the page's handler methods
24: * @param page the page whose method will be called
25: * @param the component that triggers the event
26: * @param methodName the method to be called
27: * @throws NoSuchMethodException
28: */
29: public XHandlerInvoker(XPage page, Component targetComp,
30: String methodName) throws NoSuchMethodException {
31: targetPage = page;
32: handlerMethod = page.getClass().getMethod(methodName, null);
33: targetBinding = page.getBinding(targetComp);
34: }
35:
36: /**
37: * Invoke the method
38: */
39: public void invoke() {
40: // Save the bound values, if any
41: if (targetBinding != null)
42: targetBinding.set();
43:
44: // Then call any other event handler
45: try {
46: if (handlerMethod != null)
47: handlerMethod.invoke(targetPage, null);
48: } catch (Exception e) {
49: DebugLogger.logWarning("error invoking '"
50: + handlerMethod.getName() + "' in XEventHandler");
51: e.printStackTrace();
52: }
53: }
54: }
|