| 1 | package com.hammurapi.eventbus; |
| 2 | |
| 3 | import java.util.Queue; |
| 4 | import java.util.Set; |
| 5 | |
| 6 | import com.hammurapi.common.ExceptionHandler; |
| 7 | import com.hammurapi.common.concurrent.TrackingExecutorService; |
| 8 | import com.hammurapi.eventbus.AbstractEventBus.Handle; |
| 9 | import com.hammurapi.eventbus.AbstractEventBus.Snapshot; |
| 10 | import com.hammurapi.extract.Predicate; |
| 11 | |
| 12 | /** |
| 13 | * Wrapper interface. |
| 14 | * @author Pavel Vlasov |
| 15 | * |
| 16 | * @param <E> |
| 17 | * @param <P> |
| 18 | */ |
| 19 | public class EventHandlerWrapperFilter<E, P extends Comparable<P>, C, K, H extends EventBus.Handle<E, P, C>, S extends EventStore<E,P,C,H,S>> implements EventHandlerWrapper<E, P, C, K, H, S> { |
| 20 | |
| 21 | private EventHandlerWrapper<E, P, C, K, H, S> master; |
| 22 | private Predicate<E, C> predicate; |
| 23 | |
| 24 | public boolean consumes() { |
| 25 | return master.consumes(); |
| 26 | } |
| 27 | |
| 28 | public P getPriority() { |
| 29 | return master.getPriority(); |
| 30 | } |
| 31 | |
| 32 | @Override |
| 33 | public void post(EventDispatchContext<E, P, C, H, S> context, |
| 34 | InferenceContext<E,P,C,K,H,S> inferenceContext, |
| 35 | Handle<E, P, C, K>... events) { |
| 36 | master.post(context, inferenceContext, events); |
| 37 | } |
| 38 | |
| 39 | public int getCardinality() { |
| 40 | return master.getCardinality(); |
| 41 | } |
| 42 | |
| 43 | public void reset() { |
| 44 | master.reset(); |
| 45 | } |
| 46 | |
| 47 | public C getContext() { |
| 48 | return master.getContext(); |
| 49 | } |
| 50 | |
| 51 | public Set<K> getRegistrationKeys() { |
| 52 | return master.getRegistrationKeys(); |
| 53 | } |
| 54 | |
| 55 | public EventHandler<E, P, C, H, S> getHandler() { |
| 56 | return master.getHandler(); |
| 57 | } |
| 58 | |
| 59 | public void takeSnapshot(Snapshot<E, P, C, K, H, S> snapshot, Set<K> taken) { |
| 60 | master.takeSnapshot(snapshot, taken); |
| 61 | } |
| 62 | |
| 63 | public Predicate<E, C> getPredicate() { |
| 64 | return predicate; |
| 65 | } |
| 66 | |
| 67 | public EventHandlerWrapperFilter(EventHandlerWrapper<E, P, C, K, H, S> master, Predicate<E, C> predicate) { |
| 68 | this.master = peel(master); |
| 69 | this.predicate = predicate; |
| 70 | } |
| 71 | |
| 72 | public EventHandlerWrapper<E, P, C, K, H, S> getMaster() { |
| 73 | return master; |
| 74 | } |
| 75 | |
| 76 | public static <E, P extends Comparable<P>, C, K, H extends EventBus.Handle<E, P, C>, S extends EventStore<E,P,C,H,S>> EventHandlerWrapper<E, P, C, K, H, S> peel(EventHandlerWrapper<E, P, C, K, H, S> handler) { |
| 77 | if (handler instanceof EventHandlerWrapperFilter) { |
| 78 | return peel(((EventHandlerWrapperFilter<E, P, C, K, H, S>) handler).getMaster()); |
| 79 | } |
| 80 | |
| 81 | return handler; |
| 82 | } |
| 83 | |
| 84 | @Override |
| 85 | public boolean isOneOff() { |
| 86 | return master.isOneOff(); |
| 87 | } |
| 88 | |
| 89 | @Override |
| 90 | public Mode getMode() { |
| 91 | return master.getMode(); |
| 92 | } |
| 93 | |
| 94 | } |