java.beans.beancontext

Class BeanContextServicesSupport

Implemented Interfaces:
BeanContext, BeanContextChild, BeanContextServiceRevokedListener, BeanContextServices, BeanContextServicesListener, Collection<E>, DesignMode, EventListener, Iterable<E>, PropertyChangeListener, Serializable, VetoableChangeListener, Visibility

public class BeanContextServicesSupport
extends BeanContextSupport
implements BeanContextServices

This is a helper class for implementing a bean context which supplies services. It is intended to be used either by subclassing or by calling methods of this implementation from another.
Since:
1.2
See Also:
Serialized Form

Nested Class Summary

protected class
BeanContextServicesSupport.BCSSChild
protected class
BeanContextServicesSupport.BCSSProxyServiceProvider
protected static class
BeanContextServicesSupport.BCSSServiceProvider

Nested classes/interfaces inherited from class java.beans.beancontext.BeanContextSupport

BeanContextSupport.BCSChild, BeanContextSupport.BCSIterator

Field Summary

protected ArrayList<E>
bcsListeners
A collection of listeners who receive availability and revocation notifications.
protected BeanContextServicesSupport.BCSSProxyServiceProvider
proxy
protected int
serializable
The number of serializable service providers.
protected HashMap<K,V>
services
A map of registered services, linking the service class to its associated BeanContextServicesSupport.BCSSServiceProvider.

Fields inherited from class java.beans.beancontext.BeanContextSupport

bcmListeners, children, designTime, locale, okToUseGui

Fields inherited from class java.beans.beancontext.BeanContextChildSupport

beanContext, beanContextChildPeer, pcSupport, rejectedSetBCOnce, vcSupport

Fields inherited from interface java.beans.beancontext.BeanContext

globalHierarchyLock

Fields inherited from interface java.beans.DesignMode

PROPERTYNAME

Constructor Summary

BeanContextServicesSupport()
Construct a BeanContextServicesSupport instance.
BeanContextServicesSupport(BeanContextServices peer)
Construct a BeanContextServicesSupport instance.
BeanContextServicesSupport(BeanContextServices peer, Locale locale)
Construct a BeanContextServicesSupport instance.
BeanContextServicesSupport(BeanContextServices peer, Locale locale, boolean dtime)
Construct a BeanContextServicesSupport instance.
BeanContextServicesSupport(BeanContextServices peer, Locale locale, boolean dtime, boolean visible)
Construct a BeanContextServicesSupport instance.

Method Summary

void
addBeanContextServicesListener(BeanContextServicesListener listener)
Adds a new listener for service availability and revocation events.
boolean
addService(Class<T> serviceClass, BeanContextServiceProvider bcsp)
Registers a new service from the specified service provider.
protected boolean
addService(Class<T> serviceClass, BeanContextServiceProvider bcsp, boolean fireEvent)
Registers a new service from the specified service provider.
protected void
bcsPreDeserializationHook(ObjectInputStream ois)
Deserializes any service providers which are serializable.
protected void
bcsPreSerializationHook(ObjectOutputStream oos)
Serializes any service providers which are serializable.
protected void
childJustRemovedHook(Object child, BeanContextSupport.BCSChild bcsc)
Revokes any services used by a child that has just been removed.
protected BeanContextSupport.BCSChild
createBCSChild(Object targetChild, Object peer)
Overrides the BeanContextSupport.createBCSChild(Object,Object) method so as to use a BeanContextServicesSupport.BCSSChild instead.
protected BeanContextServicesSupport.BCSSServiceProvider
createBCSSServiceProvider(Class<T> sc, BeanContextServiceProvider bcsp)
Provides a hook so that subclasses can replace the BeanContextServicesSupport.BCSSServiceProvider class, used to store registered service providers, with a subclass without replacing the addService(Class,BeanContextServiceProvider) method.
protected void
fireServiceAdded(BeanContextServiceAvailableEvent bcssae)
Sends a BeanContextServiceAvailableEvent to all registered listeners.
protected void
fireServiceAdded(Class<T> serviceClass)
Sends a BeanContextServiceAvailableEvent to all registered listeners.
protected void
fireServiceRevoked(BeanContextServiceRevokedEvent event)
Sends a BeanContextServiceRevokedEvent to all registered listeners.
protected void
fireServiceRevoked(Class<T> serviceClass, boolean revokeNow)
Sends a BeanContextServiceRevokedEvent to all registered listeners.
BeanContextServices
getBeanContextServicesPeer()
Returns the services peer given at construction time, or null if no peer was given.
protected static BeanContextServicesListener
getChildBeanContextServicesListener(Object child)
Returns child as an instance of BeanContextServicesListener, or null if child does not implement that interface.
Iterator<E>
getCurrentServiceClasses()
Returns an iterator over the currently available services.
Iterator<E>
getCurrentServiceSelectors(Class<T> serviceClass)
Returns an iterator over the service selectors of the service provider for the given service.
Object
getService(BeanContextChild child, Object requestor, Class<T> serviceClass, Object serviceSelector, BeanContextServiceRevokedListener bcsrl)
Retrieves the specified service.
boolean
hasService(Class<T> serviceClass)
Returns true if the specified service is available.
void
initialize()
protected void
initializeBeanContextResources()
Subclasses may override this method to allocate resources from the nesting bean context.
protected void
releaseBeanContextResources()
Relinquishes any resources obtained from the parent context.
void
releaseService(BeanContextChild child, Object requestor, Object service)
Releases the reference to a service held by a BeanContextChild (or an arbitrary object associated with it).
void
removeBeanContextServicesListener(BeanContextServicesListener listener)
void
revokeService(Class<T> serviceClass, BeanContextServiceProvider bcsp, boolean revokeCurrentServicesNow)
Revokes the given service.
void
serviceAvailable(BeanContextServiceAvailableEvent bcssae)
Called by BeanContextServices whenever a service is made available.
void
serviceRevoked(BeanContextServiceRevokedEvent bcssre)

