Skip to content

Commit db248dd

Browse files
committed
refactor getEvaluationResult, add priority constants
1 parent ec6000e commit db248dd

File tree

3 files changed

+50
-6
lines changed

3 files changed

+50
-6
lines changed

src/main/java/com/flagsmith/flagengine/Engine.java

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,45 @@
88
import org.apache.commons.lang3.tuple.ImmutablePair;
99

1010
public class Engine {
11+
private static class SegmentEvaluationResult {
12+
List<SegmentResult> segments;
13+
HashMap<String, ImmutablePair<String, FeatureContext>> segmentFeatureContexts;
14+
15+
public SegmentEvaluationResult(
16+
List<SegmentResult> segments,
17+
HashMap<String, ImmutablePair<String, FeatureContext>> segmentFeatureContexts) {
18+
this.segments = segments;
19+
this.segmentFeatureContexts = segmentFeatureContexts;
20+
}
21+
22+
public List<SegmentResult> getSegments() {
23+
return segments;
24+
}
25+
26+
public HashMap<String, ImmutablePair<String, FeatureContext>> getSegmentFeatureContexts() {
27+
return segmentFeatureContexts;
28+
}
29+
}
30+
1131
/**
1232
* Get evaluation result for a given evaluation context.
1333
*
1434
* @param context Evaluation context.
1535
* @return Evaluation result.
1636
*/
1737
public static EvaluationResult getEvaluationResult(EvaluationContext context) {
38+
SegmentEvaluationResult segmentEvaluationResult = evaluateSegments(context);
39+
Flags flags = evaluateFeatures(context, segmentEvaluationResult.getSegmentFeatureContexts());
40+
41+
return new EvaluationResult()
42+
.withFlags(flags)
43+
.withSegments(segmentEvaluationResult.getSegments());
44+
}
45+
46+
private static SegmentEvaluationResult evaluateSegments(
47+
EvaluationContext context) {
1848
List<SegmentResult> segments = new ArrayList<>();
1949
HashMap<String, ImmutablePair<String, FeatureContext>> segmentFeatureContexts = new HashMap<>();
20-
Flags flags = new Flags();
2150

2251
for (SegmentContext segmentContext : context.getSegments().getAdditionalProperties().values()) {
2352
if (SegmentEvaluator.isContextInSegment(context, segmentContext)) {
@@ -36,10 +65,10 @@ public static EvaluationResult getEvaluationResult(EvaluationContext context) {
3665
FeatureContext existingFeatureContext = existing.getRight();
3766

3867
Double existingPriority = existingFeatureContext.getPriority() == null
39-
? Double.POSITIVE_INFINITY
68+
? EngineConstants.WEAKEST_PRIORITY
4069
: existingFeatureContext.getPriority();
4170
Double featurePriority = featureContext.getPriority() == null
42-
? Double.POSITIVE_INFINITY
71+
? EngineConstants.WEAKEST_PRIORITY
4372
: featureContext.getPriority();
4473

4574
if (existingPriority < featurePriority) {
@@ -54,11 +83,19 @@ public static EvaluationResult getEvaluationResult(EvaluationContext context) {
5483
}
5584
}
5685

86+
return new SegmentEvaluationResult(segments, segmentFeatureContexts);
87+
}
88+
89+
private static Flags evaluateFeatures(
90+
EvaluationContext context,
91+
HashMap<String, ImmutablePair<String, FeatureContext>> segmentFeatureContexts) {
92+
Features contextFeatures = context.getFeatures();
93+
Flags flags = new Flags();
94+
5795
String identityKey = context.getIdentity() != null
5896
? context.getIdentity().getKey()
5997
: null;
6098

61-
Features contextFeatures = context.getFeatures();
6299
if (contextFeatures != null) {
63100
for (FeatureContext featureContext : contextFeatures.getAdditionalProperties().values()) {
64101
if (segmentFeatureContexts.containsKey(featureContext.getFeatureKey())) {
@@ -80,7 +117,7 @@ public static EvaluationResult getEvaluationResult(EvaluationContext context) {
80117
}
81118
}
82119

83-
return new EvaluationResult().withFlags(flags).withSegments(segments);
120+
return flags;
84121
}
85122

86123
private static FlagResult getFlagResultFromFeatureContext(
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.flagsmith.flagengine;
2+
3+
public class EngineConstants {
4+
public static final double STRONGEST_PRIORITY = Double.NEGATIVE_INFINITY;
5+
public static final double WEAKEST_PRIORITY = Double.POSITIVE_INFINITY;
6+
}

src/main/java/com/flagsmith/mappers/EngineMappers.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.flagsmith.mappers;
22

33
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.flagsmith.flagengine.EngineConstants;
45
import com.flagsmith.flagengine.EnvironmentContext;
56
import com.flagsmith.flagengine.EvaluationContext;
67
import com.flagsmith.flagengine.FeatureContext;
@@ -164,7 +165,7 @@ private static Map<String, SegmentContext> mapIdentityOverridesToSegments(
164165
.withName(feature.get("name").asText())
165166
.withEnabled(featureState.get("enabled").asBoolean())
166167
.withValue(getFeatureStateValue(featureState, "feature_state_value"))
167-
.withPriority(Double.NEGATIVE_INFINITY); // Highest possible priority
168+
.withPriority(EngineConstants.STRONGEST_PRIORITY);
168169
overridesKey.add(featureContext);
169170
}
170171

0 commit comments

Comments
 (0)