11package dev .openfeature .sdk ;
22
3- import java .util .ArrayList ;
4- import java .util .List ;
3+ import java .util .Collection ;
54import java .util .Map ;
65import java .util .Optional ;
76import java .util .Set ;
87import java .util .UUID ;
98import java .util .concurrent .ConcurrentHashMap ;
9+ import java .util .concurrent .ConcurrentLinkedQueue ;
1010import java .util .concurrent .ExecutorService ;
1111import java .util .concurrent .Executors ;
1212import java .util .concurrent .TimeUnit ;
@@ -23,13 +23,10 @@ class EventSupport {
2323
2424 // we use a v4 uuid as a "placeholder" for anonymous clients, since
2525 // ConcurrentHashMap doesn't support nulls
26- private static final String defaultClientUuid = UUID .randomUUID ().toString ();
26+ private static final String DEFAULT_CLIENT_UUID = UUID .randomUUID ().toString ();
2727 private final Map <String , HandlerStore > handlerStores = new ConcurrentHashMap <>();
2828 private final HandlerStore globalHandlerStore = new HandlerStore ();
29- private final ExecutorService taskExecutor = Executors .newCachedThreadPool (runnable -> {
30- final Thread thread = new Thread (runnable );
31- return thread ;
32- });
29+ private final ExecutorService taskExecutor = Executors .newCachedThreadPool ();
3330
3431 /**
3532 * Run all the event handlers associated with this domain.
@@ -40,11 +37,10 @@ class EventSupport {
4037 * @param eventDetails the event details
4138 */
4239 public void runClientHandlers (String domain , ProviderEvent event , EventDetails eventDetails ) {
43- domain = Optional .ofNullable (domain ).orElse (defaultClientUuid );
40+ domain = Optional .ofNullable (domain ).orElse (DEFAULT_CLIENT_UUID );
4441
4542 // run handlers if they exist
4643 Optional .ofNullable (handlerStores .get (domain ))
47- .filter (store -> Optional .of (store ).isPresent ())
4844 .map (store -> store .handlerMap .get (event ))
4945 .ifPresent (handlers -> handlers .forEach (handler -> runHandler (handler , eventDetails )));
5046 }
@@ -69,7 +65,7 @@ public void runGlobalHandlers(ProviderEvent event, EventDetails eventDetails) {
6965 * @param handler the handler function to run
7066 */
7167 public void addClientHandler (String domain , ProviderEvent event , Consumer <EventDetails > handler ) {
72- final String name = Optional .ofNullable (domain ).orElse (defaultClientUuid );
68+ final String name = Optional .ofNullable (domain ).orElse (DEFAULT_CLIENT_UUID );
7369
7470 // lazily create and cache a HandlerStore if it doesn't exist
7571 HandlerStore store = Optional .ofNullable (this .handlerStores .get (name )).orElseGet (() -> {
@@ -89,7 +85,7 @@ public void addClientHandler(String domain, ProviderEvent event, Consumer<EventD
8985 * @param handler the handler ref to be removed
9086 */
9187 public void removeClientHandler (String domain , ProviderEvent event , Consumer <EventDetails > handler ) {
92- domain = Optional .ofNullable (domain ).orElse (defaultClientUuid );
88+ domain = Optional .ofNullable (domain ).orElse (DEFAULT_CLIENT_UUID );
9389 this .handlerStores .get (domain ).removeHandler (event , handler );
9490 }
9591
@@ -160,14 +156,14 @@ public void shutdown() {
160156 // instantiated when a handler is added to that client.
161157 static class HandlerStore {
162158
163- private final Map <ProviderEvent , List <Consumer <EventDetails >>> handlerMap ;
159+ private final Map <ProviderEvent , Collection <Consumer <EventDetails >>> handlerMap ;
164160
165161 HandlerStore () {
166162 handlerMap = new ConcurrentHashMap <>();
167- handlerMap .put (ProviderEvent .PROVIDER_READY , new ArrayList <>());
168- handlerMap .put (ProviderEvent .PROVIDER_CONFIGURATION_CHANGED , new ArrayList <>());
169- handlerMap .put (ProviderEvent .PROVIDER_ERROR , new ArrayList <>());
170- handlerMap .put (ProviderEvent .PROVIDER_STALE , new ArrayList <>());
163+ handlerMap .put (ProviderEvent .PROVIDER_READY , new ConcurrentLinkedQueue <>());
164+ handlerMap .put (ProviderEvent .PROVIDER_CONFIGURATION_CHANGED , new ConcurrentLinkedQueue <>());
165+ handlerMap .put (ProviderEvent .PROVIDER_ERROR , new ConcurrentLinkedQueue <>());
166+ handlerMap .put (ProviderEvent .PROVIDER_STALE , new ConcurrentLinkedQueue <>());
171167 }
172168
173169 void addHandler (ProviderEvent event , Consumer <EventDetails > handler ) {
0 commit comments