@@ -113,7 +113,8 @@ public DecisionResponse<Variation> getVariation(@Nonnull Experiment experiment,
113113 @ Nonnull ProjectConfig projectConfig ,
114114 @ Nonnull List <OptimizelyDecideOption > options ,
115115 @ Nullable UserProfileTracker userProfileTracker ,
116- @ Nullable DecisionReasons reasons ) {
116+ @ Nullable DecisionReasons reasons ,
117+ @ Nonnull boolean useCmab ) {
117118 if (reasons == null ) {
118119 reasons = DefaultDecisionReasons .newInstance ();
119120 }
@@ -155,7 +156,7 @@ public DecisionResponse<Variation> getVariation(@Nonnull Experiment experiment,
155156 if (decisionMeetAudience .getResult ()) {
156157 String bucketingId = getBucketingId (user .getUserId (), user .getAttributes ());
157158 String cmabUUID = null ;
158- if (isCmabExperiment (experiment )) {
159+ if (useCmab && isCmabExperiment (experiment )) {
159160 DecisionResponse <CmabDecision > cmabDecision = getDecisionForCmabExperiment (projectConfig , experiment , user , bucketingId , options );
160161 reasons .merge (cmabDecision .getReasons ());
161162
@@ -205,7 +206,8 @@ public DecisionResponse<Variation> getVariation(@Nonnull Experiment experiment,
205206 public DecisionResponse <Variation > getVariation (@ Nonnull Experiment experiment ,
206207 @ Nonnull OptimizelyUserContext user ,
207208 @ Nonnull ProjectConfig projectConfig ,
208- @ Nonnull List <OptimizelyDecideOption > options ) {
209+ @ Nonnull List <OptimizelyDecideOption > options ,
210+ @ Nonnull boolean useCmab ) {
209211 DecisionReasons reasons = DefaultDecisionReasons .newInstance ();
210212
211213 // fetch the user profile map from the user profile service
@@ -217,7 +219,7 @@ public DecisionResponse<Variation> getVariation(@Nonnull Experiment experiment,
217219 userProfileTracker .loadUserProfile (reasons , errorHandler );
218220 }
219221
220- DecisionResponse <Variation > response = getVariation (experiment , user , projectConfig , options , userProfileTracker , reasons );
222+ DecisionResponse <Variation > response = getVariation (experiment , user , projectConfig , options , userProfileTracker , reasons , useCmab );
221223
222224 if (userProfileService != null && !ignoreUPS ) {
223225 userProfileTracker .saveUserProfile (errorHandler );
@@ -229,7 +231,7 @@ public DecisionResponse<Variation> getVariation(@Nonnull Experiment experiment,
229231 public DecisionResponse <Variation > getVariation (@ Nonnull Experiment experiment ,
230232 @ Nonnull OptimizelyUserContext user ,
231233 @ Nonnull ProjectConfig projectConfig ) {
232- return getVariation (experiment , user , projectConfig , Collections .emptyList ());
234+ return getVariation (experiment , user , projectConfig , Collections .emptyList (), true );
233235 }
234236
235237 /**
@@ -256,13 +258,33 @@ public DecisionResponse<FeatureDecision> getVariationForFeature(@Nonnull Feature
256258 * @param user The current OptimizelyuserContext
257259 * @param projectConfig The current projectConfig
258260 * @param options An array of decision options
261+ * @param useCmab Boolean field that determines whether to use cmab service
259262 * @return A {@link DecisionResponse} including a {@link FeatureDecision} and the decision reasons
260263 */
261264 @ Nonnull
262265 public List <DecisionResponse <FeatureDecision >> getVariationsForFeatureList (@ Nonnull List <FeatureFlag > featureFlags ,
263266 @ Nonnull OptimizelyUserContext user ,
264267 @ Nonnull ProjectConfig projectConfig ,
265268 @ Nonnull List <OptimizelyDecideOption > options ) {
269+ return getVariationsForFeatureList (featureFlags , user , projectConfig , options , true );
270+ }
271+
272+ /**
273+ * Get the variations the user is bucketed into for the list of feature flags
274+ *
275+ * @param featureFlags The feature flag list the user wants to access.
276+ * @param user The current OptimizelyuserContext
277+ * @param projectConfig The current projectConfig
278+ * @param options An array of decision options
279+ * @param useCmab Boolean field that determines whether to use cmab service
280+ * @return A {@link DecisionResponse} including a {@link FeatureDecision} and the decision reasons
281+ */
282+ @ Nonnull
283+ public List <DecisionResponse <FeatureDecision >> getVariationsForFeatureList (@ Nonnull List <FeatureFlag > featureFlags ,
284+ @ Nonnull OptimizelyUserContext user ,
285+ @ Nonnull ProjectConfig projectConfig ,
286+ @ Nonnull List <OptimizelyDecideOption > options ,
287+ @ Nonnull boolean useCmab ) {
266288 DecisionReasons upsReasons = DefaultDecisionReasons .newInstance ();
267289
268290 boolean ignoreUPS = options .contains (OptimizelyDecideOption .IGNORE_USER_PROFILE_SERVICE );
@@ -291,7 +313,7 @@ public List<DecisionResponse<FeatureDecision>> getVariationsForFeatureList(@Non
291313 }
292314 }
293315
294- DecisionResponse <FeatureDecision > decisionVariationResponse = getVariationFromExperiment (projectConfig , featureFlag , user , options , userProfileTracker );
316+ DecisionResponse <FeatureDecision > decisionVariationResponse = getVariationFromExperiment (projectConfig , featureFlag , user , options , userProfileTracker , useCmab );
295317 reasons .merge (decisionVariationResponse .getReasons ());
296318
297319 FeatureDecision decision = decisionVariationResponse .getResult ();
@@ -346,14 +368,15 @@ DecisionResponse<FeatureDecision> getVariationFromExperiment(@Nonnull ProjectCon
346368 @ Nonnull FeatureFlag featureFlag ,
347369 @ Nonnull OptimizelyUserContext user ,
348370 @ Nonnull List <OptimizelyDecideOption > options ,
349- @ Nullable UserProfileTracker userProfileTracker ) {
371+ @ Nullable UserProfileTracker userProfileTracker ,
372+ @ Nonnull boolean useCmab ) {
350373 DecisionReasons reasons = DefaultDecisionReasons .newInstance ();
351374 if (!featureFlag .getExperimentIds ().isEmpty ()) {
352375 for (String experimentId : featureFlag .getExperimentIds ()) {
353376 Experiment experiment = projectConfig .getExperimentIdMapping ().get (experimentId );
354377
355378 DecisionResponse <Variation > decisionVariation =
356- getVariationFromExperimentRule (projectConfig , featureFlag .getKey (), experiment , user , options , userProfileTracker );
379+ getVariationFromExperimentRule (projectConfig , featureFlag .getKey (), experiment , user , options , userProfileTracker , useCmab );
357380 reasons .merge (decisionVariation .getReasons ());
358381 Variation variation = decisionVariation .getResult ();
359382 String cmabUUID = decisionVariation .getCmabUUID ();
@@ -776,7 +799,8 @@ private DecisionResponse<Variation> getVariationFromExperimentRule(@Nonnull Proj
776799 @ Nonnull Experiment rule ,
777800 @ Nonnull OptimizelyUserContext user ,
778801 @ Nonnull List <OptimizelyDecideOption > options ,
779- @ Nullable UserProfileTracker userProfileTracker ) {
802+ @ Nullable UserProfileTracker userProfileTracker ,
803+ @ Nonnull boolean useCmab ) {
780804 DecisionReasons reasons = DefaultDecisionReasons .newInstance ();
781805
782806 String ruleKey = rule != null ? rule .getKey () : null ;
@@ -791,7 +815,7 @@ private DecisionResponse<Variation> getVariationFromExperimentRule(@Nonnull Proj
791815 return new DecisionResponse (variation , reasons );
792816 }
793817 //regular decision
794- DecisionResponse <Variation > decisionResponse = getVariation (rule , user , projectConfig , options , userProfileTracker , null );
818+ DecisionResponse <Variation > decisionResponse = getVariation (rule , user , projectConfig , options , userProfileTracker , null , useCmab );
795819 reasons .merge (decisionResponse .getReasons ());
796820
797821 variation = decisionResponse .getResult ();
0 commit comments