19
19
20
20
import com .fasterxml .jackson .core .JsonProcessingException ;
21
21
import com .fasterxml .jackson .databind .ObjectMapper ;
22
+ import com .featureprobe .sdk .server .exceptions .PrerequisitesDeepOverflowException ;
22
23
import com .featureprobe .sdk .server .model .Segment ;
23
24
import com .featureprobe .sdk .server .model .Toggle ;
24
25
import com .google .common .annotations .VisibleForTesting ;
@@ -58,10 +59,14 @@ public final class FeatureProbe {
58
59
@ VisibleForTesting
59
60
EventProcessor eventProcessor ;
60
61
62
+ @ VisibleForTesting
63
+ FPConfig config ;
64
+
61
65
@ VisibleForTesting
62
66
private FeatureProbe (DataRepository dataRepository ) {
63
67
this .dataRepository = dataRepository ;
64
68
FPConfig config = FPConfig .DEFAULT ;
69
+ this .config = config ;
65
70
final FPContext context = new FPContext ("test" , config );
66
71
eventProcessor = config .eventProcessorFactory .createEventProcessor (context );
67
72
}
@@ -86,6 +91,7 @@ public FeatureProbe(String serverSDKKey, FPConfig config) {
86
91
throw new IllegalArgumentException ("serverSDKKey must not be blank" );
87
92
}
88
93
final FPContext context = new FPContext (serverSDKKey , config );
94
+ this .config = config ;
89
95
this .eventProcessor = config .eventProcessorFactory .createEventProcessor (context );
90
96
this .dataRepository = config .dataRepositoryFactory .createDataRepository (context );
91
97
this .synchronizer = config .synchronizerFactory .createSynchronizer (context , dataRepository );
@@ -255,8 +261,10 @@ private <T> T jsonEvaluate(String toggleKey, FPUser user, T defaultValue, Class<
255
261
try {
256
262
Toggle toggle = dataRepository .getToggle (toggleKey );
257
263
Map <String , Segment > segments = dataRepository .getAllSegment ();
264
+ Map <String , Toggle > toggles = dataRepository .getAllToggle ();
258
265
if (Objects .nonNull (toggle )) {
259
- EvaluationResult evalResult = toggle .eval (user , segments , defaultValue );
266
+ EvaluationResult evalResult = toggle .eval (user , toggles , segments , defaultValue ,
267
+ config .prerequisiteDeep );
260
268
String value = mapper .writeValueAsString (evalResult .getValue ());
261
269
eventProcessor .push (buildAccessEvent (toggle , evalResult , user ));
262
270
return mapper .readValue (value , clazz );
@@ -273,8 +281,10 @@ private <T> T genericEvaluate(String toggleKey, FPUser user, T defaultValue, Cla
273
281
try {
274
282
Toggle toggle = dataRepository .getToggle (toggleKey );
275
283
Map <String , Segment > segments = dataRepository .getAllSegment ();
284
+ Map <String , Toggle > toggles = dataRepository .getAllToggle ();
276
285
if (Objects .nonNull (toggle )) {
277
- EvaluationResult evalResult = toggle .eval (user , segments , defaultValue );
286
+ EvaluationResult evalResult = toggle .eval (user , toggles , segments , defaultValue ,
287
+ config .prerequisiteDeep );
278
288
eventProcessor .push (buildAccessEvent (toggle , evalResult , user ));
279
289
return clazz .cast (evalResult .getValue ());
280
290
}
@@ -308,6 +318,9 @@ private <T> FPDetail<T> genericEvaluateDetail(String toggleKey, FPUser user, T d
308
318
} catch (ClassCastException | JsonProcessingException e ) {
309
319
logger .error (LOG_CONVERSION_ERROR , toggleKey , e );
310
320
detail .setReason (REASON_TYPE_MISMATCH );
321
+ } catch (PrerequisitesDeepOverflowException e ) {
322
+ logger .error (e .getMessage (), toggleKey , e );
323
+ detail .setReason (e .getMessage ());
311
324
} catch (Exception e ) {
312
325
logger .error (LOG_HANDLE_ERROR , toggleKey , e );
313
326
detail .setReason (REASON_HANDLE_ERROR );
@@ -323,8 +336,10 @@ private <T> FPDetail<T> getEvaluateDetail(String toggleKey, FPUser user, T defau
323
336
if (this .dataRepository .initialized ()) {
324
337
Toggle toggle = dataRepository .getToggle (toggleKey );
325
338
Map <String , Segment > segments = dataRepository .getAllSegment ();
339
+ Map <String , Toggle > toggles = dataRepository .getAllToggle ();
326
340
if (Objects .nonNull (toggle )) {
327
- EvaluationResult evalResult = toggle .eval (user , segments , defaultValue );
341
+ EvaluationResult evalResult = toggle .eval (user , toggles , segments , defaultValue ,
342
+ config .prerequisiteDeep );
328
343
if (isJson ) {
329
344
String res = mapper .writeValueAsString (evalResult .getValue ());
330
345
detail .setValue (mapper .readValue (res , clazz ));
0 commit comments