Methods inherited from class java.beans.beancontext.BeanContextSupport

add, addAll, addBeanContextMembershipListener, avoidingGui, bcsChildren, bcsPreDeserializationHook, bcsPreSerializationHook, childDeserializedHook, childJustAddedHook, childJustRemovedHook, classEquals, clear, contains, containsAll, containsKey, copyChildren, createBCSChild, deserialize, dontUseGui, fireChildrenAdded, fireChildrenRemoved, getBeanContextPeer, getChildBeanContextChild, getChildBeanContextMembershipListener, getChildPropertyChangeListener, getChildSerializable, getChildVetoableChangeListener, getChildVisibility, getLocale, getResource, getResourceAsStream, initialize, instantiateChild, isDesignTime, isEmpty, isSerializing, iterator, needsGui, okToUseGui, propertyChange, readChildren, remove, remove, removeAll, removeBeanContextMembershipListener, retainAll, serialize, setDesignTime, setLocale, size, toArray, toArray, validatePendingAdd, validatePendingRemove, vetoableChange, writeChildren

Methods inherited from class java.beans.beancontext.BeanContextChildSupport

addPropertyChangeListener, addVetoableChangeListener, firePropertyChange, fireVetoableChange, getBeanContext, getBeanContextChildPeer, initializeBeanContextResources, isDelegated, releaseBeanContextResources, removePropertyChangeListener, removeVetoableChangeListener, serviceAvailable, serviceRevoked, setBeanContext, validatePendingSetBeanContext

Methods inherited from class java.lang.Object

clone, equals, extends Object> getClass, finalize, hashCode, notify, notifyAll, toString, wait, wait, wait

Field Details

bcsListeners

protected ArrayList<E> bcsListeners
A collection of listeners who receive availability and revocation notifications.

proxy

protected BeanContextServicesSupport.BCSSProxyServiceProvider proxy

serializable

protected int serializable
The number of serializable service providers.

services

protected HashMap<K,V> services
A map of registered services, linking the service class to its associated BeanContextServicesSupport.BCSSServiceProvider.

Constructor Details

BeanContextServicesSupport

public BeanContextServicesSupport()
Construct a BeanContextServicesSupport instance.

BeanContextServicesSupport

public BeanContextServicesSupport(BeanContextServices peer)
Construct a BeanContextServicesSupport instance.
Parameters:
peer - the bean context services peer (null permitted).

BeanContextServicesSupport

public BeanContextServicesSupport(BeanContextServices peer,
                                  Locale locale)
Construct a BeanContextServicesSupport instance.
Parameters:
peer - the bean context peer (null permitted).
locale - the locale (null permitted, equivalent to the default locale).

BeanContextServicesSupport

public BeanContextServicesSupport(BeanContextServices peer,
                                  Locale locale,
                                  boolean dtime)
Construct a BeanContextServicesSupport instance.
Parameters:
peer - the bean context peer (null permitted).
locale - the locale (null permitted, equivalent to the default locale).
dtime - a flag indicating whether or not the bean context is in design time mode.

BeanContextServicesSupport

public BeanContextServicesSupport(BeanContextServices peer,
                                  Locale locale,
                                  boolean dtime,
                                  boolean visible)
Construct a BeanContextServicesSupport instance.
Parameters:
peer - the bean context peer (null permitted).
locale - the locale (null permitted, equivalent to the default locale).
dtime - a flag indicating whether or not the bean context is in design time mode.
visible - initial value of the okToUseGui flag.

