001 package com.hammurapi.eventbus;
002
003 import java.util.HashSet;
004 import java.util.Set;
005
006 import com.hammurapi.common.TokenExpander;
007
008 /**
009 * This class introspects instances passed to it and creates event handlers from
010 * classes annotated with Handler annotation.
011 * @author Pavel Vlasov
012 *
013 * @param <E> Event type.
014 * @param <P> Priority type.
015 * @param <C> Context type.
016 * @param <K> Registration key type.
017 */
018 public class Introspector<E, C, K, H extends EventBus.Handle<E,Integer,C>, S extends EventStore<E,Integer,C,H,S>, B extends EventBus<E, Integer, C, K, H, S>> extends ReflectiveEventHandlerFactory<E, C, H, S> implements JavaBinder<E, C, K, H, S, B, C> {
019
020 public Introspector(ClassLoader classLoader, TokenExpander tokenExpander) {
021 super(classLoader, tokenExpander);
022 }
023
024 /**
025 * Registers instance methods annotated with Handler annotation with the bus.
026 * @param instance Instance with handler methods.
027 * @param bus Event bus.
028 * @return Set of registration keys.
029 */
030 @Override
031 public Set<K> bind(final C instance, B bus) {
032 Set<K> ret = new HashSet<K>();
033 for (ReflectiveEventHandler<E,C,H,S> handler: createHandlers(instance, bus.getEventType())) {
034 ret.add(bus.addHandler(handler));
035 }
036 return ret;
037 }
038 }