Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.lang.reflect.Method;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.NoSuchElementException;
- public class Binding
- {
- class Callback
- {
- final Object target;
- final Method method;
- public Callback(Object target, Method method)
- {
- this.target = target;
- this.method = method;
- }
- public void call()
- {
- try
- {
- this.method.invoke(this.target, new Object[] { Binding.this.source });
- }
- catch (Exception exc)
- {
- throw new RuntimeException(exc);
- }
- }
- }
- final Object source;
- private final Map<String, List<Callback>> eventToCallbacks;
- public Binding(Object source)
- {
- this.source = source;
- this.eventToCallbacks = new HashMap<String, List<Callback>>();
- }
- public void listen(String event, Object target)
- {
- String methodName = fromEventToMethodname(event);
- Method method = findMethod(target, methodName);
- List<Callback> callbacks = this.eventToCallbacks.get(event);
- if (callbacks == null)
- this.eventToCallbacks.put(event, callbacks = new ArrayList<Callback>());
- callbacks.add(new Callback(target, method));
- }
- public void fire(String event)
- {
- List<Callback> callbacks = this.eventToCallbacks.get(event);
- if (callbacks != null)
- for (Callback callback : callbacks)
- callback.call();
- }
- // utility methods
- static String fromEventToMethodname(String event)
- {
- return "on" + event.substring(0, 1).toUpperCase() + event.substring(1);
- }
- static Method findMethod(Object target, String methodName)
- {
- for (Method method : target.getClass().getMethods())
- if (method.getName().equals(methodName))
- return method;
- throw new NoSuchElementException(methodName);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement