11/****************************************************************************
2- * Copyright 2016-2020 , Optimizely, Inc. and contributors *
2+ * Copyright 2016-2021 , Optimizely, Inc. and contributors *
33 * *
44 * Licensed under the Apache License, Version 2.0 (the "License"); *
55 * you may not use this file except in compliance with the License. *
3434import com .optimizely .ab .optimizelyconfig .OptimizelyConfig ;
3535import com .optimizely .ab .optimizelyconfig .OptimizelyConfigManager ;
3636import com .optimizely .ab .optimizelyconfig .OptimizelyConfigService ;
37- import com .optimizely .ab .optimizelydecision .DecisionMessage ;
38- import com .optimizely .ab .optimizelydecision .DecisionReasons ;
39- import com .optimizely .ab .optimizelydecision .DefaultDecisionReasons ;
40- import com .optimizely .ab .optimizelydecision .OptimizelyDecideOption ;
41- import com .optimizely .ab .optimizelydecision .OptimizelyDecision ;
37+ import com .optimizely .ab .optimizelydecision .*;
4238import com .optimizely .ab .optimizelyjson .OptimizelyJSON ;
4339import org .slf4j .Logger ;
4440import org .slf4j .LoggerFactory ;
@@ -427,7 +423,7 @@ private Boolean isFeatureEnabled(@Nonnull ProjectConfig projectConfig,
427423
428424 Map <String , ?> copiedAttributes = copyAttributes (attributes );
429425 FeatureDecision .DecisionSource decisionSource = FeatureDecision .DecisionSource .ROLLOUT ;
430- FeatureDecision featureDecision = decisionService .getVariationForFeature (featureFlag , userId , copiedAttributes , projectConfig );
426+ FeatureDecision featureDecision = decisionService .getVariationForFeature (featureFlag , userId , copiedAttributes , projectConfig ). getResult () ;
431427 Boolean featureEnabled = false ;
432428 SourceInfo sourceInfo = new RolloutSourceInfo ();
433429 if (featureDecision .decisionSource != null ) {
@@ -736,7 +732,7 @@ <T> T getFeatureVariableValueForType(@Nonnull String featureKey,
736732
737733 String variableValue = variable .getDefaultValue ();
738734 Map <String , ?> copiedAttributes = copyAttributes (attributes );
739- FeatureDecision featureDecision = decisionService .getVariationForFeature (featureFlag , userId , copiedAttributes , projectConfig );
735+ FeatureDecision featureDecision = decisionService .getVariationForFeature (featureFlag , userId , copiedAttributes , projectConfig ). getResult () ;
740736 Boolean featureEnabled = false ;
741737 if (featureDecision .variation != null ) {
742738 if (featureDecision .variation .getFeatureEnabled ()) {
@@ -869,7 +865,7 @@ public OptimizelyJSON getAllFeatureVariables(@Nonnull String featureKey,
869865 }
870866
871867 Map <String , ?> copiedAttributes = copyAttributes (attributes );
872- FeatureDecision featureDecision = decisionService .getVariationForFeature (featureFlag , userId , copiedAttributes , projectConfig );
868+ FeatureDecision featureDecision = decisionService .getVariationForFeature (featureFlag , userId , copiedAttributes , projectConfig ). getResult () ;
873869 Boolean featureEnabled = false ;
874870 Variation variation = featureDecision .variation ;
875871
@@ -970,7 +966,7 @@ private Variation getVariation(@Nonnull ProjectConfig projectConfig,
970966 @ Nonnull String userId ,
971967 @ Nonnull Map <String , ?> attributes ) throws UnknownExperimentException {
972968 Map <String , ?> copiedAttributes = copyAttributes (attributes );
973- Variation variation = decisionService .getVariation (experiment , userId , copiedAttributes , projectConfig );
969+ Variation variation = decisionService .getVariation (experiment , userId , copiedAttributes , projectConfig ). getResult () ;
974970
975971 String notificationType = NotificationCenter .DecisionNotificationType .AB_TEST .toString ();
976972
@@ -1084,7 +1080,7 @@ public Variation getForcedVariation(@Nonnull String experimentKey,
10841080 return null ;
10851081 }
10861082
1087- return decisionService .getForcedVariation (experiment , userId );
1083+ return decisionService .getForcedVariation (experiment , userId ). getResult () ;
10881084 }
10891085
10901086 /**
@@ -1182,13 +1178,14 @@ OptimizelyDecision decide(@Nonnull OptimizelyUserContext user,
11821178 DecisionReasons decisionReasons = DefaultDecisionReasons .newInstance (allOptions );
11831179
11841180 Map <String , ?> copiedAttributes = new HashMap <>(attributes );
1185- FeatureDecision flagDecision = decisionService .getVariationForFeature (
1181+ DecisionResponse < FeatureDecision > decisionVariation = decisionService .getVariationForFeature (
11861182 flag ,
11871183 userId ,
11881184 copiedAttributes ,
11891185 projectConfig ,
1190- allOptions ,
1191- decisionReasons );
1186+ allOptions );
1187+ FeatureDecision flagDecision = decisionVariation .getResult ();
1188+ decisionReasons .merge (decisionVariation .getReasons ());
11921189
11931190 Boolean flagEnabled = false ;
11941191 if (flagDecision .variation != null ) {
@@ -1200,11 +1197,12 @@ OptimizelyDecision decide(@Nonnull OptimizelyUserContext user,
12001197
12011198 Map <String , Object > variableMap = new HashMap <>();
12021199 if (!allOptions .contains (OptimizelyDecideOption .EXCLUDE_VARIABLES )) {
1203- variableMap = getDecisionVariableMap (
1200+ DecisionResponse < Map < String , Object >> decisionVariables = getDecisionVariableMap (
12041201 flag ,
12051202 flagDecision .variation ,
1206- flagEnabled ,
1207- decisionReasons );
1203+ flagEnabled );
1204+ variableMap = decisionVariables .getResult ();
1205+ decisionReasons .merge (decisionVariables .getReasons ());
12081206 }
12091207 OptimizelyJSON optimizelyJSON = new OptimizelyJSON (variableMap );
12101208
@@ -1305,10 +1303,12 @@ private List<OptimizelyDecideOption> getAllOptions(List<OptimizelyDecideOption>
13051303 return copiedOptions ;
13061304 }
13071305
1308- private Map <String , Object > getDecisionVariableMap (@ Nonnull FeatureFlag flag ,
1309- @ Nonnull Variation variation ,
1310- @ Nonnull Boolean featureEnabled ,
1311- @ Nonnull DecisionReasons decisionReasons ) {
1306+ @ Nonnull
1307+ private DecisionResponse <Map <String , Object >> getDecisionVariableMap (@ Nonnull FeatureFlag flag ,
1308+ @ Nonnull Variation variation ,
1309+ @ Nonnull Boolean featureEnabled ) {
1310+ DecisionReasons reasons = new DecisionReasons ();
1311+
13121312 Map <String , Object > valuesMap = new HashMap <String , Object >();
13131313 for (FeatureVariable variable : flag .getVariables ()) {
13141314 String value = variable .getDefaultValue ();
@@ -1321,15 +1321,15 @@ private Map<String, Object> getDecisionVariableMap(@Nonnull FeatureFlag flag,
13211321
13221322 Object convertedValue = convertStringToType (value , variable .getType ());
13231323 if (convertedValue == null ) {
1324- decisionReasons .addError (DecisionMessage .VARIABLE_VALUE_INVALID .reason (variable .getKey ()));
1324+ reasons .addError (DecisionMessage .VARIABLE_VALUE_INVALID .reason (variable .getKey ()));
13251325 } else if (convertedValue instanceof OptimizelyJSON ) {
13261326 convertedValue = ((OptimizelyJSON ) convertedValue ).toMap ();
13271327 }
13281328
13291329 valuesMap .put (variable .getKey (), convertedValue );
13301330 }
13311331
1332- return valuesMap ;
1332+ return new DecisionResponse ( valuesMap , reasons ) ;
13331333 }
13341334
13351335 /**
0 commit comments