11
11
import org .reactivecommons .async .api .handlers .DomainEventHandler ;
12
12
import org .reactivecommons .async .api .handlers .QueryHandler ;
13
13
import org .reactivecommons .async .api .handlers .QueryHandlerDelegate ;
14
+ import org .reactivecommons .async .api .handlers .RawCommandHandler ;
14
15
import org .reactivecommons .async .api .handlers .RawEventHandler ;
15
16
import org .reactivecommons .async .api .handlers .registered .RegisteredCommandHandler ;
17
+ import org .reactivecommons .async .api .handlers .registered .RegisteredDomainHandlers ;
16
18
import org .reactivecommons .async .api .handlers .registered .RegisteredEventListener ;
17
19
import org .reactivecommons .async .api .handlers .registered .RegisteredQueryHandler ;
18
20
19
21
import java .lang .reflect .ParameterizedType ;
20
- import java .util .List ;
21
- import java .util .Map ;
22
- import java .util .concurrent .ConcurrentHashMap ;
23
22
import java .util .concurrent .CopyOnWriteArrayList ;
24
23
25
24
@ Getter
26
25
@ NoArgsConstructor (access = AccessLevel .PACKAGE )
27
26
public final class HandlerRegistry {
28
27
public static final String DEFAULT_DOMAIN = "app" ;
29
- private final Map <String , List <RegisteredEventListener <?, ?>>> domainEventListeners = new ConcurrentHashMap <>();
30
- private final List <RegisteredEventListener <?, ?>> dynamicEventHandlers = new CopyOnWriteArrayList <>();
31
- private final List <RegisteredEventListener <?, ?>> eventNotificationListener = new CopyOnWriteArrayList <>();
32
- private final List <RegisteredQueryHandler <?, ?>> handlers = new CopyOnWriteArrayList <>();
33
- private final List <RegisteredCommandHandler <?, ?>> commandHandlers = new CopyOnWriteArrayList <>();
28
+ private final RegisteredDomainHandlers <RegisteredEventListener <?, ?>> domainEventListeners =
29
+ new RegisteredDomainHandlers <>();
30
+ private final RegisteredDomainHandlers <RegisteredEventListener <?, ?>> dynamicEventHandlers =
31
+ new RegisteredDomainHandlers <>();
32
+ private final RegisteredDomainHandlers <RegisteredEventListener <?, ?>> eventNotificationListener =
33
+ new RegisteredDomainHandlers <>();
34
+ private final RegisteredDomainHandlers <RegisteredQueryHandler <?, ?>> handlers = new RegisteredDomainHandlers <>();
35
+ private final RegisteredDomainHandlers <RegisteredCommandHandler <?, ?>> commandHandlers =
36
+ new RegisteredDomainHandlers <>();
34
37
35
38
36
39
public static HandlerRegistry register () {
@@ -39,90 +42,136 @@ public static HandlerRegistry register() {
39
42
return instance ;
40
43
}
41
44
45
+ //events: DomainEvent
46
+ public <T > HandlerRegistry listenEvent (String eventName , DomainEventHandler <T > handler , Class <T > eventClass ) {
47
+ return listenDomainEvent (DEFAULT_DOMAIN , eventName , handler , eventClass );
48
+ }
49
+
42
50
public <T > HandlerRegistry listenDomainEvent (String domain , String eventName , DomainEventHandler <T > handler ,
43
51
Class <T > eventClass ) {
44
- domainEventListeners .computeIfAbsent (domain , ignored -> new CopyOnWriteArrayList <>())
45
- .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
52
+ domainEventListeners .add (domain , new RegisteredEventListener <>(eventName , handler , eventClass ));
46
53
return this ;
47
54
}
48
55
49
- public HandlerRegistry listenDomainCloudEvent (String domain , String eventName , CloudEventHandler handler ) {
50
- domainEventListeners .computeIfAbsent (domain , ignored -> new CopyOnWriteArrayList <>())
51
- .add (new RegisteredEventListener <>(eventName , handler , CloudEvent .class ));
52
- return this ;
56
+ // events: CloudEvent
57
+ public HandlerRegistry listenCloudEvent (String eventName , CloudEventHandler handler ) {
58
+ return listenDomainCloudEvent (DEFAULT_DOMAIN , eventName , handler );
53
59
}
54
60
55
- public HandlerRegistry listenDomainRawEvent (String domain , String eventName , RawEventHandler <?> handler ) {
56
- domainEventListeners .computeIfAbsent (domain , ignored -> new CopyOnWriteArrayList <>())
57
- .add (new RegisteredEventListener <>(eventName , handler , RawMessage .class ));
61
+ public HandlerRegistry listenDomainCloudEvent (String domain , String eventName , CloudEventHandler handler ) {
62
+ domainEventListeners .add (domain , new RegisteredEventListener <>(eventName , handler , CloudEvent .class ));
58
63
return this ;
59
64
}
60
65
61
- public <T > HandlerRegistry listenEvent (String eventName , DomainEventHandler <T > handler , Class <T > eventClass ) {
62
- domainEventListeners .computeIfAbsent (DEFAULT_DOMAIN , ignored -> new CopyOnWriteArrayList <>())
63
- .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
64
- return this ;
66
+ // events: RawMessage
67
+ public HandlerRegistry listenRawEvent (String eventName , RawEventHandler <?> handler ) {
68
+ return listenDomainRawEvent (DEFAULT_DOMAIN , eventName , handler );
65
69
}
66
70
67
- public HandlerRegistry listenCloudEvent (String eventName , CloudEventHandler handler ) {
68
- domainEventListeners .computeIfAbsent (DEFAULT_DOMAIN , ignored -> new CopyOnWriteArrayList <>())
69
- .add (new RegisteredEventListener <>(eventName , handler , CloudEvent .class ));
71
+ public HandlerRegistry listenDomainRawEvent (String domain , String eventName , RawEventHandler <?> handler ) {
72
+ domainEventListeners .add (domain , new RegisteredEventListener <>(eventName , handler , RawMessage .class ));
70
73
return this ;
71
74
}
72
75
76
+ // notifications: DomainEvent
73
77
public <T > HandlerRegistry listenNotificationEvent (String eventName , DomainEventHandler <T > handler ,
74
78
Class <T > eventClass ) {
75
- eventNotificationListener .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
79
+ return listenNotificationEvent (DEFAULT_DOMAIN , eventName , handler , eventClass );
80
+ }
81
+
82
+ public <T > HandlerRegistry listenNotificationEvent (String domain , String eventName , DomainEventHandler <T > handler ,
83
+ Class <T > eventClass ) {
84
+ eventNotificationListener .add (domain , new RegisteredEventListener <>(eventName , handler , eventClass ));
76
85
return this ;
77
86
}
78
87
88
+ // notifications: CloudEvent
79
89
public HandlerRegistry listenNotificationCloudEvent (String eventName , CloudEventHandler handler ) {
80
- eventNotificationListener .add (new RegisteredEventListener <>(eventName , handler , CloudEvent .class ));
90
+ return listenNotificationCloudEvent (DEFAULT_DOMAIN , eventName , handler );
91
+ }
92
+
93
+ public HandlerRegistry listenNotificationCloudEvent (String domain , String eventName , CloudEventHandler handler ) {
94
+ eventNotificationListener .add (domain , new RegisteredEventListener <>(eventName , handler , CloudEvent .class ));
95
+ return this ;
96
+ }
97
+
98
+ // notifications: RawMessage
99
+ public HandlerRegistry listenNotificationRawEvent (String eventName , RawEventHandler <?> handler ) {
100
+ return listenNotificationRawEvent (DEFAULT_DOMAIN , eventName , handler );
101
+ }
102
+
103
+ public HandlerRegistry listenNotificationRawEvent (String domain , String eventName , RawEventHandler <?> handler ) {
104
+ eventNotificationListener .add (domain , new RegisteredEventListener <>(eventName , handler , RawMessage .class ));
81
105
return this ;
82
106
}
83
107
108
+ // dynamic: DomainEvent supported only for default domain
84
109
public <T > HandlerRegistry handleDynamicEvents (String eventNamePattern , DomainEventHandler <T > handler ,
85
110
Class <T > eventClass ) {
86
- dynamicEventHandlers .add (new RegisteredEventListener <>(eventNamePattern , handler , eventClass ));
111
+ dynamicEventHandlers .add (DEFAULT_DOMAIN , new RegisteredEventListener <>(eventNamePattern , handler , eventClass ));
87
112
return this ;
88
113
}
89
114
115
+ // dynamic: CloudEvent supported only for default domain
90
116
public HandlerRegistry handleDynamicCloudEvents (String eventNamePattern , CloudEventHandler handler ) {
91
- dynamicEventHandlers .add (new RegisteredEventListener <>(eventNamePattern , handler , CloudEvent .class ));
117
+ dynamicEventHandlers .add (DEFAULT_DOMAIN , new RegisteredEventListener <>(eventNamePattern , handler ,
118
+ CloudEvent .class ));
92
119
return this ;
93
120
}
94
121
122
+ // commands: Command
95
123
public <T > HandlerRegistry handleCommand (String commandName , DomainCommandHandler <T > fn , Class <T > commandClass ) {
96
- commandHandlers .add (new RegisteredCommandHandler <>(commandName , fn , commandClass ));
124
+ return handleCommand (DEFAULT_DOMAIN , commandName , fn , commandClass );
125
+ }
126
+
127
+ public <T > HandlerRegistry handleCommand (String domain , String commandName , DomainCommandHandler <T > fn ,
128
+ Class <T > commandClass ) {
129
+ commandHandlers .add (domain , new RegisteredCommandHandler <>(commandName , fn , commandClass ));
97
130
return this ;
98
131
}
99
132
133
+ // commands: CloudEvent
100
134
public HandlerRegistry handleCloudEventCommand (String commandName , CloudCommandHandler handler ) {
101
- commandHandlers .add (new RegisteredCommandHandler <>(commandName , handler , CloudEvent .class ));
135
+ return handleCloudEventCommand (DEFAULT_DOMAIN , commandName , handler );
136
+ }
137
+
138
+ public HandlerRegistry handleCloudEventCommand (String domain , String commandName , CloudCommandHandler handler ) {
139
+ commandHandlers .add (domain , new RegisteredCommandHandler <>(commandName , handler , CloudEvent .class ));
140
+ return this ;
141
+ }
142
+
143
+ // commands: RawMessage
144
+ public HandlerRegistry handleRawCommand (String commandName , RawCommandHandler <?> handler ) {
145
+ return handleRawCommand (DEFAULT_DOMAIN , commandName , handler );
146
+ }
147
+
148
+ public HandlerRegistry handleRawCommand (String domain , String commandName , RawCommandHandler <?> handler ) {
149
+ commandHandlers .add (domain , new RegisteredCommandHandler <>(commandName , handler , RawMessage .class ));
102
150
return this ;
103
151
}
104
152
153
+ // queries: Query
105
154
public <T , R > HandlerRegistry serveQuery (String resource , QueryHandler <T , R > handler , Class <R > queryClass ) {
106
- handlers .add (new RegisteredQueryHandler <>(resource , (ignored , message ) ->
155
+ handlers .add (DEFAULT_DOMAIN , new RegisteredQueryHandler <>(resource , (ignored , message ) ->
107
156
handler .handle (message ), queryClass
108
157
));
109
158
return this ;
110
159
}
111
160
112
161
public <R > HandlerRegistry serveQuery (String resource , QueryHandlerDelegate <Void , R > handler , Class <R > queryClass ) {
113
- handlers .add (new RegisteredQueryHandler <>(resource , handler , queryClass ));
162
+ handlers .add (DEFAULT_DOMAIN , new RegisteredQueryHandler <>(resource , handler , queryClass ));
114
163
return this ;
115
164
}
116
165
117
166
public <R > HandlerRegistry serveCloudEventQuery (String resource , QueryHandler <R , CloudEvent > handler ) {
118
- handlers .add (new RegisteredQueryHandler <>(resource , (ignored , message ) ->
167
+ handlers .add (DEFAULT_DOMAIN , new RegisteredQueryHandler <>(resource , (ignored , message ) ->
119
168
handler .handle (message ), CloudEvent .class
120
169
));
121
170
return this ;
122
171
}
123
172
124
- public < R > HandlerRegistry serveCloudEventQuery (String resource , QueryHandlerDelegate <Void , CloudEvent > handler ) {
125
- handlers .add (new RegisteredQueryHandler <>(resource , handler , CloudEvent .class ));
173
+ public HandlerRegistry serveCloudEventQuery (String resource , QueryHandlerDelegate <Void , CloudEvent > handler ) {
174
+ handlers .add (DEFAULT_DOMAIN , new RegisteredQueryHandler <>(resource , handler , CloudEvent .class ));
126
175
return this ;
127
176
}
128
177
@@ -139,7 +188,8 @@ public <T> HandlerRegistry handleDynamicEvents(String eventNamePattern, DomainEv
139
188
140
189
@ Deprecated (forRemoval = true )
141
190
public <T > HandlerRegistry handleCommand (String commandName , DomainCommandHandler <T > handler ) {
142
- commandHandlers .add (new RegisteredCommandHandler <>(commandName , handler , inferGenericParameterType (handler )));
191
+ commandHandlers .add (DEFAULT_DOMAIN , new RegisteredCommandHandler <>(commandName , handler ,
192
+ inferGenericParameterType (handler )));
143
193
return this ;
144
194
}
145
195
0 commit comments