Method Details

addBeanContextServicesListener

public void addBeanContextServicesListener(BeanContextServicesListener listener)
Adds a new listener for service availability and revocation events.
Specified by:
addBeanContextServicesListener in interface BeanContextServices
Parameters:
listener - the listener to add.

addService

public boolean addService(Class<T> serviceClass,
                          BeanContextServiceProvider bcsp)
Registers a new service from the specified service provider. The service is internally associated with the service provider and a BeanContextServiceAvailableEvent is fired. If the service is already registered, then this method instead returns false. This is equivalent to calling addService(serviceClass, bcsp, true).
Specified by:
addService in interface BeanContextServices
Parameters:
serviceClass - the class of the service to be registered.
bcsp - the provider of the given service.
Returns:
true if the service was registered successfully.

addService

protected boolean addService(Class<T> serviceClass,
                             BeanContextServiceProvider bcsp,
                             boolean fireEvent)
Registers a new service from the specified service provider. The service is internally associated with the service provider and (if fireEvent is true) a BeanContextServiceAvailableEvent is fired. If the service is already registered, then this method instead returns false.
Parameters:
serviceClass - the class of the service to be registered.
bcsp - the provider of the given service.
fireEvent - true if a service availability event should be fired.
Returns:
true if the service was registered successfully.

bcsPreDeserializationHook

protected void bcsPreDeserializationHook(ObjectInputStream ois)
            throws ClassNotFoundException,
                   IOException
Deserializes any service providers which are serializable. This method is called by the readObject method of BeanContextSupport prior to deserialization of the children. Subclasses may envelope its behaviour in order to read further serialized data to the stream.
Overrides:
bcsPreDeserializationHook in interface BeanContextSupport
Parameters:
ois - the stream from which data is being deserialized.
Throws:
IOException - if an I/O error occurs.
ClassNotFoundException - if the class of a deserialized object can not be found.

bcsPreSerializationHook

protected void bcsPreSerializationHook(ObjectOutputStream oos)
            throws IOException
Serializes any service providers which are serializable. This method is called by the writeObject method of BeanContextSupport prior to serialization of the children. Subclasses may envelope its behaviour in order to add further serialized data to the stream.
Overrides:
bcsPreSerializationHook in interface BeanContextSupport
Parameters:
oos - the stream to which data is being serialized.
Throws:
IOException - if an I/O error occurs.

childJustRemovedHook

protected void childJustRemovedHook(Object child,
                                    BeanContextSupport.BCSChild bcsc)
Revokes any services used by a child that has just been removed. The superclass (BeanContextSupport) calls this method when a child has just been successfully removed. Subclasses can extend this method in order to perform additional operations on child removal.
Overrides:
childJustRemovedHook in interface BeanContextSupport
Parameters:
child - the child being removed.
bcsc - the support object for the child.

createBCSChild

protected BeanContextSupport.BCSChild createBCSChild(Object targetChild,
                                                     Object peer)
Overrides:
createBCSChild in interface BeanContextSupport
Parameters:
targetChild - the child to create the child for.
peer - the peer which relates to the child if a proxy is used.
Returns:
a new instance of BeanContextServicesSupport.BCSSChild.

createBCSSServiceProvider

protected BeanContextServicesSupport.BCSSServiceProvider createBCSSServiceProvider(Class<T> sc,
                                                                                   BeanContextServiceProvider bcsp)
Provides a hook so that subclasses can replace the BeanContextServicesSupport.BCSSServiceProvider class, used to store registered service providers, with a subclass without replacing the addService(Class,BeanContextServiceProvider) method.
Parameters:
sc - the class of service being registered.
bcsp - the provider of the service.
Returns:
a instance of BeanContextServicesSupport.BCSSServiceProvider wrapping the provider.

fireServiceAdded

protected final void fireServiceAdded(BeanContextServiceAvailableEvent bcssae)
Sends a BeanContextServiceAvailableEvent to all registered listeners.
Parameters:
bcssae - the event to send.

fireServiceAdded

protected final void fireServiceAdded(Class<T> serviceClass)
Sends a BeanContextServiceAvailableEvent to all registered listeners.
Parameters:
serviceClass - the service that is now available.

fireServiceRevoked

protected final void fireServiceRevoked(BeanContextServiceRevokedEvent event)
Sends a BeanContextServiceRevokedEvent to all registered listeners.
Parameters:
event - the event to send.

fireServiceRevoked

protected final void fireServiceRevoked(Class<T> serviceClass,
                                        boolean revokeNow)
Sends a BeanContextServiceRevokedEvent to all registered listeners.
Parameters:
serviceClass - the service that has been revoked.

getBeanContextServicesPeer

