-
Notifications
You must be signed in to change notification settings - Fork 68
/
FeatureToggleRepository.java
87 lines (75 loc) · 3.07 KB
/
FeatureToggleRepository.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package io.getunleash.repository;
import io.getunleash.FeatureToggle;
import io.getunleash.UnleashException;
import io.getunleash.event.EventDispatcher;
import io.getunleash.event.UnleashReady;
import io.getunleash.lang.Nullable;
import io.getunleash.util.UnleashConfig;
import io.getunleash.util.UnleashScheduledExecutor;
import java.util.List;
import java.util.stream.Collectors;
@Deprecated() // Use FeatureRepository instead
public final class FeatureToggleRepository implements ToggleRepository {
private final BackupHandler<ToggleCollection> toggleBackupHandler;
private final ToggleBootstrapHandler toggleBootstrapHandler;
private final ToggleFetcher toggleFetcher;
private final EventDispatcher eventDispatcher;
private ToggleCollection toggleCollection;
private boolean ready;
public FeatureToggleRepository(
UnleashConfig unleashConfig,
ToggleFetcher toggleFetcher,
BackupHandler<ToggleCollection> toggleBackupHandler) {
this(
unleashConfig,
unleashConfig.getScheduledExecutor(),
toggleFetcher,
toggleBackupHandler);
}
public FeatureToggleRepository(
UnleashConfig unleashConfig,
UnleashScheduledExecutor executor,
ToggleFetcher toggleFetcher,
BackupHandler<ToggleCollection> toggleBackupHandler) {
this.toggleBackupHandler = toggleBackupHandler;
this.toggleFetcher = toggleFetcher;
this.eventDispatcher = new EventDispatcher(unleashConfig);
this.toggleBootstrapHandler = new ToggleBootstrapHandler(unleashConfig);
this.toggleCollection = toggleBackupHandler.read();
if (this.toggleCollection.getFeatures().isEmpty()) {
this.toggleCollection = toggleBootstrapHandler.read();
}
if (unleashConfig.isSynchronousFetchOnInitialisation()) {
updateToggles().run();
}
executor.setInterval(updateToggles(), 0, unleashConfig.getFetchTogglesInterval());
}
private Runnable updateToggles() {
return () -> {
try {
FeatureToggleResponse response = toggleFetcher.fetchToggles();
eventDispatcher.dispatch(response);
if (response.getStatus() == FeatureToggleResponse.Status.CHANGED) {
toggleCollection = response.getToggleCollection();
toggleBackupHandler.write(response.getToggleCollection());
}
if (!ready) {
eventDispatcher.dispatch(new UnleashReady());
ready = true;
}
} catch (UnleashException e) {
eventDispatcher.dispatch(e);
}
};
}
@Override
public @Nullable FeatureToggle getToggle(String name) {
return toggleCollection.getToggle(name);
}
@Override
public List<String> getFeatureNames() {
return toggleCollection.getFeatures().stream()
.map(FeatureToggle::getName)
.collect(Collectors.toList());
}
}