public boolean addObserver(final Object observer) { if (observer == null) { throw new IllegalArgumentException("observer cannot be null"); } try { final Observer wrapper = new Observer(observer); if (wrapper.after.size() + wrapper.before.size() + wrapper.methods.size() > 0 && observers.add(wrapper)) { methods.clear(); fireEvent(new ObserverAdded(observer)); return true; } else { return false; } } catch (final NotAnObserverException naoe) { return false; } }
private Invocation get(final Map<Class, Invocation> map, final Class eventType) { if (eventType == null) { return IGNORE; } final Invocation method = map.get(eventType); if (method != null) { return method; } return get(map, eventType.getSuperclass()); }
if (!isObserver(method)) { continue; final Class parameterClass = getParameterClass(method); this.after.put(parameterClass, new AfterInvocation(method, observer)); final Class parameterClass = getParameterClass(method); this.before.put(parameterClass, new BeforeInvocation(method, observer)); validate(method, type); this.methods.put(type, new MethodInvocation(method, observer));
if (!isObserver(method)) { continue; final Class parameterClass = getParameterClass(method); this.after.put(parameterClass, new AfterInvocation(method, observer)); final Class parameterClass = getParameterClass(method); this.before.put(parameterClass, new BeforeInvocation(method, observer)); validate(method, type); this.methods.put(type, new MethodInvocation(method, observer));
private Class getParameterClass(final Method method) { final Type[] genericParameterTypes = method.getGenericParameterTypes(); final Type generic = genericParameterTypes[0]; if (!(generic instanceof ParameterizedType)) { final Class<?> event = method.getParameterTypes()[0]; throw new IllegalArgumentException("@Observes " + event.getSimpleName() + " missing generic type: " + method.toString()); } final ParameterizedType parameterized = ParameterizedType.class.cast(generic); final Type type = parameterized.getActualTypeArguments()[0]; final Class clazz; if (type instanceof Class) { clazz = Class.class.cast(type); } else if (type instanceof WildcardType) { clazz = Object.class; } else { final Class<?> event = method.getParameterTypes()[0]; throw new IllegalArgumentException("@Observes " + event.getSimpleName() + " unsupported generic type: " + type.getClass().getSimpleName() + " " + method.toString()); } validate(method, clazz); return clazz; }
private Class getParameterClass(final Method method) { final Type[] genericParameterTypes = method.getGenericParameterTypes(); final Type generic = genericParameterTypes[0]; if (!(generic instanceof ParameterizedType)) { final Class<?> event = method.getParameterTypes()[0]; throw new IllegalArgumentException("@Observes " + event.getSimpleName() + " missing generic type: " + method.toString()); } final ParameterizedType parameterized = ParameterizedType.class.cast(generic); final Type type = parameterized.getActualTypeArguments()[0]; final Class clazz; if (type instanceof Class) { clazz = Class.class.cast(type); } else if (type instanceof WildcardType) { clazz = Object.class; } else { final Class<?> event = method.getParameterTypes()[0]; throw new IllegalArgumentException("@Observes " + event.getSimpleName() + " unsupported generic type: " + type.getClass().getSimpleName() + " " + method.toString()); } validate(method, clazz); return clazz; }
private Invocation buildInvocation(final Phase phase, final Class<?> type) { final InvocationList list = new InvocationList(); for (final Observer observer : observers) { final Invocation method = observer.get(phase, type); if (method != null && method != IGNORE) { list.add(method); } } if (list.getInvocations().size() == 0) { return IGNORE; } else if (list.getInvocations().size() == 1) { return list.getInvocations().get(0); } else { return list; } }
public boolean removeObserver(final Object observer) { if (observer == null) { throw new IllegalArgumentException("listener cannot be null"); } try { if (observers.remove(new Observer(observer))) { methods.clear(); fireEvent(new ObserverRemoved(observer)); return true; } else { return false; } } catch (final NotAnObserverException naoe) { return false; } }
private Invocation buildInvocation(final Phase phase, final Class<?> type) { final InvocationList list = new InvocationList(); for (final Observer observer : observers) { final Invocation method = observer.get(phase, type); if (method != null && method != IGNORE) { list.add(method); } } if (list.getInvocations().size() == 0) { return IGNORE; } else if (list.getInvocations().size() == 1) { return list.getInvocations().get(0); } else { return list; } }
public boolean removeObserver(final Object observer) { if (observer == null) { throw new IllegalArgumentException("listener cannot be null"); } try { if (observers.remove(new Observer(observer))) { methods.clear(); fireEvent(new ObserverRemoved(observer)); return true; } else { return false; } } catch (final NotAnObserverException naoe) { return false; } }
public boolean addObserver(final Object observer) { if (observer == null) { throw new IllegalArgumentException("observer cannot be null"); } try { final Observer wrapper = new Observer(observer); if (wrapper.after.size() + wrapper.before.size() + wrapper.methods.size() > 0 && observers.add(wrapper)) { methods.clear(); fireEvent(new ObserverAdded(observer)); return true; } else { return false; } } catch (final NotAnObserverException naoe) { return false; } }
public Invocation getBefore(final Class eventType) { return get(before, eventType); }
public Invocation getAfter(final Class eventType) { return get(after, eventType); }
public Invocation getAfter(final Class eventType) { return get(after, eventType); }
public Invocation getBefore(final Class eventType) { return get(before, eventType); }
private Invocation get(final Map<Class, Invocation> map, final Class eventType) { if (eventType == null) { return IGNORE; } final Invocation method = map.get(eventType); if (method != null) { return method; } return get(map, eventType.getSuperclass()); }