1919
2020import com .fasterxml .jackson .core .JsonProcessingException ;
2121import com .fasterxml .jackson .databind .ObjectMapper ;
22+ import com .featureprobe .sdk .server .exceptions .PrerequisitesDeepOverflowException ;
2223import com .featureprobe .sdk .server .model .Segment ;
2324import com .featureprobe .sdk .server .model .Toggle ;
2425import com .google .common .annotations .VisibleForTesting ;
@@ -58,10 +59,14 @@ public final class FeatureProbe {
5859 @ VisibleForTesting
5960 EventProcessor eventProcessor ;
6061
62+ @ VisibleForTesting
63+ FPConfig config ;
64+
6165 @ VisibleForTesting
6266 private FeatureProbe (DataRepository dataRepository ) {
6367 this .dataRepository = dataRepository ;
6468 FPConfig config = FPConfig .DEFAULT ;
69+ this .config = config ;
6570 final FPContext context = new FPContext ("test" , config );
6671 eventProcessor = config .eventProcessorFactory .createEventProcessor (context );
6772 }
@@ -86,6 +91,7 @@ public FeatureProbe(String serverSDKKey, FPConfig config) {
8691 throw new IllegalArgumentException ("serverSDKKey must not be blank" );
8792 }
8893 final FPContext context = new FPContext (serverSDKKey , config );
94+ this .config = config ;
8995 this .eventProcessor = config .eventProcessorFactory .createEventProcessor (context );
9096 this .dataRepository = config .dataRepositoryFactory .createDataRepository (context );
9197 this .synchronizer = config .synchronizerFactory .createSynchronizer (context , dataRepository );
@@ -255,8 +261,10 @@ private <T> T jsonEvaluate(String toggleKey, FPUser user, T defaultValue, Class<
255261 try {
256262 Toggle toggle = dataRepository .getToggle (toggleKey );
257263 Map <String , Segment > segments = dataRepository .getAllSegment ();
264+ Map <String , Toggle > toggles = dataRepository .getAllToggle ();
258265 if (Objects .nonNull (toggle )) {
259- EvaluationResult evalResult = toggle .eval (user , segments , defaultValue );
266+ EvaluationResult evalResult = toggle .eval (user , toggles , segments , defaultValue ,
267+ config .prerequisiteDeep );
260268 String value = mapper .writeValueAsString (evalResult .getValue ());
261269 eventProcessor .push (buildAccessEvent (toggle , evalResult , user ));
262270 return mapper .readValue (value , clazz );
@@ -273,8 +281,10 @@ private <T> T genericEvaluate(String toggleKey, FPUser user, T defaultValue, Cla
273281 try {
274282 Toggle toggle = dataRepository .getToggle (toggleKey );
275283 Map <String , Segment > segments = dataRepository .getAllSegment ();
284+ Map <String , Toggle > toggles = dataRepository .getAllToggle ();
276285 if (Objects .nonNull (toggle )) {
277- EvaluationResult evalResult = toggle .eval (user , segments , defaultValue );
286+ EvaluationResult evalResult = toggle .eval (user , toggles , segments , defaultValue ,
287+ config .prerequisiteDeep );
278288 eventProcessor .push (buildAccessEvent (toggle , evalResult , user ));
279289 return clazz .cast (evalResult .getValue ());
280290 }
@@ -308,6 +318,9 @@ private <T> FPDetail<T> genericEvaluateDetail(String toggleKey, FPUser user, T d
308318 } catch (ClassCastException | JsonProcessingException e ) {
309319 logger .error (LOG_CONVERSION_ERROR , toggleKey , e );
310320 detail .setReason (REASON_TYPE_MISMATCH );
321+ } catch (PrerequisitesDeepOverflowException e ) {
322+ logger .error (e .getMessage (), toggleKey , e );
323+ detail .setReason (e .getMessage ());
311324 } catch (Exception e ) {
312325 logger .error (LOG_HANDLE_ERROR , toggleKey , e );
313326 detail .setReason (REASON_HANDLE_ERROR );
@@ -323,8 +336,10 @@ private <T> FPDetail<T> getEvaluateDetail(String toggleKey, FPUser user, T defau
323336 if (this .dataRepository .initialized ()) {
324337 Toggle toggle = dataRepository .getToggle (toggleKey );
325338 Map <String , Segment > segments = dataRepository .getAllSegment ();
339+ Map <String , Toggle > toggles = dataRepository .getAllToggle ();
326340 if (Objects .nonNull (toggle )) {
327- EvaluationResult evalResult = toggle .eval (user , segments , defaultValue );
341+ EvaluationResult evalResult = toggle .eval (user , toggles , segments , defaultValue ,
342+ config .prerequisiteDeep );
328343 if (isJson ) {
329344 String res = mapper .writeValueAsString (evalResult .getValue ());
330345 detail .setValue (mapper .readValue (res , clazz ));
0 commit comments