1
1
package org .reactivecommons .async .api ;
2
2
3
3
import io .cloudevents .CloudEvent ;
4
- import io .cloudevents .core .provider .EventFormatProvider ;
5
- import io .cloudevents .jackson .JsonFormat ;
6
4
import lombok .AccessLevel ;
7
5
import lombok .Getter ;
8
6
import lombok .NoArgsConstructor ;
9
- import org .reactivecommons .async .api .handlers .CommandHandler ;
10
- import org .reactivecommons .async .api .handlers .EventHandler ;
7
+ import org .reactivecommons .async .api .handlers .CloudCommandHandler ;
8
+ import org .reactivecommons .async .api .handlers .CloudEventHandler ;
9
+ import org .reactivecommons .async .api .handlers .DomainCommandHandler ;
10
+ import org .reactivecommons .async .api .handlers .DomainEventHandler ;
11
11
import org .reactivecommons .async .api .handlers .QueryHandler ;
12
12
import org .reactivecommons .async .api .handlers .QueryHandlerDelegate ;
13
13
import org .reactivecommons .async .api .handlers .registered .RegisteredCommandHandler ;
24
24
@ NoArgsConstructor (access = AccessLevel .PACKAGE )
25
25
public class HandlerRegistry {
26
26
public static final String DEFAULT_DOMAIN = "app" ;
27
- private final Map <String , List <RegisteredEventListener <?>>> domainEventListeners = new ConcurrentHashMap <>();
28
- private final List <RegisteredEventListener <?>> dynamicEventHandlers = new CopyOnWriteArrayList <>();
29
- private final List <RegisteredEventListener <?>> eventNotificationListener = new CopyOnWriteArrayList <>();
27
+ private final Map <String , List <RegisteredEventListener <?, ? >>> domainEventListeners = new ConcurrentHashMap <>();
28
+ private final List <RegisteredEventListener <?, ? >> dynamicEventHandlers = new CopyOnWriteArrayList <>();
29
+ private final List <RegisteredEventListener <?, ? >> eventNotificationListener = new CopyOnWriteArrayList <>();
30
30
private final List <RegisteredQueryHandler <?, ?>> handlers = new CopyOnWriteArrayList <>();
31
- private final List <RegisteredCommandHandler <?>> commandHandlers = new CopyOnWriteArrayList <>();
31
+ private final List <RegisteredCommandHandler <?, ? >> commandHandlers = new CopyOnWriteArrayList <>();
32
32
33
33
34
34
public static HandlerRegistry register () {
@@ -37,75 +37,103 @@ public static HandlerRegistry register() {
37
37
return instance ;
38
38
}
39
39
40
- public <T > HandlerRegistry listenDomainEvent (String domain , String eventName , EventHandler <T > handler , Class <T > eventClass ) {
40
+ public <T > HandlerRegistry listenDomainEvent (String domain , String eventName , DomainEventHandler <T > handler , Class <T > eventClass ) {
41
41
domainEventListeners .computeIfAbsent (domain , ignored -> new CopyOnWriteArrayList <>())
42
- .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
42
+ .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
43
43
return this ;
44
44
}
45
45
46
- public <T > HandlerRegistry listenEvent (String eventName , EventHandler <T > handler , Class <T > eventClass ) {
46
+ public HandlerRegistry listenDomainCloudEvent (String domain , String eventName , CloudEventHandler handler ) {
47
+ domainEventListeners .computeIfAbsent (domain , ignored -> new CopyOnWriteArrayList <>())
48
+ .add (new RegisteredEventListener <>(eventName , handler , CloudEvent .class ));
49
+ return this ;
50
+ }
51
+
52
+ public <T > HandlerRegistry listenEvent (String eventName , DomainEventHandler <T > handler , Class <T > eventClass ) {
47
53
domainEventListeners .computeIfAbsent (DEFAULT_DOMAIN , ignored -> new CopyOnWriteArrayList <>())
48
- .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
54
+ .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
49
55
return this ;
50
56
}
51
57
52
- public <T > HandlerRegistry listenEvent (String eventName , EventHandler <T > handler ) {
53
- return listenEvent (eventName , handler , inferGenericParameterType (handler ));
58
+ public HandlerRegistry listenCloudEvent (String eventName , CloudEventHandler handler ) {
59
+ domainEventListeners .computeIfAbsent (DEFAULT_DOMAIN , ignored -> new CopyOnWriteArrayList <>())
60
+ .add (new RegisteredEventListener <>(eventName , handler , CloudEvent .class ));
61
+ return this ;
54
62
}
55
63
56
- public <T > HandlerRegistry listenNotificationEvent (String eventName , EventHandler <T > handler , Class <T > eventClass ) {
64
+ public <T > HandlerRegistry listenNotificationEvent (String eventName , DomainEventHandler <T > handler , Class <T > eventClass ) {
57
65
eventNotificationListener .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
58
66
return this ;
59
67
}
60
68
61
- public <T > HandlerRegistry handleDynamicEvents (String eventNamePattern , EventHandler <T > handler , Class <T > eventClass ) {
69
+ public HandlerRegistry listenNotificationCloudEvent (String eventName , CloudEventHandler handler ) {
70
+ eventNotificationListener .add (new RegisteredEventListener <>(eventName , handler , CloudEvent .class ));
71
+ return this ;
72
+ }
73
+
74
+ public <T > HandlerRegistry handleDynamicEvents (String eventNamePattern , DomainEventHandler <T > handler , Class <T > eventClass ) {
62
75
dynamicEventHandlers .add (new RegisteredEventListener <>(eventNamePattern , handler , eventClass ));
63
76
return this ;
64
77
}
65
78
66
- public <T > HandlerRegistry handleDynamicEvents (String eventNamePattern , EventHandler <T > handler ) {
67
- return handleDynamicEvents (eventNamePattern , handler , inferGenericParameterType (handler ));
79
+ public HandlerRegistry handleDynamicCloudEvents (String eventNamePattern , CloudEventHandler handler ) {
80
+ dynamicEventHandlers .add (new RegisteredEventListener <>(eventNamePattern , handler , CloudEvent .class ));
81
+ return this ;
68
82
}
69
83
70
- public <T > HandlerRegistry handleCommand (String commandName , CommandHandler <T > fn , Class <T > commandClass ) {
84
+ public <T > HandlerRegistry handleCommand (String commandName , DomainCommandHandler <T > fn , Class <T > commandClass ) {
71
85
commandHandlers .add (new RegisteredCommandHandler <>(commandName , fn , commandClass ));
72
86
return this ;
73
87
}
74
88
75
- public < T > HandlerRegistry handleCommand (String commandName , CommandHandler < T > fn ) {
76
- commandHandlers .add (new RegisteredCommandHandler <>(commandName , fn , inferGenericParameterType ( fn ) ));
89
+ public HandlerRegistry handleCloudEventCommand (String commandName , CloudCommandHandler handler ) {
90
+ commandHandlers .add (new RegisteredCommandHandler <>(commandName , handler , CloudEvent . class ));
77
91
return this ;
78
92
}
79
93
80
- public <T , R > HandlerRegistry serveQuery (String resource , QueryHandler <T , R > handler ) {
81
- return serveQuery (resource , handler , inferGenericParameterType (handler ));
94
+ public <T , R > HandlerRegistry serveQuery (String resource , QueryHandler <T , R > handler , Class <R > queryClass ) {
95
+ handlers .add (new RegisteredQueryHandler <>(resource , (ignored , message ) -> handler .handle (message ), queryClass ));
96
+ return this ;
82
97
}
83
98
84
- public <T , R > HandlerRegistry serveQuery (String resource , QueryHandler <T , R > handler , Class <R > queryClass ) {
85
- if (queryClass == CloudEvent .class ){
86
- handlers .add (new RegisteredQueryHandler <>(resource , (ignored , message ) ->
87
- {
88
- CloudEvent query = EventFormatProvider
89
- .getInstance ()
90
- .resolveFormat (JsonFormat .CONTENT_TYPE )
91
- .deserialize (message );
99
+ public <R > HandlerRegistry serveQuery (String resource , QueryHandlerDelegate <Void , R > handler , Class <R > queryClass ) {
100
+ handlers .add (new RegisteredQueryHandler <>(resource , handler , queryClass ));
101
+ return this ;
102
+ }
92
103
93
- return handler .handle ((R ) query );
104
+ public <R > HandlerRegistry serveCloudEventQuery (String resource , QueryHandler <R , CloudEvent > handler ) {
105
+ handlers .add (new RegisteredQueryHandler <>(resource , (ignored , message ) -> handler .handle (message ), CloudEvent .class ));
106
+ return this ;
107
+ }
94
108
95
- } , byte [].class ));
96
- }
97
- else {
98
- handlers .add (new RegisteredQueryHandler <>(resource , (ignored , message ) -> handler .handle (message ), queryClass ));
99
- }
109
+ public <R > HandlerRegistry serveCloudEventQuery (String resource , QueryHandlerDelegate <Void , CloudEvent > handler ) {
110
+ handlers .add (new RegisteredQueryHandler <>(resource , handler , CloudEvent .class ));
100
111
return this ;
101
112
}
102
113
103
- public <R > HandlerRegistry serveQuery (String resource , QueryHandlerDelegate <Void , R > handler , Class <R > queryClass ) {
104
- handlers .add (new RegisteredQueryHandler <>(resource , handler , queryClass ));
114
+
115
+ @ Deprecated (forRemoval = true )
116
+ public <T > HandlerRegistry listenEvent (String eventName , DomainEventHandler <T > handler ) {
117
+ return listenEvent (eventName , handler , inferGenericParameterType (handler ));
118
+ }
119
+
120
+ @ Deprecated (forRemoval = true )
121
+ public <T > HandlerRegistry handleDynamicEvents (String eventNamePattern , DomainEventHandler <T > handler ) {
122
+ return handleDynamicEvents (eventNamePattern , handler , inferGenericParameterType (handler ));
123
+ }
124
+
125
+ @ Deprecated (forRemoval = true )
126
+ public <T > HandlerRegistry handleCommand (String commandName , DomainCommandHandler <T > handler ) {
127
+ commandHandlers .add (new RegisteredCommandHandler <>(commandName , handler , inferGenericParameterType (handler )));
105
128
return this ;
106
129
}
107
130
131
+ @ Deprecated (forRemoval = true )
132
+ public <T , R > HandlerRegistry serveQuery (String resource , QueryHandler <T , R > handler ) {
133
+ return serveQuery (resource , handler , inferGenericParameterType (handler ));
134
+ }
108
135
136
+ @ Deprecated (forRemoval = true )
109
137
@ SuppressWarnings ("unchecked" )
110
138
private <T , R > Class <R > inferGenericParameterType (QueryHandler <T , R > handler ) {
111
139
try {
@@ -117,8 +145,9 @@ private <T, R> Class<R> inferGenericParameterType(QueryHandler<T, R> handler) {
117
145
}
118
146
}
119
147
148
+ @ Deprecated (forRemoval = true )
120
149
@ SuppressWarnings ("unchecked" )
121
- private <T > Class <T > inferGenericParameterType (CommandHandler <T > handler ) {
150
+ private <T > Class <T > inferGenericParameterType (DomainCommandHandler <T > handler ) {
122
151
try {
123
152
ParameterizedType genericSuperclass = (ParameterizedType ) handler .getClass ().getGenericInterfaces ()[0 ];
124
153
return (Class <T >) genericSuperclass .getActualTypeArguments ()[0 ];
@@ -128,7 +157,8 @@ private <T> Class<T> inferGenericParameterType(CommandHandler<T> handler) {
128
157
}
129
158
}
130
159
131
- private <T > Class <T > inferGenericParameterType (EventHandler <T > handler ) {
160
+ @ Deprecated (forRemoval = true )
161
+ private <T > Class <T > inferGenericParameterType (DomainEventHandler <T > handler ) {
132
162
try {
133
163
ParameterizedType genericSuperclass = (ParameterizedType ) handler .getClass ().getGenericInterfaces ()[0 ];
134
164
return (Class <T >) genericSuperclass .getActualTypeArguments ()[0 ];
0 commit comments