20
20
import com .featureprobe .sdk .server .EvaluationResult ;
21
21
import com .featureprobe .sdk .server .FPUser ;
22
22
import com .featureprobe .sdk .server .HitResult ;
23
- import com .featureprobe .sdk .server .exceptions .PrerequisitesDeepOverflowException ;
23
+ import com .featureprobe .sdk .server .exceptions .PrerequisiteException ;
24
24
25
25
import java .util .List ;
26
26
import java .util .Map ;
@@ -53,6 +53,20 @@ public final class Toggle {
53
53
54
54
public EvaluationResult eval (FPUser user , Map <String , Toggle > toggles , Map <String , Segment > segments ,
55
55
Object defaultValue , int deep ) {
56
+ EvaluationResult result = createDefaultResult (user , key , defaultValue , "" );
57
+ try {
58
+ return doEval (user , toggles , segments , defaultValue , deep );
59
+ } catch (PrerequisiteException e ) {
60
+ result .setReason (e .getMessage ());
61
+ } catch (Exception e ) {
62
+ throw e ;
63
+ }
64
+
65
+ return result ;
66
+ }
67
+
68
+ public EvaluationResult doEval (FPUser user , Map <String , Toggle > toggles , Map <String , Segment > segments ,
69
+ Object defaultValue , int deep ) {
56
70
57
71
String warning = "" ;
58
72
@@ -61,7 +75,7 @@ public EvaluationResult eval(FPUser user, Map<String, Toggle> toggles, Map<Strin
61
75
}
62
76
63
77
if (deep <= 0 ) {
64
- throw new PrerequisitesDeepOverflowException ("prerequisite deep overflow" );
78
+ throw new PrerequisiteException ("prerequisite deep overflow" );
65
79
}
66
80
67
81
if (!prerequisite (user , toggles , segments , deep )) {
@@ -85,7 +99,7 @@ public EvaluationResult eval(FPUser user, Map<String, Toggle> toggles, Map<Strin
85
99
private EvaluationResult createDisabledResult (FPUser user , String toggleKey , Object defaultValue ) {
86
100
EvaluationResult disabledResult = hitValue (disabledServe .evalIndex (user , this .key ),
87
101
defaultValue , Optional .empty ());
88
- disabledResult .setReason ("Toggle disabled" );
102
+ disabledResult .setReason ("Toggle disabled. " );
89
103
return disabledResult ;
90
104
}
91
105
@@ -100,19 +114,15 @@ private boolean prerequisite(FPUser user, Map<String, Toggle> toggles, Map<Strin
100
114
if (Objects .isNull (prerequisites ) || prerequisites .isEmpty ()) {
101
115
return true ;
102
116
}
103
- try {
104
- for (Prerequisite prerequisite : prerequisites ) {
105
- Toggle toggle = toggles .get (prerequisite .getKey ());
106
- if (Objects .isNull (toggle ))
107
- return false ;
108
- EvaluationResult eval = toggle .eval (user , toggles , segments , null , deep - 1 );
109
- if (Objects .isNull (eval .getValue ()))
110
- return false ;
111
- if (!eval .getValue ().equals (prerequisite .getValue ()))
112
- return false ;
113
- }
114
- } catch (PrerequisitesDeepOverflowException e ) {
115
- throw e ;
117
+ for (Prerequisite prerequisite : prerequisites ) {
118
+ Toggle toggle = toggles .get (prerequisite .getKey ());
119
+ if (Objects .isNull (toggle ))
120
+ throw new PrerequisiteException ("prerequisite not exist: " + this .key );
121
+ EvaluationResult eval = toggle .doEval (user , toggles , segments , null , deep - 1 );
122
+ if (Objects .isNull (eval .getValue ()))
123
+ return false ;
124
+ if (!eval .getValue ().equals (prerequisite .getValue ()))
125
+ return false ;
116
126
}
117
127
return true ;
118
128
}
0 commit comments