Module java.desktop
Package java.beans.beancontext

## Interface BeanContextServices

- All Superinterfaces:
    `BeanContext`, `BeanContextChild`, `BeanContextServiceRevokedListener`, `BeanContextServicesListener`, `Collection`, `DesignMode`, `EventListener`, `Iterable`, `Visibility`
  All Known Implementing Classes:
    `BeanContextServicesSupport`

      public interface BeanContextServices
      extends BeanContext, BeanContextServicesListener

  The BeanContextServices interface provides a mechanism for a BeanContext to expose generic "services" to the BeanContextChild objects within.

- - ### Field Summary

    - ### Fields declared in interface java.beans.beancontext.BeanContext

      `globalHierarchyLock`

    - ### Fields declared in interface java.beans.DesignMode

      `PROPERTYNAME`

  - ### Method Summary

    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addBeanContextServicesListener​(BeanContextServicesListener bcsl)` | Adds a `BeanContextServicesListener` to this BeanContext
    `boolean` | `addService​(Class<?> serviceClass, BeanContextServiceProvider serviceProvider)` | Adds a service to this BeanContext.
    `Iterator<?>` | `getCurrentServiceClasses()` | Gets the currently available services for this context.
    `Iterator<?>` | `getCurrentServiceSelectors​(Class<?> serviceClass)` | Gets the list of service dependent service parameters (Service Selectors) for the specified service, by calling getCurrentServiceSelectors() on the underlying BeanContextServiceProvider.
    `Object` | `getService​(BeanContextChild child, Object requestor, Class<?> serviceClass, Object serviceSelector, BeanContextServiceRevokedListener bcsrl)` | A `BeanContextChild`, or any arbitrary object associated with a `BeanContextChild`, may obtain a reference to a currently registered service from its nesting `BeanContextServices` via invocation of this method.
    `boolean` | `hasService​(Class<?> serviceClass)` | Reports whether or not a given service is currently available from this context.
    `void` | `releaseService​(BeanContextChild child, Object requestor, Object service)` | Releases a `BeanContextChild`'s (or any arbitrary object associated with a BeanContextChild) reference to the specified service by calling releaseService() on the underlying `BeanContextServiceProvider`.
    `void` | `removeBeanContextServicesListener​(BeanContextServicesListener bcsl)` | Removes a `BeanContextServicesListener` from this `BeanContext`
    `void` | `revokeService​(Class<?> serviceClass, BeanContextServiceProvider serviceProvider, boolean revokeCurrentServicesNow)` | BeanContextServiceProviders wishing to remove a currently registered service from this context may do so via invocation of this method.

    - ### Methods declared in interface java.beans.beancontext.BeanContext

      `addBeanContextMembershipListener, getResource, getResourceAsStream, instantiateChild, removeBeanContextMembershipListener`

    - ### Methods declared in interface java.beans.beancontext.BeanContextChild

      `addPropertyChangeListener, addVetoableChangeListener, getBeanContext, removePropertyChangeListener, removeVetoableChangeListener, setBeanContext`

    - ### Methods declared in interface java.beans.beancontext.BeanContextServiceRevokedListener

      `serviceRevoked`

    - ### Methods declared in interface java.beans.beancontext.BeanContextServicesListener

      `serviceAvailable`

    - ### Methods declared in interface java.util.Collection

      `add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, parallelStream, remove, removeAll, removeIf, retainAll, size, spliterator, stream, toArray, toArray, toArray`

    - ### Methods declared in interface java.beans.DesignMode

      `isDesignTime, setDesignTime`

    - ### Methods declared in interface java.lang.Iterable

      `forEach`

    - ### Methods declared in interface java.beans.Visibility

      `avoidingGui, dontUseGui, needsGui, okToUseGui`

- - ### Method Detail

    - #### addService

          boolean addService​(Class<?> serviceClass,
                             BeanContextServiceProvider serviceProvider)

      Adds a service to this BeanContext. `BeanContextServiceProvider`s call this method to register a particular service with this context. If the service has not previously been added, the `BeanContextServices` associates the service with the `BeanContextServiceProvider` and fires a `BeanContextServiceAvailableEvent` to all currently registered `BeanContextServicesListeners`. The method then returns `true`, indicating that the addition of the service was successful. If the given service has already been added, this method simply returns `false`.
      Parameters:
        `serviceClass` - the service to add
        `serviceProvider` - the `BeanContextServiceProvider` associated with the service
      Returns:
        true if the service was successful added, false otherwise

    - #### revokeService

          void revokeService​(Class<?> serviceClass,
                             BeanContextServiceProvider serviceProvider,
                             boolean revokeCurrentServicesNow)

      BeanContextServiceProviders wishing to remove a currently registered service from this context may do so via invocation of this method. Upon revocation of the service, the `BeanContextServices` fires a `BeanContextServiceRevokedEvent` to its list of currently registered `BeanContextServiceRevokedListeners` and `BeanContextServicesListeners`.
      Parameters:
        `serviceClass` - the service to revoke from this BeanContextServices
        `serviceProvider` - the BeanContextServiceProvider associated with this particular service that is being revoked
        `revokeCurrentServicesNow` - a value of `true` indicates an exceptional circumstance where the `BeanContextServiceProvider` or `BeanContextServices` wishes to immediately terminate service to all currently outstanding references to the specified service.

    - #### hasService

          boolean hasService​(Class<?> serviceClass)

      Reports whether or not a given service is currently available from this context.
      Parameters:
        `serviceClass` - the service in question
      Returns:
        true if the service is available

    - #### getService

          Object getService​(BeanContextChild child,
                            Object requestor,
                            Class<?> serviceClass,
                            Object serviceSelector,
                            BeanContextServiceRevokedListener bcsrl)
                     throws TooManyListenersException

      A `BeanContextChild`, or any arbitrary object associated with a `BeanContextChild`, may obtain a reference to a currently registered service from its nesting `BeanContextServices` via invocation of this method. When invoked, this method gets the service by calling the getService() method on the underlying `BeanContextServiceProvider`.
      Parameters:
        `child` - the `BeanContextChild` associated with this request
        `requestor` - the object requesting the service
        `serviceClass` - class of the requested service
        `serviceSelector` - the service dependent parameter
        `bcsrl` - the `BeanContextServiceRevokedListener` to notify if the service should later become revoked
      Returns:
        a reference to this context's named Service as requested or `null`
      Throws:
        `TooManyListenersException` - if there are too many listeners

    - #### releaseService

          void releaseService​(BeanContextChild child,
                              Object requestor,
                              Object service)

      Releases a `BeanContextChild`'s (or any arbitrary object associated with a BeanContextChild) reference to the specified service by calling releaseService() on the underlying `BeanContextServiceProvider`.
      Parameters:
        `child` - the `BeanContextChild`
        `requestor` - the requestor
        `service` - the service

    - #### getCurrentServiceClasses

          Iterator<?> getCurrentServiceClasses()

      Gets the currently available services for this context.
      Returns:
        an `Iterator` consisting of the currently available services

    - #### getCurrentServiceSelectors

          Iterator<?> getCurrentServiceSelectors​(Class<?> serviceClass)

      Gets the list of service dependent service parameters (Service Selectors) for the specified service, by calling getCurrentServiceSelectors() on the underlying BeanContextServiceProvider.
      Parameters:
        `serviceClass` - the specified service
      Returns:
        the currently available service selectors for the named serviceClass

    - #### addBeanContextServicesListener

          void addBeanContextServicesListener​(BeanContextServicesListener bcsl)

      Adds a `BeanContextServicesListener` to this BeanContext
      Parameters:
        `bcsl` - the `BeanContextServicesListener` to add

    - #### removeBeanContextServicesListener

          void removeBeanContextServicesListener​(BeanContextServicesListener bcsl)

      Removes a `BeanContextServicesListener` from this `BeanContext`
      Parameters:
        `bcsl` - the `BeanContextServicesListener` to remove from this context