29
29
import com .optimizely .ab .event .internal .payload .EventBatch ;
30
30
import com .optimizely .ab .notification .*;
31
31
import com .optimizely .ab .optimizelyconfig .OptimizelyConfig ;
32
+ import com .optimizely .ab .optimizelyconfig .OptimizelyConfigManager ;
32
33
import com .optimizely .ab .optimizelyconfig .OptimizelyConfigService ;
33
34
import org .slf4j .Logger ;
34
35
import org .slf4j .LoggerFactory ;
@@ -87,6 +88,9 @@ public class Optimizely implements AutoCloseable {
87
88
88
89
private final ProjectConfigManager projectConfigManager ;
89
90
91
+ @ Nullable
92
+ private final OptimizelyConfigManager optimizelyConfigManager ;
93
+
90
94
// TODO should be private
91
95
public final NotificationCenter notificationCenter ;
92
96
@@ -99,6 +103,7 @@ private Optimizely(@Nonnull EventHandler eventHandler,
99
103
@ Nonnull DecisionService decisionService ,
100
104
@ Nullable UserProfileService userProfileService ,
101
105
@ Nonnull ProjectConfigManager projectConfigManager ,
106
+ @ Nullable OptimizelyConfigManager optimizelyConfigManager ,
102
107
@ Nonnull NotificationCenter notificationCenter
103
108
) {
104
109
this .eventHandler = eventHandler ;
@@ -107,6 +112,7 @@ private Optimizely(@Nonnull EventHandler eventHandler,
107
112
this .decisionService = decisionService ;
108
113
this .userProfileService = userProfileService ;
109
114
this .projectConfigManager = projectConfigManager ;
115
+ this .optimizelyConfigManager = optimizelyConfigManager ;
110
116
this .notificationCenter = notificationCenter ;
111
117
}
112
118
@@ -884,20 +890,6 @@ public Variation getForcedVariation(@Nonnull String experimentKey,
884
890
return decisionService .getForcedVariation (experiment , userId );
885
891
}
886
892
887
- /**
888
- * Get {@link OptimizelyConfig} containing experiments and features map
889
- *
890
- * @return {@link OptimizelyConfig}
891
- */
892
- public OptimizelyConfig getOptimizelyConfig () {
893
- ProjectConfig projectConfig = getProjectConfig ();
894
- if (projectConfig == null ) {
895
- logger .error ("Optimizely instance is not valid, failing getOptimizelyConfig call." );
896
- return null ;
897
- }
898
- return new OptimizelyConfigService (projectConfig ).getConfig ();
899
- }
900
-
901
893
/**
902
894
* @return the current {@link ProjectConfig} instance.
903
895
*/
@@ -928,6 +920,25 @@ private boolean validateUserId(String userId) {
928
920
return true ;
929
921
}
930
922
923
+ /**
924
+ * Get {@link OptimizelyConfig} containing experiments and features map
925
+ *
926
+ * @return {@link OptimizelyConfig}
927
+ */
928
+ public OptimizelyConfig getOptimizelyConfig () {
929
+ ProjectConfig projectConfig = getProjectConfig ();
930
+ if (projectConfig == null ) {
931
+ logger .error ("Optimizely instance is not valid, failing getOptimizelyConfig call." );
932
+ return null ;
933
+ }
934
+ if (optimizelyConfigManager != null ) {
935
+ return optimizelyConfigManager .getOptimizelyConfig ();
936
+ }
937
+ // Generate and return a new OptimizelyConfig object as a fallback when consumer implements their own ProjectConfigManager without implementing OptimizelyConfigManager.
938
+ logger .debug ("optimizelyConfigManager is null, generating new OptimizelyConfigObject as a fallback" );
939
+ return new OptimizelyConfigService (projectConfig ).getConfig ();
940
+ }
941
+
931
942
/**
932
943
* Helper method which makes separate copy of attributesMap variable and returns it
933
944
*
@@ -1029,6 +1040,7 @@ public static class Builder {
1029
1040
private EventProcessor eventProcessor ;
1030
1041
private ProjectConfig projectConfig ;
1031
1042
private ProjectConfigManager projectConfigManager ;
1043
+ private OptimizelyConfigManager optimizelyConfigManager ;
1032
1044
private UserProfileService userProfileService ;
1033
1045
private NotificationCenter notificationCenter ;
1034
1046
@@ -1155,6 +1167,12 @@ public Optimizely build() {
1155
1167
projectConfigManager = fallbackConfigManager ;
1156
1168
}
1157
1169
1170
+ // PollingProjectConfigManager now also implements OptimizelyConfigManager interface to support OptimizelyConfig API.
1171
+ // This check is needed in case a consumer provides their own ProjectConfigManager which does nt implement OptimizelyConfigManager interface
1172
+ if (projectConfigManager instanceof OptimizelyConfigManager ) {
1173
+ optimizelyConfigManager = (OptimizelyConfigManager ) projectConfigManager ;
1174
+ }
1175
+
1158
1176
if (notificationCenter == null ) {
1159
1177
notificationCenter = new NotificationCenter ();
1160
1178
}
@@ -1164,7 +1182,7 @@ public Optimizely build() {
1164
1182
eventProcessor = new ForwardingEventProcessor (eventHandler , notificationCenter );
1165
1183
}
1166
1184
1167
- return new Optimizely (eventHandler , eventProcessor , errorHandler , decisionService , userProfileService , projectConfigManager , notificationCenter );
1185
+ return new Optimizely (eventHandler , eventProcessor , errorHandler , decisionService , userProfileService , projectConfigManager , optimizelyConfigManager , notificationCenter );
1168
1186
}
1169
1187
}
1170
1188
}
0 commit comments