Package com.castlabs.android.network

## Class ModifierDataSourceFactory

- java.lang.Object
- - com.castlabs.android.network.ModifierDataSourceFactory

- All Implemented Interfaces:
    `DataSourceFactory`, `com.google.android.exoplayer2.upstream.DataSource.Factory`

      public class ModifierDataSourceFactory
      extends Object
      implements DataSourceFactory

  Delegating data source factory that will trigger all `RequestModifier`s registered with the player controller.

  Note that you usually do not have to use this class explicitly. The `PlayerController` will automatically create delegate instances for the different data request types.

  Since:
    4.1.2

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ModifierDataSourceFactory​(DataSourceFactory delegate, int type, List<RequestModifier> requestModifiers, List<ResponseModifier> responseListeners)` | Create a new instance of this data source factory
    `ModifierDataSourceFactory​(DataSourceFactory delegate, int type, List<RequestModifier> requestModifiers, List<ResponseModifier> responseListeners, NetworkConfiguration networkConfiguration)` | Create a new instance of this data source factory

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addHeaderParameter​(String key, String value)` | Adds a header parameter that will be added to each HTTP connection header that is generated with a `DataSource` created by this factory.
    `void` | `addQueryParameter​(String key, String value)` | Adds a query parameter that will be appended to each HTTP URL.
    `void` | `clearHeaderParameters()` | Removes all header parameters added previously with `DataSourceFactory.addHeaderParameter(String, String)`.
    `void` | `clearQueryParameters()` | Removes all query parameters added previously with `DataSourceFactory.addQueryParameter(String, String)`
    `com.google.android.exoplayer2.upstream.DataSource` | `createDataSource()` |
    `com.google.android.exoplayer2.upstream.DataSource` | `createDataSource​(int requestType)` | Creates a data source for the given request type
    `Map<String,​String>` | `getHeaderParameter()` |
    `Map<String,​String>` | `getQueryParameter()` |

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ModifierDataSourceFactory

          public ModifierDataSourceFactory​(@NonNull
                                           DataSourceFactory delegate,
                                           int type,
                                           @NonNull
                                           List<RequestModifier> requestModifiers,
                                           @NonNull
                                           List<ResponseModifier> responseListeners)

      Create a new instance of this data source factory
      Parameters:
        `delegate` - The delegate that this factory wraps around
        `type` - The request type that will be send to the request modifier plugin. Should be one of `Request.DATA_TYPE_MANIFEST`, `Request.DATA_TYPE_SEGMENT`, or `Request.DATA_TYPE_OTHER`
        `requestModifiers` - The list of request modifier plugins

    - #### ModifierDataSourceFactory

          public ModifierDataSourceFactory​(@NonNull
                                           DataSourceFactory delegate,
                                           int type,
                                           @NonNull
                                           List<RequestModifier> requestModifiers,
                                           @NonNull
                                           List<ResponseModifier> responseListeners,
                                           @NonNull
                                           NetworkConfiguration networkConfiguration)

      Create a new instance of this data source factory
      Parameters:
        `delegate` - The delegate that this factory wraps around
        `type` - The request type that will be send to the request modifier plugin. Should be one of `Request.DATA_TYPE_MANIFEST`, `Request.DATA_TYPE_SEGMENT`, or `Request.DATA_TYPE_OTHER`
        `requestModifiers` - The list of request modifier plugins

  - ### Method Detail

    - #### createDataSource

          public com.google.android.exoplayer2.upstream.DataSource createDataSource()

      Specified by:
        `createDataSource` in interface `com.google.android.exoplayer2.upstream.DataSource.Factory`

    - #### createDataSource

          public com.google.android.exoplayer2.upstream.DataSource createDataSource​(int requestType)

      Description copied from interface: `DataSourceFactory`
      Creates a data source for the given request type
      Specified by:
        `createDataSource` in interface `DataSourceFactory`
      Parameters:
        `requestType` - The request type
      Returns:
        dataSource the data source

    - #### addHeaderParameter

          public void addHeaderParameter​(@NonNull
                                         String key,
                                         @NonNull
                                         String value)

      Description copied from interface: `DataSourceFactory`
      Adds a header parameter that will be added to each HTTP connection header that is generated with a `DataSource` created by this factory.

      Note that you will need to call this before a call to `DataSource.Factory.createDataSource()` in order to successfully add the parameter.
      Specified by:
        `addHeaderParameter` in interface `DataSourceFactory`
      Parameters:
        `key` - the key
        `value` - the value or null to remove any previously added endtry with the given key

    - #### clearHeaderParameters

          public void clearHeaderParameters()

      Description copied from interface: `DataSourceFactory`
      Removes all header parameters added previously with `DataSourceFactory.addHeaderParameter(String, String)`.
      Specified by:
        `clearHeaderParameters` in interface `DataSourceFactory`

    - #### addQueryParameter

          public void addQueryParameter​(@NonNull
                                        String key,
                                        @NonNull
                                        String value)

      Description copied from interface: `DataSourceFactory`
      Adds a query parameter that will be appended to each HTTP URL.

      Note that you will need to call this before a call to `DataSource.Factory.createDataSource()` in order to successfully add the parameter.
      Specified by:
        `addQueryParameter` in interface `DataSourceFactory`
      Parameters:
        `key` - the key
        `value` - the value or null to remove any previously added entry with the given key

    - #### clearQueryParameters

          public void clearQueryParameters()

      Description copied from interface: `DataSourceFactory`
      Removes all query parameters added previously with `DataSourceFactory.addQueryParameter(String, String)`
      Specified by:
        `clearQueryParameters` in interface `DataSourceFactory`

    - #### getHeaderParameter

          @NonNull
          public Map<String,​String> getHeaderParameter()

      Specified by:
        `getHeaderParameter` in interface `DataSourceFactory`
      Returns:
        A non-null map of all registered header parameter

    - #### getQueryParameter

          @NonNull
          public Map<String,​String> getQueryParameter()

      Specified by:
        `getQueryParameter` in interface `DataSourceFactory`
      Returns:
        A non-null map of all registered query parameter