BundleTrackerCustomizer
Date: 2016-06-24

org.osgi.util.tracker

## Interface BundleTrackerCustomizer<T>

- Type Parameters:
    `T` - The type of the tracked object.
  All Known Implementing Classes:
    BundleTracker

      @ConsumerType
      public interface BundleTrackerCustomizer<T>

  The `BundleTrackerCustomizer` interface allows a `BundleTracker` to customize the `Bundle`s that are tracked. A `BundleTrackerCustomizer` is called when a bundle is being added to a `BundleTracker`. The `BundleTrackerCustomizer` can then return an object for the tracked bundle. A `BundleTrackerCustomizer` is also called when a tracked bundle is modified or has been removed from a `BundleTracker`.

  The methods in this interface may be called as the result of a `BundleEvent` being received by a `BundleTracker`. Since `BundleEvent`s are received synchronously by the `BundleTracker`, it is highly recommended that implementations of these methods do not alter bundle states while being synchronized on any object.

  The `BundleTracker` class is thread-safe. It does not call a `BundleTrackerCustomizer` while holding any locks. `BundleTrackerCustomizer` implementations must also be thread-safe.

  Since:
    1.4

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `T` | `addingBundle(Bundle bundle, BundleEvent event)` A bundle is being added to the `BundleTracker`.
    `void` | `modifiedBundle(Bundle bundle, BundleEvent event, T object)` A bundle tracked by the `BundleTracker` has been modified.
    `void` | `removedBundle(Bundle bundle, BundleEvent event, T object)` A bundle tracked by the `BundleTracker` has been removed.

- - ### Method Detail

    - #### addingBundle

          T addingBundle(Bundle bundle,
                       BundleEvent event)

      A bundle is being added to the `BundleTracker`.

      This method is called before a bundle which matched the search parameters of the `BundleTracker` is added to the `BundleTracker`. This method should return the object to be tracked for the specified `Bundle`. The returned object is stored in the `BundleTracker` and is available from the `getObject` method.

      Parameters:
        `bundle` - The `Bundle` being added to the `BundleTracker` .
        `event` - The bundle event which caused this customizer method to be called or `null` if there is no bundle event associated with the call to this method.
      Returns:
        The object to be tracked for the specified `Bundle` object or `null` if the specified `Bundle` object should not be tracked.

    - #### modifiedBundle

          void modifiedBundle(Bundle bundle,
                            BundleEvent event,
                            T object)

      A bundle tracked by the `BundleTracker` has been modified.

      This method is called when a bundle being tracked by the `BundleTracker` has had its state modified.

      Parameters:
        `bundle` - The `Bundle` whose state has been modified.
        `event` - The bundle event which caused this customizer method to be called or `null` if there is no bundle event associated with the call to this method.
        `object` - The tracked object for the specified bundle.

    - #### removedBundle

          void removedBundle(Bundle bundle,
                           BundleEvent event,
                           T object)

      A bundle tracked by the `BundleTracker` has been removed.

      This method is called after a bundle is no longer being tracked by the `BundleTracker`.

      Parameters:
        `bundle` - The `Bundle` that has been removed.
        `event` - The bundle event which caused this customizer method to be called or `null` if there is no bundle event associated with the call to this method.
        `object` - The tracked object for the specified bundle.