public BeanContextServices getBeanContextServicesPeer()
Returns the services peer given at construction time, or null if no peer was given.
Returns:
the BeanContextServices peer.

getChildBeanContextServicesListener

protected static final BeanContextServicesListener getChildBeanContextServicesListener(Object child)
Returns child as an instance of BeanContextServicesListener, or null if child does not implement that interface.
Parameters:
child - the child (null permitted).
Returns:
The child cast to BeanContextServicesListener.

getCurrentServiceClasses

public Iterator<E> getCurrentServiceClasses()
Returns an iterator over the currently available services.
Specified by:
getCurrentServiceClasses in interface BeanContextServices
Returns:
an iterator over the currently available services.

getCurrentServiceSelectors

public Iterator<E> getCurrentServiceSelectors(Class<T> serviceClass)
Returns an iterator over the service selectors of the service provider for the given service. The iterator is actually obtained by calling the BeanContextServiceProvider.getCurrentServiceSelectors(BeanContextServices,Class) of the provider itself. If the specified service is not available, null is returned.
Specified by:
getCurrentServiceSelectors in interface BeanContextServices
Parameters:
serviceClass - the service whose provider's selectors should be iterated over.
Returns:
an Iterator over the service selectors of the provider of the given service.

getService

public Object getService(BeanContextChild child,
                         Object requestor,
                         Class<T> serviceClass,
                         Object serviceSelector,
                         BeanContextServiceRevokedListener bcsrl)
            throws TooManyListenersException
Retrieves the specified service. If a provider for the service is registered in this context, then the request is passed on to the provider and the service returned. Otherwise, the request is delegated to a parent BeanContextServices, if possible. If the service can not be found at all, then null is returned.
Specified by:
getService in interface BeanContextServices
Parameters:
child - the child obtaining the reference.
requestor - the requestor of the service, which may be the child itself.
serviceClass - the service being requested.
serviceSelector - an additional service-dependent parameter (may be null if not appropriate).
bcsrl - a listener used to notify the requestor that the service has since been revoked.
Returns:
a reference to the service requested, or null.
Throws:
TooManyListenersException - according to Sun's documentation.

hasService

public boolean hasService(Class<T> serviceClass)
Returns true if the specified service is available.
Specified by:
hasService in interface BeanContextServices
Parameters:
serviceClass - the service to check for.
Returns:
true if the service is available.

initialize

public void initialize()
Overrides:
initialize in interface BeanContextSupport

initializeBeanContextResources

protected void initializeBeanContextResources()
Subclasses may override this method to allocate resources from the nesting bean context.
Overrides:
initializeBeanContextResources in interface BeanContextChildSupport

releaseBeanContextResources

protected void releaseBeanContextResources()
Relinquishes any resources obtained from the parent context. Specifically, those services obtained from the parent are revoked. Subclasses may override this method to deallocate resources from the nesting bean context.
Overrides:
releaseBeanContextResources in interface BeanContextChildSupport

releaseService

public void releaseService(BeanContextChild child,
                           Object requestor,
                           Object service)
Releases the reference to a service held by a BeanContextChild (or an arbitrary object associated with it). It simply calls the appropriate method on the underlying provider.
Specified by:
releaseService in interface BeanContextServices
Parameters:
child - the child who holds the reference.
requestor - the object that requested the reference.
service - the service being released.

removeBeanContextServicesListener

public void removeBeanContextServicesListener(BeanContextServicesListener listener)
Specified by:
removeBeanContextServicesListener in interface BeanContextServices

revokeService

public void revokeService(Class<T> serviceClass,
                          BeanContextServiceProvider bcsp,
                          boolean revokeCurrentServicesNow)
Revokes the given service. A BeanContextServiceRevokedEvent is emitted to all registered BeanContextServiceRevokedListeners and BeanContextServiceListeners. If revokeCurrentServicesNow is true, termination of the service is immediate. Otherwise, prior acquisitions of the service by requestors remain valid.
Specified by:
revokeService in interface BeanContextServices
Parameters:
serviceClass - the service to revoke.
bcsp - the provider of the revoked service.
revokeCurrentServicesNow - true if this is an exceptional circumstance where service should be immediately revoked.

serviceAvailable

public void serviceAvailable(BeanContextServiceAvailableEvent bcssae)
Called by BeanContextServices whenever a service is made available.
Specified by:
serviceAvailable in interface BeanContextServicesListener
Overrides:
serviceAvailable in interface BeanContextChildSupport
Parameters:

serviceRevoked

public void serviceRevoked(BeanContextServiceRevokedEvent bcssre)
Specified by:
serviceRevoked in interface BeanContextServiceRevokedListener
Overrides:
serviceRevoked in interface BeanContextChildSupport

BeanContextServicesSupport.java -- Copyright (C) 2003, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.