2020import com .featureprobe .sdk .server .EvaluationResult ;
2121import com .featureprobe .sdk .server .FPUser ;
2222import com .featureprobe .sdk .server .HitResult ;
23- import com .featureprobe .sdk .server .exceptions .PrerequisitesDeepOverflowException ;
23+ import com .featureprobe .sdk .server .exceptions .PrerequisiteException ;
2424
2525import java .util .List ;
2626import java .util .Map ;
@@ -53,6 +53,20 @@ public final class Toggle {
5353
5454 public EvaluationResult eval (FPUser user , Map <String , Toggle > toggles , Map <String , Segment > segments ,
5555 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 ) {
5670
5771 String warning = "" ;
5872
@@ -61,7 +75,7 @@ public EvaluationResult eval(FPUser user, Map<String, Toggle> toggles, Map<Strin
6175 }
6276
6377 if (deep <= 0 ) {
64- throw new PrerequisitesDeepOverflowException ("prerequisite deep overflow" );
78+ throw new PrerequisiteException ("prerequisite deep overflow" );
6579 }
6680
6781 if (!prerequisite (user , toggles , segments , deep )) {
@@ -85,7 +99,7 @@ public EvaluationResult eval(FPUser user, Map<String, Toggle> toggles, Map<Strin
8599 private EvaluationResult createDisabledResult (FPUser user , String toggleKey , Object defaultValue ) {
86100 EvaluationResult disabledResult = hitValue (disabledServe .evalIndex (user , this .key ),
87101 defaultValue , Optional .empty ());
88- disabledResult .setReason ("Toggle disabled" );
102+ disabledResult .setReason ("Toggle disabled. " );
89103 return disabledResult ;
90104 }
91105
@@ -100,19 +114,15 @@ private boolean prerequisite(FPUser user, Map<String, Toggle> toggles, Map<Strin
100114 if (Objects .isNull (prerequisites ) || prerequisites .isEmpty ()) {
101115 return true ;
102116 }
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 ;
116126 }
117127 return true ;
118128 }
0 commit comments