EventUtils.java 2.84 KB
package org.apache.commons.lang3.event;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang3.reflect.MethodUtils;

public class EventUtils
{
  public static <L> void addEventListener(Object paramObject, Class<L> paramClass, L paramL)
  {
    try
    {
      MethodUtils.invokeMethod(paramObject, "add" + paramClass.getSimpleName(), new Object[] { paramL });
      return;
    }
    catch (NoSuchMethodException paramL)
    {
      throw new IllegalArgumentException("Class " + paramObject.getClass().getName() + " does not have a public add" + paramClass.getSimpleName() + " method which takes a parameter of type " + paramClass.getName() + ".");
    }
    catch (IllegalAccessException paramL)
    {
      throw new IllegalArgumentException("Class " + paramObject.getClass().getName() + " does not have an accessible add" + paramClass.getSimpleName() + " method which takes a parameter of type " + paramClass.getName() + ".");
    }
    catch (InvocationTargetException paramObject)
    {
      throw new RuntimeException("Unable to add listener.", ((InvocationTargetException)paramObject).getCause());
    }
  }
  
  public static <L> void bindEventsToMethod(Object paramObject1, String paramString, Object paramObject2, Class<L> paramClass, String... paramVarArgs)
  {
    ClassLoader localClassLoader = paramObject1.getClass().getClassLoader();
    paramObject1 = new a(paramObject1, paramString, paramVarArgs);
    addEventListener(paramObject2, paramClass, paramClass.cast(Proxy.newProxyInstance(localClassLoader, new Class[] { paramClass }, (InvocationHandler)paramObject1)));
  }
  
  static final class a
    implements InvocationHandler
  {
    private final Object a;
    private final String b;
    private final Set<String> c;
    
    a(Object paramObject, String paramString, String[] paramArrayOfString)
    {
      this.a = paramObject;
      this.b = paramString;
      this.c = new HashSet(Arrays.asList(paramArrayOfString));
    }
    
    public final Object invoke(Object paramObject, Method paramMethod, Object[] paramArrayOfObject)
      throws Throwable
    {
      if ((this.c.isEmpty()) || (this.c.contains(paramMethod.getName())))
      {
        if (MethodUtils.getAccessibleMethod(this.a.getClass(), this.b, paramMethod.getParameterTypes()) != null) {}
        for (int i = 1; i != 0; i = 0) {
          return MethodUtils.invokeMethod(this.a, this.b, paramArrayOfObject);
        }
        return MethodUtils.invokeMethod(this.a, this.b);
      }
      return null;
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/org/apache/commons/lang3/event/EventUtils.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */