001    package com.hammurapi.eventbus;
002    
003    import com.hammurapi.eventbus.EventHandlerBase.Mode;
004    import com.hammurapi.extract.Predicate;
005    
006    /**
007     * Context of event dispatching. 
008     * @author Pavel Vlasov.
009     * @param <E> Event type.
010     */
011    public interface EventDispatchContext<E, P extends Comparable<P>, C, H extends EventBus.Handle<E,P,C>, S extends EventStore<E,P,C,H,S>> {
012            
013            /**
014             * Posts new event to the bus. 
015             * @param events
016             */
017            void post(E event, Predicate<E, S>... validators);
018            
019            /**
020             * Consumes event at index removing them from further multi-event joins. 
021             * @param indices
022             */
023            void consume(int index);
024            
025            /**
026             * Consumes event.
027             * @param events
028             */
029            void consume(E event);
030            
031    //      /**
032    //       * Replaces an event with a new event. This method is intended for
033    //       * enrichment scenarios where a new event is a subclass of the
034    //       * original event type and all original event attributes remain
035    //       * the same, i.e. the new event can be used in place of the original event. 
036    //       * @param <T> Event type. 
037    //       * @param oldEvent
038    //       * @param newEvent
039    //       */
040    //      <T extends E, S extends T> void substitute(T oldEvent, S newEvent);
041            
042            /**
043             * Invocation of this method indicates that one of source events has
044             * been chanded and shall be re-posted.
045             * @param event
046             */
047            void update(E event);
048            
049            /**
050             * Removes given handler from the inference network so it is never fired again.
051             */
052            void removeHandler();
053            
054            /**
055             * @return event store.
056             */
057            S getEventStore();              
058            
059            /**
060             * Handler mode - POST or REMOVE 
061             * @return
062             */
063            Mode getMode();
064            
065            // TODO method to request derivation tree
066    
067    }