Class Hook


  • public abstract class Hook
    extends java.lang.Object
    A Hook is a set of user-defined callbacks that are executed by the SDK at various points of interest. To create your own hook with customized logic, implement the Hook interface.

    Hook currently defines an "evaluation" series, which is composed of two stages: "beforeEvaluation" and "afterEvaluation". These are executed by the SDK before and after the evaluation of a feature flag.

    Multiple hooks may be configured in the SDK. By default, the SDK will execute each hook's beforeEvaluation stage in the order they were configured, and afterEvaluation in reverse order. (i.e. myHook1.beforeEvaluation, myHook2.beforeEvaluation, myHook2.afterEvaluation, myHook1.afterEvaluation)

    • Constructor Detail

      • Hook

        public Hook​(java.lang.String name)
        Creates an instance of Hook with the given name which will be put into its metadata.
        Parameters:
        name - a friendly naem for the hooks
    • Method Detail

      • getMetadata

        public HookMetadata getMetadata()
        Returns:
        the hooks metadata
      • beforeEvaluation

        public java.util.Map<java.lang.String,​java.lang.Object> beforeEvaluation​(EvaluationSeriesContext seriesContext,
                                                                                       java.util.Map<java.lang.String,​java.lang.Object> seriesData)
        beforeEvaluation(EvaluationSeriesContext, Map) is executed by the SDK at the start of the evaluation of a feature flag. It will not be executed as part of a call to LDClient.allFlagsState(LDContext, FlagsStateOption...).

        To provide custom data to the series which will be given back to your Hook at the next stage of the series, return a map containing the custom data. You should initialize this map from the seriesData.

         
         HashMap<String, Object> customData = new HashMap<>(seriesData);
         customData.put("foo", "bar");
         return Collections.unmodifiableMap(customData);
         
         
        Parameters:
        seriesContext - container of parameters associated with this evaluation
        seriesData - immutable data from the previous stage in evaluation series. beforeEvaluation(EvaluationSeriesContext, Map) is the first stage in this series, so this will be an immutable empty map.
        Returns:
        a map containing custom data that will be carried through to the next stage of the series
      • afterEvaluation

        public java.util.Map<java.lang.String,​java.lang.Object> afterEvaluation​(EvaluationSeriesContext seriesContext,
                                                                                      java.util.Map<java.lang.String,​java.lang.Object> seriesData,
                                                                                      EvaluationDetail<LDValue> evaluationDetail)
        afterEvaluation(EvaluationSeriesContext, Map, EvaluationDetail) is executed by the SDK at the after the evaluation of a feature flag. It will not be executed as part of a call to LDClient.allFlagsState(LDContext, FlagsStateOption...).

        This is currently the last stage of the evaluation series in the Hook, but that may not be the case in the future. To ensure forward compatibility, return the seriesData unmodified.

         
         String value = (String) seriesData.get("foo");
         doAThing(value);
         return seriesData;
         
         
        Parameters:
        seriesContext - container of parameters associated with this evaluation
        seriesData - immutable data from the previous stage in evaluation series. beforeEvaluation(EvaluationSeriesContext, Map) is the first stage in this series, so this will be an immutable empty map.
        evaluationDetail - the result of the evaluation that took place before this hook was invoked
        Returns:
        a map containing custom data that will be carried through to the next stage of the series (if added in the future)