Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 2.00 KB | None | 0 0
  1.  
  2. import java.lang.reflect.Method;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.NoSuchElementException;
  8.  
  9. public class Binding
  10. {
  11.    class Callback
  12.    {
  13.       final Object target;
  14.       final Method method;
  15.  
  16.       public Callback(Object target, Method method)
  17.       {
  18.          this.target = target;
  19.          this.method = method;
  20.       }
  21.  
  22.       public void call()
  23.       {
  24.          try
  25.          {
  26.             this.method.invoke(this.target, new Object[] { Binding.this.source });
  27.          }
  28.          catch (Exception exc)
  29.          {
  30.             throw new RuntimeException(exc);
  31.          }
  32.       }
  33.    }
  34.  
  35.    final Object                              source;
  36.    private final Map<String, List<Callback>> eventToCallbacks;
  37.  
  38.    public Binding(Object source)
  39.    {
  40.       this.source = source;
  41.       this.eventToCallbacks = new HashMap<String, List<Callback>>();
  42.    }
  43.  
  44.    public void listen(String event, Object target)
  45.    {
  46.       String methodName = fromEventToMethodname(event);
  47.       Method method = findMethod(target, methodName);
  48.  
  49.       List<Callback> callbacks = this.eventToCallbacks.get(event);
  50.       if (callbacks == null)
  51.          this.eventToCallbacks.put(event, callbacks = new ArrayList<Callback>());
  52.       callbacks.add(new Callback(target, method));
  53.    }
  54.  
  55.    public void fire(String event)
  56.    {
  57.       List<Callback> callbacks = this.eventToCallbacks.get(event);
  58.       if (callbacks != null)
  59.          for (Callback callback : callbacks)
  60.             callback.call();
  61.    }
  62.  
  63.    // utility methods
  64.  
  65.    static String fromEventToMethodname(String event)
  66.    {
  67.       return "on" + event.substring(0, 1).toUpperCase() + event.substring(1);
  68.    }
  69.  
  70.    static Method findMethod(Object target, String methodName)
  71.    {
  72.       for (Method method : target.getClass().getMethods())
  73.          if (method.getName().equals(methodName))
  74.             return method;
  75.       throw new NoSuchElementException(methodName);
  76.    }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement