    001    package com.hammurapi.eventbus;
    002
    003    import com.hammurapi.common.ExceptionHandler;
    004    import com.hammurapi.eventbus.AbstractEventBus.Handle;
    005
    006
    007    /**
    008     * Events posted by handlers are wrapped into instances of this class.
    009     * Inference commands are queued or processed immediately depending on inference policy.
    010     * Inference commands are filtered by InferenceCommandFilter before being applied to
    011     * event store and posted to further dispatching.
    012     * @author Pavel Vlasov
    013     *
    014     * @param <E>
    015     * @param <P>
    016     * @param <C>
    017     * @param <H>
    018     */
    019    public abstract class InferenceCommand<E, P extends Comparable<P>, C, K, H extends EventBus.Handle<E,P,C>, S extends EventStore<E,P,C,H,S>> {
    020
    021            /**
    022             * @return Handler which posted this event.
    023             */
    024            private EventHandler<E, P, C, H, S> handler;
    025
    026            /**
    027             * @return List of handler inputs which produced this event.
    028             */
    029            private Handle<E,P,C,K>[] inputs;
    030
    031            private K handlerId;
    032
    033            private InferenceContext<E, P, C, K, H, S> inferenceContext;
    034
    035            protected InferenceCommand(
    036                            K handlerId,
    037                            EventHandler<E, P, C, H, S> handler,
    038                            Handle<E,P,C,K>[] inputs,
    039                            InferenceContext<E,P,C,K,H,S> inferenceContext) {
    040                    super();
    041                    this.handlerId = handlerId;
    042                    this.handler = handler;
    043                    this.inputs = inputs;
    044                    this.inferenceContext = inferenceContext;
    045            }
    046
    047            public EventHandler<E, P, C, H, S> getHandler() {
    048                    return handler;
    049            }
    050
    051            public Handle<E,P,C,K>[] getInputs() {
    052                    return inputs;
    053            }
    054
    055            public InferenceContext<E, P, C, K, H, S> getInferenceContext() {
    056                    return inferenceContext;
    057            }
    058
    059            public K getHandlerId() {
    060                    return handlerId;
    061            }
    062
    063            public void setInferenceContext(InferenceContext<E, P, C, K, H, S> inferenceContext) {
    064                    this.inferenceContext = inferenceContext;
    065            }
    066    }
    067