001 package com.hammurapi.eventbus;
002
003 import com.hammurapi.extract.Predicate;
004
005 /**
006 * Event handler base.
007 * @author Pavel Vlasov.
008 * @param <E> Event type.
009 * @param <P> Priority type.
010 */
011 public interface EventHandlerBase<E, P extends Comparable<P>, C> {
012
013 /**
014 * Event handler mode.
015 * Post - handler is fired when event is posted.
016 * Remove - handler is fired when event is removed.
017 * Both - handler is fired when event is posted and when event is removed.
018 * @author Pavel Vlasov
019 *
020 */
021 enum Mode { POST, REMOVE, BOTH }
022
023 /**
024 * @return true if this handler consumes or updates events.
025 */
026 boolean consumes();
027
028 /**
029 * @return priority Handler priority. Handlers with higher priority are guaranteed to be executed before
030 * handlers with lower priority and as such can consume events and prevent their dispatching to other handlers.
031 */
032 P getPriority();
033
034 /**
035 * @return Number of parameters expected by this handler.
036 */
037 int getCardinality();
038
039 /**
040 * Resets handler internal state, if any.
041 */
042 void reset();
043
044 /**
045 * @return Context for predicates.
046 */
047 C getContext();
048
049 /**
050 * If this method returns true, then handler is invoked only once and then is removed from the bus.
051 * @return
052 */
053 boolean isOneOff();
054
055 /**
056 * Handler mode.
057 * @return
058 */
059 Mode getMode();
060
061 /**
062 * @return Handler predicates.
063 */
064 Predicate<E, C> getPredicate();
065
066 }