Skip to content

Commit e4fe788

Browse files
update: add methods to OptimizelyUserContext for decision-making without CMAB logic
1 parent a4c3f1c commit e4fe788

File tree

1 file changed

+81
-9
lines changed

1 file changed

+81
-9
lines changed

core-api/src/main/java/com/optimizely/ab/OptimizelyUserContext.java

Lines changed: 81 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,23 @@
1616
*/
1717
package com.optimizely.ab;
1818

19-
import com.optimizely.ab.config.ProjectConfig;
20-
import com.optimizely.ab.odp.ODPManager;
21-
import com.optimizely.ab.odp.ODPSegmentCallback;
22-
import com.optimizely.ab.odp.ODPSegmentOption;
23-
import com.optimizely.ab.optimizelydecision.*;
24-
import org.slf4j.Logger;
25-
import org.slf4j.LoggerFactory;
19+
import java.util.Collections;
20+
import java.util.HashMap;
21+
import java.util.LinkedList;
22+
import java.util.List;
23+
import java.util.Map;
24+
import java.util.concurrent.ConcurrentHashMap;
2625

2726
import javax.annotation.Nonnull;
2827
import javax.annotation.Nullable;
29-
import java.util.*;
30-
import java.util.concurrent.ConcurrentHashMap;
28+
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
31+
32+
import com.optimizely.ab.odp.ODPSegmentCallback;
33+
import com.optimizely.ab.odp.ODPSegmentOption;
34+
import com.optimizely.ab.optimizelydecision.OptimizelyDecideOption;
35+
import com.optimizely.ab.optimizelydecision.OptimizelyDecision;
3136

3237
public class OptimizelyUserContext {
3338
// OptimizelyForcedDecisionsKey mapped to variationKeys
@@ -197,6 +202,73 @@ public Map<String, OptimizelyDecision> decideAll() {
197202
return decideAll(Collections.emptyList());
198203
}
199204

205+
/**
206+
* Returns a decision result ({@link OptimizelyDecision}) for a given flag key and a user context,
207+
* which contains all data required to deliver the flag. This method skips CMAB logic.
208+
* @param key A flag key for which a decision will be made.
209+
* @param options A list of options for decision-making.
210+
* @return A decision result.
211+
*/
212+
public OptimizelyDecision decideWithoutCmab(@Nonnull String key,
213+
@Nonnull List<OptimizelyDecideOption> options) {
214+
return optimizely.decideWithoutCmab(copy(), key, options);
215+
}
216+
217+
/**
218+
* Returns a decision result ({@link OptimizelyDecision}) for a given flag key and a user context,
219+
* which contains all data required to deliver the flag. This method skips CMAB logic.
220+
*
221+
* @param key A flag key for which a decision will be made.
222+
* @return A decision result.
223+
*/
224+
public OptimizelyDecision decideWithoutCmab(@Nonnull String key) {
225+
return decideWithoutCmab(key, Collections.emptyList());
226+
}
227+
228+
/**
229+
* Returns a key-map of decision results ({@link OptimizelyDecision}) for multiple flag keys and a user context.
230+
* This method skips CMAB logic.
231+
* @param keys A list of flag keys for which decisions will be made.
232+
* @param options A list of options for decision-making.
233+
* @return All decision results mapped by flag keys.
234+
*/
235+
public Map<String, OptimizelyDecision> decideForKeysWithoutCmab(@Nonnull List<String> keys,
236+
@Nonnull List<OptimizelyDecideOption> options) {
237+
return optimizely.decideForKeysWithoutCmab(copy(), keys, options);
238+
}
239+
240+
/**
241+
* Returns a key-map of decision results for multiple flag keys and a user context.
242+
* This method skips CMAB logic.
243+
*
244+
* @param keys A list of flag keys for which decisions will be made.
245+
* @return All decision results mapped by flag keys.
246+
*/
247+
public Map<String, OptimizelyDecision> decideForKeysWithoutCmab(@Nonnull List<String> keys) {
248+
return decideForKeysWithoutCmab(keys, Collections.emptyList());
249+
}
250+
251+
/**
252+
* Returns a key-map of decision results ({@link OptimizelyDecision}) for all active flag keys.
253+
* This method skips CMAB logic.
254+
*
255+
* @param options A list of options for decision-making.
256+
* @return All decision results mapped by flag keys.
257+
*/
258+
public Map<String, OptimizelyDecision> decideAllWithoutCmab(@Nonnull List<OptimizelyDecideOption> options) {
259+
return optimizely.decideAllWithoutCmab(copy(), options);
260+
}
261+
262+
/**
263+
* Returns a key-map of decision results ({@link OptimizelyDecision}) for all active flag keys.
264+
* This method skips CMAB logic.
265+
*
266+
* @return A dictionary of all decision results, mapped by flag keys.
267+
*/
268+
public Map<String, OptimizelyDecision> decideAllWithoutCmab() {
269+
return decideAllWithoutCmab(Collections.emptyList());
270+
}
271+
200272
/**
201273
* Track an event.
202274
*

0 commit comments

Comments
 (0)