home *** CD-ROM | disk | FTP | other *** search
- package java.beans;
-
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- import java.security.AccessControlContext;
- import java.security.AccessController;
- import sun.reflect.misc.MethodUtil;
-
- public class EventHandler implements InvocationHandler {
- private Object target;
- private String action;
- private String eventPropertyName;
- private String listenerMethodName;
- private AccessControlContext acc = AccessController.getContext();
-
- public EventHandler(Object var1, String var2, String var3, String var4) {
- this.target = var1;
- this.action = var2;
- if (var1 == null) {
- throw new NullPointerException("target must be non-null");
- } else if (var2 == null) {
- throw new NullPointerException("action must be non-null");
- } else {
- this.eventPropertyName = var3;
- this.listenerMethodName = var4;
- }
- }
-
- public Object getTarget() {
- return this.target;
- }
-
- public String getAction() {
- return this.action;
- }
-
- public String getEventPropertyName() {
- return this.eventPropertyName;
- }
-
- public String getListenerMethodName() {
- return this.listenerMethodName;
- }
-
- private Object applyGetters(Object var1, String var2) {
- if (var2 != null && !var2.equals("")) {
- int var3 = var2.indexOf(46);
- if (var3 == -1) {
- var3 = var2.length();
- }
-
- String var4 = var2.substring(0, var3);
- String var5 = var2.substring(Math.min(var3 + 1, var2.length()));
-
- try {
- Method var6 = null;
- if (var1 != null) {
- var6 = ReflectionUtils.getMethod(var1.getClass(), "get" + NameGenerator.capitalize(var4), new Class[0]);
- if (var6 == null) {
- var6 = ReflectionUtils.getMethod(var1.getClass(), "is" + NameGenerator.capitalize(var4), new Class[0]);
- }
-
- if (var6 == null) {
- var6 = ReflectionUtils.getMethod(var1.getClass(), var4, new Class[0]);
- }
- }
-
- if (var6 == null) {
- throw new RuntimeException("No method called: " + var4 + " defined on " + var1);
- } else {
- Object var7 = MethodUtil.invoke(var6, var1, new Object[0]);
- return this.applyGetters(var7, var5);
- }
- } catch (Throwable var8) {
- throw new RuntimeException("Failed to call method: " + var4 + " on " + var1, var8);
- }
- } else {
- return var1;
- }
- }
-
- public Object invoke(Object var1, Method var2, Object[] var3) {
- return AccessController.doPrivileged(new 1(this, var1, var2, var3), this.acc);
- }
-
- private Object invokeInternal(Object var1, Method var2, Object[] var3) {
- String var4 = var2.getName();
- if (var2.getDeclaringClass() == Object.class) {
- if (var4.equals("hashCode")) {
- return new Integer(System.identityHashCode(var1));
- }
-
- if (var4.equals("equals")) {
- return var1 == var3[0] ? Boolean.TRUE : Boolean.FALSE;
- }
-
- if (var4.equals("toString")) {
- return var1.getClass().getName() + '@' + Integer.toHexString(var1.hashCode());
- }
- }
-
- if (this.listenerMethodName != null && !this.listenerMethodName.equals(var4)) {
- return null;
- } else {
- Object var5 = null;
- Object var6 = null;
- Class[] var12;
- if (this.eventPropertyName == null) {
- var6 = new Object[0];
- var12 = new Class[0];
- } else {
- Object var7 = this.applyGetters(var3[0], this.getEventPropertyName());
- var6 = new Object[]{var7};
- var12 = new Class[]{var7 == null ? null : var7.getClass()};
- }
-
- try {
- int var14 = this.action.lastIndexOf(46);
- if (var14 != -1) {
- this.target = this.applyGetters(this.target, this.action.substring(0, var14));
- this.action = this.action.substring(var14 + 1);
- }
-
- Method var8 = ReflectionUtils.getMethod(this.target.getClass(), this.action, var12);
- if (var8 == null) {
- var8 = ReflectionUtils.getMethod(this.target.getClass(), "set" + NameGenerator.capitalize(this.action), var12);
- }
-
- if (var8 == null) {
- String var9 = var12.length == 0 ? " with no arguments" : " with argument " + var12[0];
- throw new RuntimeException("No method called " + this.action + " on " + this.target.getClass() + var9);
- } else {
- return MethodUtil.invoke(var8, this.target, (Object[])var6);
- }
- } catch (IllegalAccessException var10) {
- throw new RuntimeException(var10);
- } catch (InvocationTargetException var11) {
- throw new RuntimeException(var11.getTargetException());
- }
- }
- }
-
- public static <T> T create(Class<T> var0, Object var1, String var2) {
- return (T)create(var0, var1, var2, (String)null, (String)null);
- }
-
- public static <T> T create(Class<T> var0, Object var1, String var2, String var3) {
- return (T)create(var0, var1, var2, var3, (String)null);
- }
-
- public static <T> T create(Class<T> var0, Object var1, String var2, String var3, String var4) {
- EventHandler var5 = new EventHandler(var1, var2, var3, var4);
- if (var0 == null) {
- throw new NullPointerException("listenerInterface must be non-null");
- } else {
- return (T)Proxy.newProxyInstance(var1.getClass().getClassLoader(), new Class[]{var0}, var5);
- }
- }
-
- // $FF: synthetic method
- static Object access$000(EventHandler var0, Object var1, Method var2, Object[] var3) {
- return var0.invokeInternal(var1, var2, var3);
- }
- }
-