Skip to content

Commit 7d89d52

Browse files
committed
rename wrapper class, add public facing methods
Signed-off-by: christian.lutnik <[email protected]>
1 parent 2a2184b commit 7d89d52

File tree

7 files changed

+43
-22
lines changed

7 files changed

+43
-22
lines changed

src/main/java/dev/openfeature/sdk/EventProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ public boolean equals(Object obj) {
108108
if (obj == null) {
109109
return false;
110110
}
111-
if (obj instanceof FeatureProviderWrapper) {
112-
return this == ((FeatureProviderWrapper) obj).getDelegate();
111+
if (obj instanceof StatefulFeatureProvider) {
112+
return this == ((StatefulFeatureProvider) obj).getDelegate();
113113
}
114114
return this == obj;
115115
}

src/main/java/dev/openfeature/sdk/NoOpProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ public boolean equals(Object obj) {
7272
if (obj == null) {
7373
return false;
7474
}
75-
if (obj instanceof FeatureProviderWrapper) {
76-
return ((FeatureProviderWrapper) obj).getDelegate() == this;
75+
if (obj instanceof StatefulFeatureProvider) {
76+
return ((StatefulFeatureProvider) obj).getDelegate() == this;
7777
}
7878
return obj == this;
7979
}

src/main/java/dev/openfeature/sdk/OpenFeatureAPI.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,10 @@ public ProviderState getProviderState(String domain) {
303303
return providerRepository.getProviderState(domain);
304304
}
305305

306+
public ProviderState getProviderState(FeatureProvider provider) {
307+
return providerRepository.getProviderState(provider);
308+
}
309+
306310
/**
307311
* Adds hooks for globally, used for all evaluations.
308312
* Hooks are run in the order they're added in the before stage. They are run in reverse order for all other stages.

src/main/java/dev/openfeature/sdk/ProviderRepository.java

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
@Slf4j
2121
class 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
}

src/main/java/dev/openfeature/sdk/FeatureProviderWrapper.java renamed to src/main/java/dev/openfeature/sdk/StatefulFeatureProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import java.util.concurrent.atomic.AtomicBoolean;
77

8-
class FeatureProviderWrapper implements FeatureProvider, EventProviderListener {
8+
class StatefulFeatureProvider implements FeatureProvider, EventProviderListener {
99

1010
private interface ExcludeFromDelegate {
1111
void initialize(EvaluationContext evaluationContext) throws Exception;
@@ -20,7 +20,7 @@ private interface ExcludeFromDelegate {
2020
private final AtomicBoolean isInitialized = new AtomicBoolean();
2121
private ProviderState state = ProviderState.NOT_READY;
2222

23-
public FeatureProviderWrapper(FeatureProvider delegate) {
23+
public StatefulFeatureProvider(FeatureProvider delegate) {
2424
this.delegate = delegate;
2525
if (delegate instanceof EventProvider) {
2626
((EventProvider) delegate).setEventProviderListener(this);
@@ -72,8 +72,8 @@ public boolean equals(Object obj) {
7272
if (this == obj) {
7373
return true;
7474
}
75-
if (obj instanceof FeatureProviderWrapper) {
76-
return delegate.equals(((FeatureProviderWrapper) obj).delegate);
75+
if (obj instanceof StatefulFeatureProvider) {
76+
return delegate.equals(((StatefulFeatureProvider) obj).delegate);
7777
}
7878
return delegate.equals(obj);
7979
}

src/test/java/dev/openfeature/sdk/ProviderRepositoryTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import dev.openfeature.sdk.exceptions.OpenFeatureError;
44
import dev.openfeature.sdk.testutils.exception.TestException;
5-
import lombok.SneakyThrows;
65
import org.junit.jupiter.api.BeforeEach;
76
import org.junit.jupiter.api.DisplayName;
87
import org.junit.jupiter.api.Nested;
@@ -56,7 +55,7 @@ void shouldRejectNullAsDefaultProvider() {
5655
@Test
5756
@DisplayName("should have NoOpProvider set as default on initialization")
5857
void shouldHaveNoOpProviderSetAsDefaultOnInitialization() {
59-
assertThat(((FeatureProviderWrapper)providerRepository.getProvider()).getDelegate())
58+
assertThat(((StatefulFeatureProvider)providerRepository.getProvider()).getDelegate())
6059
.isInstanceOf(NoOpProvider.class);
6160
}
6261

src/test/java/dev/openfeature/sdk/FeatureProviderWrapperTest.java renamed to src/test/java/dev/openfeature/sdk/StatefulFeatureProviderTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
import static org.assertj.core.api.Assertions.assertThat;
1313
import static org.junit.jupiter.api.Assertions.assertThrows;
1414

15-
class FeatureProviderWrapperTest {
15+
class StatefulFeatureProviderTest {
1616

17-
private FeatureProviderWrapper wrapper;
17+
private StatefulFeatureProvider wrapper;
1818
private TestDelegate testDelegate;
1919

2020
@BeforeEach
2121
public void setUp() {
2222
testDelegate = new TestDelegate();
23-
wrapper = new FeatureProviderWrapper(testDelegate);
23+
wrapper = new StatefulFeatureProvider(testDelegate);
2424
}
2525

2626
@SuppressWarnings("java:S5845")

0 commit comments

Comments
 (0)