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 | } |