001    package com.hammurapi.eventbus;
002    
003    import java.util.Arrays;
004    
005    import com.hammurapi.eventbus.AbstractEventBus.Handle;
006    import com.hammurapi.extract.Predicate;
007    
008    
009    /**
010     * @author Pavel Vlasov
011     *
012     * @param <E>
013     * @param <P>
014     * @param <C>
015     * @param <H>
016     */
017    public class PostCommand<E, P extends Comparable<P>, C, K, H extends EventBus.Handle<E,P,C>, S extends EventStore<E,P,C,H,S>> extends InferenceCommand<E,P,C,K,H,S> {
018            
019            private Predicate<E, S>[] validators;
020            private E event;
021            private boolean directPost;
022            private Handle<E,P,C,K> handle;
023            private boolean isHandleMode;
024    
025            public PostCommand(
026                            E event, 
027                            boolean directPost,
028                            K handlerId,
029                            EventHandler<E, P, C, H, S> handler,
030                            Handle<E,P,C,K>[] inputs, 
031                            InferenceContext<E,P,C,K,H,S> inferenceContext,
032                            Predicate<E, S>[] validators) {
033                    super(handlerId, handler,inputs,inferenceContext);
034                    this.event = event;
035                    this.validators = validators;
036                    this.directPost = directPost;
037            }
038    
039            /**
040             * For update
041             * @param handle
042             * @param directPost
043             * @param handlerId
044             * @param handler
045             * @param inputs
046             * @param inferenceContext
047             * @param validators
048             */
049            public PostCommand(
050                            Handle<E,P,C,K> handle, 
051                            K handlerId,
052                            EventHandler<E, P, C, H, S> handler,
053                            Handle<E,P,C,K>[] inputs, 
054                            InferenceContext<E,P,C,K,H,S> inferenceContext) {
055                    super(handlerId, handler,inputs,inferenceContext);
056                    this.handle = handle;
057                    isHandleMode = true;
058            }
059    
060            public E getEvent() {
061                    if (isHandleMode) {
062                            throw new IllegalStateException("Invoke getHandle() instead");
063                    }
064                    return event;
065            }
066            
067            public Handle<E, P, C, K> getHandle() {
068                    if (!isHandleMode) {
069                            throw new IllegalStateException("Invoke getEvent() instead");
070                    }
071                    return handle;
072            }
073            
074            public boolean isHandleMode() {
075                    return isHandleMode;
076            }
077    
078            public Predicate<E, S>[] getValidators() {
079                    return validators;
080            }
081    
082            @Override
083            public String toString() {
084                    return "PostCommand [event=" + event
085                                    + ", handler=" + getHandler() + ", inputs="
086                                    + Arrays.toString(getInputs()) + ", validators="
087                                    + Arrays.toString(validators) + "]";
088            }
089    
090            public boolean isDirectPost() {
091                    return directPost;
092            }
093            
094    }
095