2929import com .optimizely .ab .event .internal .payload .EventBatch ;
3030import com .optimizely .ab .notification .*;
3131import com .optimizely .ab .optimizelyconfig .OptimizelyConfig ;
32+ import com .optimizely .ab .optimizelyconfig .OptimizelyConfigManager ;
3233import com .optimizely .ab .optimizelyconfig .OptimizelyConfigService ;
3334import org .slf4j .Logger ;
3435import org .slf4j .LoggerFactory ;
@@ -87,6 +88,9 @@ public class Optimizely implements AutoCloseable {
8788
8889 private final ProjectConfigManager projectConfigManager ;
8990
91+ @ Nullable
92+ private final OptimizelyConfigManager optimizelyConfigManager ;
93+
9094 // TODO should be private
9195 public final NotificationCenter notificationCenter ;
9296
@@ -99,6 +103,7 @@ private Optimizely(@Nonnull EventHandler eventHandler,
99103 @ Nonnull DecisionService decisionService ,
100104 @ Nullable UserProfileService userProfileService ,
101105 @ Nonnull ProjectConfigManager projectConfigManager ,
106+ @ Nullable OptimizelyConfigManager optimizelyConfigManager ,
102107 @ Nonnull NotificationCenter notificationCenter
103108 ) {
104109 this .eventHandler = eventHandler ;
@@ -107,6 +112,7 @@ private Optimizely(@Nonnull EventHandler eventHandler,
107112 this .decisionService = decisionService ;
108113 this .userProfileService = userProfileService ;
109114 this .projectConfigManager = projectConfigManager ;
115+ this .optimizelyConfigManager = optimizelyConfigManager ;
110116 this .notificationCenter = notificationCenter ;
111117 }
112118
@@ -884,20 +890,6 @@ public Variation getForcedVariation(@Nonnull String experimentKey,
884890 return decisionService .getForcedVariation (experiment , userId );
885891 }
886892
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-
901893 /**
902894 * @return the current {@link ProjectConfig} instance.
903895 */
@@ -928,6 +920,25 @@ private boolean validateUserId(String userId) {
928920 return true ;
929921 }
930922
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+
931942 /**
932943 * Helper method which makes separate copy of attributesMap variable and returns it
933944 *
@@ -1029,6 +1040,7 @@ public static class Builder {
10291040 private EventProcessor eventProcessor ;
10301041 private ProjectConfig projectConfig ;
10311042 private ProjectConfigManager projectConfigManager ;
1043+ private OptimizelyConfigManager optimizelyConfigManager ;
10321044 private UserProfileService userProfileService ;
10331045 private NotificationCenter notificationCenter ;
10341046
@@ -1155,6 +1167,12 @@ public Optimizely build() {
11551167 projectConfigManager = fallbackConfigManager ;
11561168 }
11571169
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+
11581176 if (notificationCenter == null ) {
11591177 notificationCenter = new NotificationCenter ();
11601178 }
@@ -1164,7 +1182,7 @@ public Optimizely build() {
11641182 eventProcessor = new ForwardingEventProcessor (eventHandler , notificationCenter );
11651183 }
11661184
1167- return new Optimizely (eventHandler , eventProcessor , errorHandler , decisionService , userProfileService , projectConfigManager , notificationCenter );
1185+ return new Optimizely (eventHandler , eventProcessor , errorHandler , decisionService , userProfileService , projectConfigManager , optimizelyConfigManager , notificationCenter );
11681186 }
11691187 }
11701188}
0 commit comments