01: /*
02: * Created on 25/09/2004
03: *
04: * ============================================================================
05: * GNU Lesser General Public License
06: * ============================================================================
07: *
08: * Swing Components - visit http://sf.net/projects/gfd
09: *
10: * Copyright (C) 2004 Igor Regis da Silva Simões
11: *
12: * This library is free software; you can redistribute it and/or
13: * modify it under the terms of the GNU Lesser General Public
14: * License as published by the Free Software Foundation; either
15: * version 2.1 of the License, or (at your option) any later version.
16: *
17: * This library is distributed in the hope that it will be useful,
18: * but WITHOUT ANY WARRANTY; without even the implied warranty of
19: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20: * Lesser General Public License for more details.
21: *
22: * You should have received a copy of the GNU Lesser General Public
23: * License along with this library; if not, write to the Free Software
24: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
25: */
26:
27: package br.com.gfpshare.beans;
28:
29: import java.lang.reflect.InvocationHandler;
30: import java.lang.reflect.Method;
31: import java.lang.reflect.Proxy;
32:
33: /**
34: * @author Igor Regis da Silva Simoes
35: */
36: public class GeneralEventHandler implements InvocationHandler {
37: private Object target;
38:
39: private String methodName;
40:
41: private String methodToResponse;
42:
43: /**
44: * @param target Objeto que possui o método a ser chamado pelo Proxy
45: * @param methodName Método que o Proxy deverá chamar quando invocado
46: * @param impl Interface que o proxy deverá implementar
47: * @param methodToResponse Método ao qual o proxy irá responder
48: * @return Retorna uma nova instancia de um proxy listener de eventos
49: */
50: public static Object makeProxy(Object target, String methodName,
51: Class impl, String methodToResponse) {
52: GeneralEventHandler handler = new GeneralEventHandler();
53: handler.target = target;
54: handler.methodName = methodName;
55: handler.methodToResponse = methodToResponse;
56: return Proxy.newProxyInstance(target.getClass()
57: .getClassLoader(), new Class[] { impl }, handler);
58: }
59:
60: /**
61: * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method,
62: * java.lang.Object[])
63: */
64: public Object invoke(Object proxy, Method method, Object[] args) {
65: if (method.getName().equalsIgnoreCase(methodToResponse)) {
66: try {
67: Class[] argTypes = new Class[args.length];
68: for (int i = 0; i < args.length; i++) {
69: argTypes[i] = args[i].getClass();
70: }
71: Method targetMethod = target.getClass().getMethod(
72: methodName, argTypes);
73: return targetMethod.invoke(target, args);
74: } catch (Exception e) {
75: e.printStackTrace();
76: return null;
77: }
78: } else if (method.getName().equalsIgnoreCase("equals")) {
79: return new Boolean(this == args[0]);
80: }
81: return null;
82: }
83: }
|