11package org .reactivecommons .async .api ;
22
33import io .cloudevents .CloudEvent ;
4- import io .cloudevents .core .provider .EventFormatProvider ;
5- import io .cloudevents .jackson .JsonFormat ;
64import lombok .AccessLevel ;
75import lombok .Getter ;
86import 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 ;
1111import org .reactivecommons .async .api .handlers .QueryHandler ;
1212import org .reactivecommons .async .api .handlers .QueryHandlerDelegate ;
1313import org .reactivecommons .async .api .handlers .registered .RegisteredCommandHandler ;
2424@ NoArgsConstructor (access = AccessLevel .PACKAGE )
2525public class HandlerRegistry {
2626 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 <>();
3030 private final List <RegisteredQueryHandler <?, ?>> handlers = new CopyOnWriteArrayList <>();
31- private final List <RegisteredCommandHandler <?>> commandHandlers = new CopyOnWriteArrayList <>();
31+ private final List <RegisteredCommandHandler <?, ? >> commandHandlers = new CopyOnWriteArrayList <>();
3232
3333
3434 public static HandlerRegistry register () {
@@ -37,75 +37,103 @@ public static HandlerRegistry register() {
3737 return instance ;
3838 }
3939
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 ) {
4141 domainEventListeners .computeIfAbsent (domain , ignored -> new CopyOnWriteArrayList <>())
42- .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
42+ .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
4343 return this ;
4444 }
4545
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 ) {
4753 domainEventListeners .computeIfAbsent (DEFAULT_DOMAIN , ignored -> new CopyOnWriteArrayList <>())
48- .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
54+ .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
4955 return this ;
5056 }
5157
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 ;
5462 }
5563
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 ) {
5765 eventNotificationListener .add (new RegisteredEventListener <>(eventName , handler , eventClass ));
5866 return this ;
5967 }
6068
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 ) {
6275 dynamicEventHandlers .add (new RegisteredEventListener <>(eventNamePattern , handler , eventClass ));
6376 return this ;
6477 }
6578
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 ;
6882 }
6983
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 ) {
7185 commandHandlers .add (new RegisteredCommandHandler <>(commandName , fn , commandClass ));
7286 return this ;
7387 }
7488
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 ));
7791 return this ;
7892 }
7993
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 ;
8297 }
8398
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+ }
92103
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+ }
94108
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 ));
100111 return this ;
101112 }
102113
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 )));
105128 return this ;
106129 }
107130
131+ @ Deprecated (forRemoval = true )
132+ public <T , R > HandlerRegistry serveQuery (String resource , QueryHandler <T , R > handler ) {
133+ return serveQuery (resource , handler , inferGenericParameterType (handler ));
134+ }
108135
136+ @ Deprecated (forRemoval = true )
109137 @ SuppressWarnings ("unchecked" )
110138 private <T , R > Class <R > inferGenericParameterType (QueryHandler <T , R > handler ) {
111139 try {
@@ -117,8 +145,9 @@ private <T, R> Class<R> inferGenericParameterType(QueryHandler<T, R> handler) {
117145 }
118146 }
119147
148+ @ Deprecated (forRemoval = true )
120149 @ SuppressWarnings ("unchecked" )
121- private <T > Class <T > inferGenericParameterType (CommandHandler <T > handler ) {
150+ private <T > Class <T > inferGenericParameterType (DomainCommandHandler <T > handler ) {
122151 try {
123152 ParameterizedType genericSuperclass = (ParameterizedType ) handler .getClass ().getGenericInterfaces ()[0 ];
124153 return (Class <T >) genericSuperclass .getActualTypeArguments ()[0 ];
@@ -128,7 +157,8 @@ private <T> Class<T> inferGenericParameterType(CommandHandler<T> handler) {
128157 }
129158 }
130159
131- private <T > Class <T > inferGenericParameterType (EventHandler <T > handler ) {
160+ @ Deprecated (forRemoval = true )
161+ private <T > Class <T > inferGenericParameterType (DomainEventHandler <T > handler ) {
132162 try {
133163 ParameterizedType genericSuperclass = (ParameterizedType ) handler .getClass ().getGenericInterfaces ()[0 ];
134164 return (Class <T >) genericSuperclass .getActualTypeArguments ()[0 ];
0 commit comments