Class SplitClientImpl

java.lang.Object
io.split.client.SplitClientImpl
All Implemented Interfaces:
SplitClient

public final class SplitClientImpl
extends Object
implements SplitClient
A basic implementation of SplitClient.
Author:
adil
  • Field Details

  • Constructor Details

  • Method Details

    • destroy

      public void destroy()
      Description copied from interface: SplitClient
      Destroys the background processes and clears the cache, releasing the resources used by the any instances of SplitClient or SplitManager generated by the client's parent SplitFactory
      Specified by:
      destroy in interface SplitClient
    • getTreatment

      public String getTreatment​(String key, String split)
      Description copied from interface: SplitClient
      Returns the treatment to show this key for this feature. The set of treatments for a feature can be configured on the Split web console.

      This method returns the string 'control' if:

      1. Any of the parameters were null
      2. There was an exception in evaluating the treatment
      3. The SDK does not know of the existence of this feature
      4. The feature was deleted through the web console.
      'control' is a reserved treatment (you cannot create a treatment with the same name) to highlight these exceptional circumstances.

      The sdk returns the default treatment of this feature if:

      1. The feature was killed
      2. The key did not match any of the conditions in the feature roll-out plan
      The default treatment of a feature is set on the Split web console.

      This method does not throw any exceptions. It also never returns null.

      Specified by:
      getTreatment in interface SplitClient
      Parameters:
      key - a unique key of your customer (e.g. user_id, user_email, account_id, etc.) MUST not be null.
      split - the feature we want to evaluate. MUST NOT be null.
      Returns:
      the evaluated treatment, the default treatment of this feature, or 'control'.
    • getTreatment

      public String getTreatment​(String key, String split, Map<String,​Object> attributes)
      Description copied from interface: SplitClient
      This method is useful when you want to determine the treatment to show to an customer (user, account etc.) based on an attribute of that customer instead of it's key.

      Examples include showing a different treatment to users on trial plan vs. premium plan. Another example is to show a different treatment to users created after a certain date.

      Specified by:
      getTreatment in interface SplitClient
      Parameters:
      key - a unique key of your customer (e.g. user_id, user_email, account_id, etc.) MUST not be null.
      split - the feature we want to evaluate. MUST NOT be null.
      attributes - of the customer (user, account etc.) to use in evaluation. Can be null or empty.
      Returns:
      the evaluated treatment, the default treatment of this feature, or 'control'.
    • getTreatment

      public String getTreatment​(Key key, String split, Map<String,​Object> attributes)
      Description copied from interface: SplitClient
      To understand why this method is useful, consider the following simple Split as an example: if user is in segment employees then split 100%:on else if user is in segment all then split 20%:on,80%:off There are two concepts here: matching and bucketing. Matching refers to ‘user is in segment employees’ or ‘user is in segment all’ whereas bucketing refers to ‘100%:on’ or ‘20%:on,80%:off’. By default, the same customer key is used for both matching and bucketing. However, for some advanced use cases, you may want to use different keys. For such cases, use this method. As an example, suppose you want to rollout to percentages of users in specific accounts. You can achieve that by matching via account id, but bucketing by user id. Another example is when you want to ensure that a user continues to get the same treatment after they sign up for your product that they used to get when they were simply a visitor to your site. In that case, before they sign up, you can use their visitor id for both matching and bucketing, but post log-in you can use their user id for matching and visitor id for bucketing.
      Specified by:
      getTreatment in interface SplitClient
      Parameters:
      key - the matching and bucketing keys. MUST NOT be null.
      split - the feature we want to evaluate. MUST NOT be null.
      attributes - of the entity (user, account etc.) to use in evaluation. Can be null or empty.
      Returns:
      the evaluated treatment, the default treatment of this feature, or 'control'.
    • getTreatmentWithConfig

      public SplitResult getTreatmentWithConfig​(String key, String split)
      Description copied from interface: SplitClient
      Same as SplitClient.getTreatment(String, String) but it returns the configuration associated to the matching treatment if any. Otherwise {@link SplitResult.configurations()} will be null.

      Examples include showing a different treatment to users on trial plan vs. premium plan. Another example is to show a different treatment to users created after a certain date.

      Specified by:
      getTreatmentWithConfig in interface SplitClient
      Parameters:
      key - a unique key of your customer (e.g. user_id, user_email, account_id, etc.) MUST not be null.
      split - the feature we want to evaluate. MUST NOT be null.
      Returns:
      SplitResult containing the evaluated treatment (the default treatment of this feature, or 'control') and a configuration associated to this treatment if set.
    • getTreatmentWithConfig

      public SplitResult getTreatmentWithConfig​(String key, String split, Map<String,​Object> attributes)
      Description copied from interface: SplitClient
      Same as SplitClient.getTreatment(String, String, Map) but it returns the configuration associated to the matching treatment if any. Otherwise {@link SplitResult.configurations()} will be null.

      Examples include showing a different treatment to users on trial plan vs. premium plan. Another example is to show a different treatment to users created after a certain date.

      Specified by:
      getTreatmentWithConfig in interface SplitClient
      Parameters:
      key - a unique key of your customer (e.g. user_id, user_email, account_id, etc.) MUST not be null.
      split - the feature we want to evaluate. MUST NOT be null.
      attributes - of the customer (user, account etc.) to use in evaluation. Can be null or empty.
      Returns:
      SplitResult containing the evaluated treatment (the default treatment of this feature, or 'control') and a configuration associated to this treatment if set.
    • getTreatmentWithConfig

      public SplitResult getTreatmentWithConfig​(Key key, String split, Map<String,​Object> attributes)
      Description copied from interface: SplitClient
      Same as SplitClient.getTreatment(Key, String, Map) but it returns the configuration associated to the matching treatment if any. Otherwise {@link SplitResult.configurations()} will be null.
      Specified by:
      getTreatmentWithConfig in interface SplitClient
      Parameters:
      key - the matching and bucketing keys. MUST NOT be null.
      split - the feature we want to evaluate. MUST NOT be null.
      attributes - of the entity (user, account etc.) to use in evaluation. Can be null or empty.
      Returns:
      SplitResult containing the evaluated treatment (the default treatment of this feature, or 'control') and a configuration associated to this treatment if set.
    • getTreatmentWithoutImpressions

      public String getTreatmentWithoutImpressions​(String matchingKey, String bucketingKey, String split, Map<String,​Object> attributes)
    • track

      public boolean track​(String key, String trafficType, String eventType)
      Description copied from interface: SplitClient
      Enqueue a new event to be sent to split data collection services Example: client.track(“account”, “Split Software”, “checkout”)
      Specified by:
      track in interface SplitClient
      Parameters:
      key - the identifier of the entity
      trafficType - the type of the event
      eventType - the type of the event
      Returns:
      true if the track was successful, false otherwise
    • track

      public boolean track​(String key, String trafficType, String eventType, double value)
      Description copied from interface: SplitClient
      Enqueue a new event to be sent to split data collection services Example: client.track(“account”, “Split Software”, “checkout”, 200.00)
      Specified by:
      track in interface SplitClient
      Parameters:
      key - the identifier of the entity
      trafficType - the type of the event
      eventType - the type of the event
      value - the value of the event
      Returns:
      true if the track was successful, false otherwise
    • track

      public boolean track​(String key, String trafficType, String eventType, Map<String,​Object> properties)
      Description copied from interface: SplitClient
      Enqueue a new event to be sent to split data collection services Example: client.track(“account”, “Split Software”, “checkout”, Collections.singletonMap("age", 23))
      Specified by:
      track in interface SplitClient
      Parameters:
      key - the identifier of the entity
      trafficType - the type of the event
      eventType - the type of the event
      Returns:
      true if the track was successful, false otherwise
    • track

      public boolean track​(String key, String trafficType, String eventType, double value, Map<String,​Object> properties)
      Description copied from interface: SplitClient
      Enqueue a new event to be sent to split data collection services Example: client.track(“account”, “Split Software”, “checkout”, 123, Collections.singletonMap("age", 23))
      Specified by:
      track in interface SplitClient
      Parameters:
      key - the identifier of the entity
      trafficType - the type of the event
      eventType - the type of the event
      value - the value of the event
      Returns:
      true if the track was successful, false otherwise
    • blockUntilReady

      public void blockUntilReady() throws TimeoutException, InterruptedException
      Description copied from interface: SplitClient
      The SDK kicks off background threads to download data necessary for using the SDK. You can choose to block until the SDK has downloaded split definitions so that you will not get the 'control' treatment.

      If the download is not successful in the time period set on SplitClientConfig.Builder.setBlockUntilReadyTimeout(int), a TimeoutException will be thrown.

      Specified by:
      blockUntilReady in interface SplitClient
      Throws:
      TimeoutException
      InterruptedException