88import org .apache .commons .lang3 .tuple .ImmutablePair ;
99
1010public 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 (
0 commit comments