01: /**
02: * Copyright 2006 Webmedia Group Ltd.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: **/package org.araneaframework.core;
16:
17: import java.lang.reflect.Method;
18: import org.apache.commons.logging.Log;
19: import org.apache.commons.logging.LogFactory;
20: import org.araneaframework.InputData;
21: import org.araneaframework.core.util.ProxiedHandlerUtil;
22:
23: /**
24: * @author Jevgeni Kabanov (ekabanov <i>at</i> araneaframework <i>dot</i> org)
25: */
26: public class ProxyEventListener implements EventListener {
27: public static final Log log = LogFactory
28: .getLog(ProxyEventListener.class);
29:
30: protected Object eventTarget;
31:
32: public ProxyEventListener(Object eventTarget) {
33: this .eventTarget = eventTarget;
34: }
35:
36: public void processEvent(Object eventId, InputData input)
37: throws Exception {
38: String eventParameter = (String) input.getGlobalData().get(
39: ApplicationWidget.EVENT_PARAMETER_KEY);
40:
41: Method eventHandler;
42: // lets try to find a handle method with an empty argument
43: try {
44: eventHandler = ProxiedHandlerUtil.getEventHandler(
45: (String) eventId, eventTarget);
46:
47: if (log.isTraceEnabled()) {
48: String eventHandlerName = ProxiedHandlerUtil.EVENT_HANDLER_PREFIX
49: + ((String) eventId).substring(0, 1)
50: .toUpperCase()
51: + ((String) eventId).substring(1);
52: log.trace("Calling method '" + eventHandlerName
53: + "()' of class '"
54: + eventTarget.getClass().getName() + "'.");
55: }
56: eventHandler.invoke(eventTarget, new Object[] {});
57:
58: return;
59: } catch (NoSuchMethodException e) {/*OK*/
60: }
61:
62: // lets try to find a method with a String type argument
63: try {
64: eventHandler = ProxiedHandlerUtil.getEventHandler(
65: (String) eventId, eventTarget,
66: new Class[] { String.class });
67:
68: if (log.isTraceEnabled()) {
69: String eventHandlerName = ProxiedHandlerUtil.EVENT_HANDLER_PREFIX
70: + ((String) eventId).substring(0, 1)
71: .toUpperCase()
72: + ((String) eventId).substring(1);
73: log.trace("Calling method '" + eventHandlerName
74: + "(String)' of class '"
75: + eventTarget.getClass().getName() + "'.");
76: }
77: eventHandler.invoke(eventTarget,
78: new Object[] { eventParameter });
79:
80: return;
81: } catch (NoSuchMethodException e) {/*OK*/
82: }
83:
84: if (log.isWarnEnabled()) {
85: StringBuffer logMessage = new StringBuffer()
86: .append("ProxyEventListener")
87: .append(
88: eventTarget instanceof org.araneaframework.Component ? " '"
89: + ((org.araneaframework.Component) eventTarget)
90: .getScope() + "'"
91: : "");
92: logMessage
93: .append(" cannot deliver event as no event listeners were registered for the event id '");
94: logMessage.append(eventId).append("'!").append(
95: Assert.thisToString(eventTarget));
96: log.warn(logMessage);
97: }
98: }
99: }
|