@@ -184,33 +184,42 @@ private void sendFlagRequestEvent(String featureKey, LDUser user, JsonElement va
184184 }
185185
186186 /**
187- * Returns a map from feature flag keys to Boolean feature flag values for a given user. The map will contain {@code null}
188- * entries for any flags that are off or for any feature flags with non-boolean variations. If the client is offline or
189- * has not been initialized, a {@code null} map will be returned.
187+ * Returns a map from feature flag keys to {@code JsonElement} feature flag values for a given user.
188+ * If the result of a flag's evaluation would have returned the default variation, it will have a null entry
189+ * in the map. If the client is offline, has not been initialized, or a null user or user with null/empty user key a {@code null} map will be returned.
190190 * This method will not send analytics events back to LaunchDarkly.
191191 * <p>
192192 * The most common use case for this method is to bootstrap a set of client-side feature flags from a back-end service.
193193 *
194194 * @param user the end user requesting the feature flags
195- * @return a map from feature flag keys to JsonElement values for the specified user
195+ * @return a map from feature flag keys to {@code JsonElement} for the specified user
196196 */
197- public Map <String , Boolean > allFlags (LDUser user ) {
197+ public Map <String , JsonElement > allFlags (LDUser user ) {
198198 if (isOffline ()) {
199+ logger .warn ("allFlags() was called when client is in offline mode! Returning null." );
199200 return null ;
200201 }
201202
202203 if (!initialized ()) {
204+ logger .warn ("allFlags() was called before Client has been initialized! Returning null." );
205+ return null ;
206+ }
207+
208+ if (user == null || user .getKeyAsString ().isEmpty ()) {
209+ logger .warn ("allFlags() was called with null user or null/empty user key! returning null" );
203210 return null ;
204211 }
205212
206213 Map <String , FeatureFlag > flags = this .config .featureStore .all ();
207- Map <String , Boolean > result = new HashMap <>();
214+ Map <String , JsonElement > result = new HashMap <>();
208215
209- for (String key : flags .keySet ()) {
210- JsonElement evalResult = evaluate ( key , user , null );
211- if ( evalResult . isJsonPrimitive () && evalResult . getAsJsonPrimitive (). isBoolean ()) {
212- result .put (key , evalResult . getAsBoolean () );
216+ for (Map . Entry < String , FeatureFlag > entry : flags .entrySet ()) {
217+ try {
218+ JsonElement evalResult = entry . getValue (). evaluate ( user , config . featureStore ). getValue ();
219+ result .put (entry . getKey (), evalResult );
213220
221+ } catch (EvaluationException e ) {
222+ logger .error ("Exception caught when evaluating all flags:" , e );
214223 }
215224 }
216225 return result ;
@@ -325,22 +334,15 @@ private JsonElement evaluate(String featureKey, LDUser user, JsonElement default
325334 sendFlagRequestEvent (featureKey , user , defaultValue , defaultValue , null );
326335 return defaultValue ;
327336 }
328- if (featureFlag .isOn ()) {
329- FeatureFlag .EvalResult evalResult = featureFlag .evaluate (user , config .featureStore );
330- if (!isOffline ()) {
331- for (FeatureRequestEvent event : evalResult .getPrerequisiteEvents ()) {
332- eventProcessor .sendEvent (event );
333- }
334- }
335- if (evalResult .getValue () != null ) {
336- sendFlagRequestEvent (featureKey , user , evalResult .getValue (), defaultValue , featureFlag .getVersion ());
337- return evalResult .getValue ();
338- }
337+ FeatureFlag .EvalResult evalResult = featureFlag .evaluate (user , config .featureStore );
338+ if (!isOffline ()) {
339+ for (FeatureRequestEvent event : evalResult .getPrerequisiteEvents ()) {
340+ eventProcessor .sendEvent (event );
341+ }
339342 }
340- JsonElement offVariation = featureFlag .getOffVariationValue ();
341- if (offVariation != null ) {
342- sendFlagRequestEvent (featureKey , user , offVariation , defaultValue , featureFlag .getVersion ());
343- return offVariation ;
343+ if (evalResult .getValue () != null ) {
344+ sendFlagRequestEvent (featureKey , user , evalResult .getValue (), defaultValue , featureFlag .getVersion ());
345+ return evalResult .getValue ();
344346 }
345347 } catch (Exception e ) {
346348 logger .error ("Encountered exception in LaunchDarkly client" , e );
0 commit comments