Skip to content

Commit 31de5d5

Browse files
Simplify the way flagVariationsMap is built
1 parent 4964852 commit 31de5d5

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

core-api/src/main/java/com/optimizely/ab/config/DatafileProjectConfig.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -216,18 +216,12 @@ public DatafileProjectConfig(String accountId,
216216
flagVariationsMap = new HashMap<>();
217217
if (featureFlags != null) {
218218
for (FeatureFlag flag : featureFlags) {
219-
Map<String, Variation> variationsIdMap = new HashMap<>();
220219
List<Variation> variations = new ArrayList<>();
221-
for (String experimentId : flag.getExperimentIds()) {
222-
// We need to get each experiment by id and add to our list of experiments
223-
Experiment exp = experimentIdMapping.get(experimentId);
224-
variations.addAll(getVariationsFromExperiments(variationsIdMap, exp));
225-
226-
}
227-
Rollout rollout = rolloutIdMapping.get(flag.getRolloutId());
228-
if (rollout != null) {
229-
for (Experiment experiment : rollout.getExperiments()) {
230-
variations.addAll(getVariationsFromExperiments(variationsIdMap, experiment));
220+
for (Experiment rule : getAllRulesForFlag(flag)) {
221+
for (Variation variation : rule.getVariations()) {
222+
if (!variations.contains(variation)) {
223+
variations.add(variation);
224+
}
231225
}
232226
}
233227
// Grab all the variations from the flag experiments and rollouts and add to flagVariationsMap
@@ -236,17 +230,24 @@ public DatafileProjectConfig(String accountId,
236230
}
237231
}
238232

239-
private List<Variation> getVariationsFromExperiments(Map<String, Variation> variationsIdMap, Experiment exp) {
240-
List<Variation> variations = new ArrayList<>();
241-
for (Variation variation : exp.getVariations()) {
242-
if (!variationsIdMap.containsKey(variation.getId())) {
243-
variationsIdMap.put(variation.getId(), variation);
244-
variations.add(variation);
245-
}
233+
/**
234+
* Helper method to grab all rules for a flag
235+
* @param flag The flag to grab all the rules from
236+
* @return Returns a list of Experiments as rules
237+
*/
238+
private List<Experiment> getAllRulesForFlag(FeatureFlag flag) {
239+
List<Experiment> rules = new ArrayList<>();
240+
Rollout rollout = rolloutIdMapping.get(flag.getRolloutId());
241+
for (String experimentId : flag.getExperimentIds()) {
242+
rules.add(experimentIdMapping.get(experimentId));
243+
}
244+
if (rollout != null) {
245+
rules.addAll(rollout.getExperiments());
246246
}
247-
return variations;
247+
return rules;
248248
}
249249

250+
250251
/**
251252
* Helper method to retrieve the {@link Experiment} for the given experiment key.
252253
* If {@link RaiseExceptionErrorHandler} is provided, either an experiment is returned,

0 commit comments

Comments
 (0)