    001    package com.hammurapi.eventbus;
    002
    003    import java.lang.annotation.ElementType;
    004    import java.lang.annotation.Retention;
    005    import java.lang.annotation.RetentionPolicy;
    006    import java.lang.annotation.Target;
    007
    008    /**
    009     * Annotation to mark reflective handler methods.
    010     * @author Pavel Vlasov.
    011     *
    012     */
    013    @Target({ElementType.METHOD})
    014    @Retention(RetentionPolicy.RUNTIME)
    015    public @interface Handler {
    016
    017            /**
    018             * @return Handler method priority. Methods with higher priority value get invoked before methods with lower priority value.
    019             * Handler method can invoke consume() method from EventDispatchContext to "consume" source fact(s) and prevent invocation
    020             * of subsequent handler methods.
    021             */
    022            int priority() default 0;
    023
    024            /**
    025             * Condition definition has the following format <code>[language(parameter list)://] condition expression</code>. Default language is Java.
    026             * If language is not Java, then Extractor framework is used to look up a extractor provider to create extractor from the expression.
    027             * Parameter list is a comma separated list of parameter names, parameters not used in the condition expression can be omitted.
    028             * E.g. <code>parent, child, sibling</code> or, if <code>child</code> is not
    029             * used in the condition expression <code>parent,,sibling</code>. If parameter list is omitted, then arguments can be accessed through <code>args</code> array.
    030             * Handler method's declaring class instance is available through <code>eCtx</code> parameter.
    031             */
    032            String[] value() default {};
    033
    034            /**
    035             * This optional attribute informs the bus about event types which
    036             * this method posts (if any). It allows the engine to optimize the
    037             * predicate network.
    038             * @return
    039             */
    040            Class<?>[] posts() default {};
    041
    042            /**
    043             * @return true if this handler consumes or updates events.
    044             */
    045            boolean consumes() default true;
    046
    047            /**
    048             * @return true if this handler shall be invoked only once.
    049             */
    050            boolean oneOff() default false;
    051
    052            /**
    053             * Handler mode. Default is POST.
    054             * @return
    055             */
    056            EventHandlerBase.Mode mode() default EventHandlerBase.Mode.POST;
    057
    058    }