diff --git a/core-api/src/main/java/com/optimizely/ab/OptimizelyUserContext.java b/core-api/src/main/java/com/optimizely/ab/OptimizelyUserContext.java index 300d50d6f..55f380753 100644 --- a/core-api/src/main/java/com/optimizely/ab/OptimizelyUserContext.java +++ b/core-api/src/main/java/com/optimizely/ab/OptimizelyUserContext.java @@ -1,6 +1,6 @@ /** * - * Copyright 2020, Optimizely and contributors + * Copyright 2020-2021, Optimizely and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -61,13 +61,17 @@ public String getUserId() { } public Map getAttributes() { - return new HashMap(attributes); + return attributes; } public Optimizely getOptimizely() { return optimizely; } + public OptimizelyUserContext copy() { + return new OptimizelyUserContext(optimizely, userId, attributes); + } + /** * Set an attribute for a given key. * @@ -89,7 +93,7 @@ public void setAttribute(@Nonnull String key, @Nullable Object value) { */ public OptimizelyDecision decide(@Nonnull String key, @Nonnull List options) { - return optimizely.decide(this, key, options); + return optimizely.decide(copy(), key, options); } /** @@ -114,7 +118,7 @@ public OptimizelyDecision decide(@Nonnull String key) { */ public Map decideForKeys(@Nonnull List keys, @Nonnull List options) { - return optimizely.decideForKeys(this, keys, options); + return optimizely.decideForKeys(copy(), keys, options); } /** @@ -134,7 +138,7 @@ public Map decideForKeys(@Nonnull List keys) * @return All decision results mapped by flag keys. */ public Map decideAll(@Nonnull List options) { - return optimizely.decideAll(this, options); + return optimizely.decideAll(copy(), options); } /** diff --git a/core-api/src/main/java/com/optimizely/ab/optimizelydecision/OptimizelyDecision.java b/core-api/src/main/java/com/optimizely/ab/optimizelydecision/OptimizelyDecision.java index 201324f20..1741afbcd 100644 --- a/core-api/src/main/java/com/optimizely/ab/optimizelydecision/OptimizelyDecision.java +++ b/core-api/src/main/java/com/optimizely/ab/optimizelydecision/OptimizelyDecision.java @@ -1,6 +1,6 @@ /** * - * Copyright 2020, Optimizely and contributors + * Copyright 2020-2021, Optimizely and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,23 +26,44 @@ import java.util.List; public class OptimizelyDecision { + /** + * The variation key of the decision. This value will be null when decision making fails. + */ @Nullable private final String variationKey; + /** + * The boolean value indicating if the flag is enabled or not. + */ private final boolean enabled; + /** + * The collection of variables associated with the decision. + */ @Nonnull private final OptimizelyJSON variables; + /** + * The rule key of the decision. + */ @Nullable private final String ruleKey; + /** + * The flag key for which the decision has been made for. + */ @Nonnull private final String flagKey; + /** + * A copy of the user context for which the decision has been made for. + */ @Nonnull private final OptimizelyUserContext userContext; + /** + * An array of error/info messages describing why the decision has been made. + */ @Nonnull private List reasons;