    001    package com.hammurapi.eventbus;
    002
    003    import java.util.Queue;
    004
    005    import com.hammurapi.common.ExceptionHandler;
    006    import com.hammurapi.common.concurrent.TrackingExecutorService;
    007
    008    /**
    009     * Context propagated through inference processing.
    010     * @author Pavel Vlasov
    011     *
    012     */
    013    public interface InferenceContext<E, P extends Comparable<P>, C, K, H extends EventBus.Handle<E,P,C>, S extends EventStore<E,P,C,H,S>> {
    014
    015            Queue<InferenceCommand<E,P,C,K,H,S>> getInferenceCommandsQueue();
    016
    017            int getInferenceChainLength();
    018
    019            TrackingExecutorService getExecutorService();
    020
    021            ExceptionHandler getRootHandle();
    022
    023            void setRootHandle(ExceptionHandler rootHandle);
    024
    025            EventBus<E,P,C,K,H,S> getBus();
    026
    027            /**
    028             * Creates inference context with the same executor and root handle.
    029             * The queue is inherited for AFTER_ROOT_EVENT and EXCLUSIVE inference policies.
    030             * A new queue is created for AFTER_EVENT policy. Otherwise queue is null.
    031             * Inference chain length is incremented by 1.
    032             * @param isJoin - true if invoked from multi-event join step.
    033             * @return
    034             */
    035            InferenceContext<E,P,C,K,H,S> createNext();
    036
    037            /**
    038             * For AFTER_HANDLER
    039             * @return
    040             */
    041            InferenceContext<E,P,C,K,H,S> wrap();
    042
    043            /**
    044             * Adds inference command to the queue or processes it immediately depending
    045             * on inference policy.
    046             * @param command
    047             * @return
    048             */
    049            void postInferenceCommand(InferenceCommand<E, P, C, K, H, S> command);
    050
    051            /**
    052             * Processes accumulated inference commands, if any.
    053             */
    054            void processInferenceCommands();
    055    }