2020@ Slf4j
2121class ProviderRepository {
2222
23- private final Map <String , FeatureProviderWrapper > providers = new ConcurrentHashMap <>();
24- private final AtomicReference <FeatureProviderWrapper > defaultProvider = new AtomicReference <>(
25- new FeatureProviderWrapper (new NoOpProvider ())
23+ private final Map <String , StatefulFeatureProvider > providers = new ConcurrentHashMap <>();
24+ private final AtomicReference <StatefulFeatureProvider > defaultProvider = new AtomicReference <>(
25+ new StatefulFeatureProvider (new NoOpProvider ())
2626 );
2727 private final ExecutorService taskExecutor = Executors .newCachedThreadPool (runnable -> {
2828 final Thread thread = new Thread (runnable );
@@ -51,6 +51,24 @@ public ProviderState getProviderState() {
5151 return defaultProvider .get ().getState ();
5252 }
5353
54+ public ProviderState getProviderState (FeatureProvider featureProvider ) {
55+ if (featureProvider instanceof StatefulFeatureProvider ) {
56+ return ((StatefulFeatureProvider ) featureProvider ).getState ();
57+ }
58+
59+ StatefulFeatureProvider defaultProvider = this .defaultProvider .get ();
60+ if (defaultProvider .equals (featureProvider )) {
61+ return defaultProvider .getState ();
62+ }
63+
64+ for (StatefulFeatureProvider wrapper : providers .values ()) {
65+ if (wrapper .equals (featureProvider )) {
66+ return wrapper .getState ();
67+ }
68+ }
69+ return null ;
70+ }
71+
5472 public ProviderState getProviderState (String domain ) {
5573 return Optional .ofNullable (domain ).map (this .providers ::get ).orElse (this .defaultProvider .get ()).getState ();
5674 }
@@ -116,15 +134,15 @@ private void prepareAndInitializeProvider(String domain,
116134 BiConsumer <FeatureProvider , OpenFeatureError > afterError ,
117135 boolean waitForInit ) {
118136
119- FeatureProviderWrapper newProviderWrapper = new FeatureProviderWrapper (newProvider );
137+ StatefulFeatureProvider newProviderWrapper = new StatefulFeatureProvider (newProvider );
120138
121139 if (!isProviderRegistered (newProvider )) {
122140 // only run afterSet if new provider is not already attached
123141 afterSet .accept (newProvider );
124142 }
125143
126144 // provider is set immediately, on this thread
127- FeatureProviderWrapper oldProvider = domain != null
145+ StatefulFeatureProvider oldProvider = domain != null
128146 ? this .providers .put (domain , newProviderWrapper )
129147 : this .defaultProvider .getAndSet (newProviderWrapper );
130148
@@ -138,11 +156,11 @@ private void prepareAndInitializeProvider(String domain,
138156 }
139157 }
140158
141- private void initializeProvider (FeatureProviderWrapper newProvider ,
159+ private void initializeProvider (StatefulFeatureProvider newProvider ,
142160 Consumer <FeatureProvider > afterInit ,
143161 Consumer <FeatureProvider > afterShutdown ,
144162 BiConsumer <FeatureProvider , OpenFeatureError > afterError ,
145- FeatureProviderWrapper oldProvider ) {
163+ StatefulFeatureProvider oldProvider ) {
146164 try {
147165 if (ProviderState .NOT_READY .equals (newProvider .getState ())) {
148166 newProvider .initialize (OpenFeatureAPI .getInstance ().getEvaluationContext ());
@@ -166,7 +184,7 @@ private void initializeProvider(FeatureProviderWrapper newProvider,
166184 }
167185 }
168186
169- private void shutDownOld (FeatureProviderWrapper oldProvider , Consumer <FeatureProvider > afterShutdown ) {
187+ private void shutDownOld (StatefulFeatureProvider oldProvider , Consumer <FeatureProvider > afterShutdown ) {
170188 if (oldProvider != null && !isProviderRegistered (oldProvider )) {
171189 shutdownProvider (oldProvider );
172190 afterShutdown .accept (oldProvider .getDelegate ());
@@ -184,7 +202,7 @@ private boolean isProviderRegistered(FeatureProvider provider) {
184202 && (this .providers .containsValue (provider ) || this .defaultProvider .get ().equals (provider ));
185203 }
186204
187- private void shutdownProvider (FeatureProviderWrapper provider ) {
205+ private void shutdownProvider (StatefulFeatureProvider provider ) {
188206 if (provider == null ) {
189207 return ;
190208 }
0 commit comments