@@ -83,36 +83,20 @@ public <T> ProviderEvaluation<T> evaluate(
8383 try {
8484 final ServerConfiguration config = configuration .get ();
8585 if (config == null ) {
86- return ProviderEvaluation .<T >builder ()
87- .value (defaultValue )
88- .reason (Reason .ERROR .name ())
89- .errorCode (ErrorCode .PROVIDER_NOT_READY )
90- .build ();
86+ return error (defaultValue , ErrorCode .PROVIDER_NOT_READY );
9187 }
9288
9389 if (context == null ) {
94- return ProviderEvaluation .<T >builder ()
95- .value (defaultValue )
96- .reason (Reason .ERROR .name ())
97- .errorCode (ErrorCode .INVALID_CONTEXT )
98- .build ();
90+ return error (defaultValue , ErrorCode .INVALID_CONTEXT );
9991 }
10092
10193 if (context .getTargetingKey () == null ) {
102- return ProviderEvaluation .<T >builder ()
103- .value (defaultValue )
104- .reason (Reason .ERROR .name ())
105- .errorCode (ErrorCode .TARGETING_KEY_MISSING )
106- .build ();
94+ return error (defaultValue , ErrorCode .TARGETING_KEY_MISSING );
10795 }
10896
10997 final Flag flag = config .flags .get (key );
11098 if (flag == null ) {
111- return ProviderEvaluation .<T >builder ()
112- .value (defaultValue )
113- .reason (Reason .ERROR .name ())
114- .errorCode (ErrorCode .FLAG_NOT_FOUND )
115- .build ();
99+ return error (defaultValue , ErrorCode .FLAG_NOT_FOUND );
116100 }
117101
118102 if (!flag .enabled ) {
@@ -123,12 +107,7 @@ public <T> ProviderEvaluation<T> evaluate(
123107 }
124108
125109 if (isEmpty (flag .allocations )) {
126- return ProviderEvaluation .<T >builder ()
127- .value (defaultValue )
128- .reason (Reason .ERROR .name ())
129- .errorCode (ErrorCode .GENERAL )
130- .errorMessage ("Missing allocations for flag " + flag .key )
131- .build ();
110+ return error (defaultValue , ErrorCode .GENERAL , "Missing allocations for flag " + flag .key );
132111 }
133112
134113 final Date now = new Date ();
@@ -174,22 +153,32 @@ public <T> ProviderEvaluation<T> evaluate(
174153 .build ();
175154 } catch (final NumberFormatException e ) {
176155 LOGGER .debug ("Evaluation failed for key {}" , key , e );
177- return ProviderEvaluation .<T >builder ()
178- .value (defaultValue )
179- .reason (Reason .ERROR .name ())
180- .errorCode (ErrorCode .TYPE_MISMATCH )
181- .build ();
156+ return error (defaultValue , ErrorCode .TYPE_MISMATCH );
182157 } catch (final Exception e ) {
183158 LOGGER .debug ("Evaluation failed for key {}" , key , e );
184- return ProviderEvaluation .<T >builder ()
185- .value (defaultValue )
186- .reason (Reason .ERROR .name ())
187- .errorCode (ErrorCode .GENERAL )
188- .errorMessage (e .getMessage ())
189- .build ();
159+ return error (defaultValue , ErrorCode .GENERAL , e );
190160 }
191161 }
192162
163+ private static <T > ProviderEvaluation <T > error (final T defaultValue , final ErrorCode code ) {
164+ return error (defaultValue , code , (String ) null );
165+ }
166+
167+ private static <T > ProviderEvaluation <T > error (
168+ final T defaultValue , final ErrorCode code , final Throwable cause ) {
169+ return error (defaultValue , code , cause == null ? null : cause .getMessage ());
170+ }
171+
172+ private static <T > ProviderEvaluation <T > error (
173+ final T defaultValue , final ErrorCode code , final String errorMessage ) {
174+ return ProviderEvaluation .<T >builder ()
175+ .value (defaultValue )
176+ .reason (Reason .ERROR .name ())
177+ .errorCode (code )
178+ .errorMessage (errorMessage )
179+ .build ();
180+ }
181+
193182 private static boolean isEmpty (final List <?> list ) {
194183 return list == null || list .isEmpty ();
195184 }
0 commit comments