FileDocCategorySizeDatePackage
BeanContextChildSupport.javaAPI DocJava SE 5 API11797Fri Aug 26 14:56:58 BST 2005java.beans.beancontext

BeanContextChildSupport

public class BeanContextChildSupport extends Object implements Serializable, BeanContextServicesListener, BeanContextChild

This is a general support class to provide support for implementing the BeanContextChild protocol. This class may either be directly subclassed, or encapsulated and delegated to in order to implement this interface for a given component.

author
Laurence P. G. Cable
version
1.16, 03/04/04
since
1.2
see
java.beans.beancontext.BeanContext
see
java.beans.beancontext.BeanContextServices
see
java.beans.beancontext.BeanContextChild

Fields Summary
static final long
serialVersionUID
public BeanContextChild
beanContextChildPeer
The BeanContext in which this BeanContextChild is nested.
protected PropertyChangeSupport
pcSupport
The PropertyChangeSupport associated with this BeanContextChildSupport.
protected VetoableChangeSupport
vcSupport
The VetoableChangeSupport associated with this BeanContextChildSupport.
protected transient BeanContext
beanContext
protected transient boolean
rejectedSetBCOnce
A flag indicating that there has been at least one PropertyChangeVetoException thrown for the attempted setBeanContext operation.
Constructors Summary
public BeanContextChildSupport()
construct a BeanContextChildSupport where this class has been subclassed in order to implement the JavaBean component itself.


                           

      
	super();

	beanContextChildPeer = this;

	pcSupport = new PropertyChangeSupport(beanContextChildPeer);
	vcSupport = new VetoableChangeSupport(beanContextChildPeer);
    
public BeanContextChildSupport(BeanContextChild bcc)
construct a BeanContextChildSupport where the JavaBean component itself implements BeanContextChild, and encapsulates this, delegating that interface to this implementation

	super();

	beanContextChildPeer = (bcc != null) ? bcc : this;

	pcSupport = new PropertyChangeSupport(beanContextChildPeer);
	vcSupport = new VetoableChangeSupport(beanContextChildPeer);
    
Methods Summary
public voidaddPropertyChangeListener(java.lang.String name, java.beans.PropertyChangeListener pcl)
Add a PropertyChangeListener for a specific property. The same listener object may be added more than once. For each property, the listener will be invoked the number of times it was added for that property. If name or pcl is null, no exception is thrown and no action is taken.

param
name The name of the property to listen on
param
pcl The PropertyChangeListener to be added

	pcSupport.addPropertyChangeListener(name, pcl);
    
public voidaddVetoableChangeListener(java.lang.String name, java.beans.VetoableChangeListener vcl)
Add a VetoableChangeListener for a specific property. The same listener object may be added more than once. For each property, the listener will be invoked the number of times it was added for that property. If name or vcl is null, no exception is thrown and no action is taken.

param
name The name of the property to listen on
param
vcl The VetoableChangeListener to be added

	vcSupport.addVetoableChangeListener(name, vcl);
    
public voidfirePropertyChange(java.lang.String name, java.lang.Object oldValue, java.lang.Object newValue)
Report a bound property update to any registered listeners. No event is fired if old and new are equal and non-null.

param
name The programmatic name of the property that was changed
param
oldValue The old value of the property
param
newValue The new value of the property

	pcSupport.firePropertyChange(name, oldValue, newValue);
    
public voidfireVetoableChange(java.lang.String name, java.lang.Object oldValue, java.lang.Object newValue)
Report a vetoable property update to any registered listeners. If anyone vetos the change, then fire a new event reverting everyone to the old value and then rethrow the PropertyVetoException.

No event is fired if old and new are equal and non-null.

param
name The programmatic name of the property that is about to change
param
oldValue The old value of the property
param
newValue - The new value of the property
throws
PropertyVetoException if the recipient wishes the property change to be rolled back.

	vcSupport.fireVetoableChange(name, oldValue, newValue);
    
public synchronized java.beans.beancontext.BeanContextgetBeanContext()
Gets the nesting BeanContext for this BeanContextChildSupport.

return
the nesting BeanContext for this BeanContextChildSupport.

 return beanContext; 
public java.beans.beancontext.BeanContextChildgetBeanContextChildPeer()
Gets the BeanContextChild associated with this BeanContextChildSupport.

return
the BeanContextChild peer of this class

 return beanContextChildPeer; 
protected voidinitializeBeanContextResources()
This method may be overridden by subclasses to provide their own initialization behaviors. When invoked any resources requried by the BeanContextChild should be obtained from the current BeanContext.

	// do nothing
    
public booleanisDelegated()
Reports whether or not this class is a delegate of another.

return
true if this class is a delegate of another

 return !this.equals(beanContextChildPeer); 
private voidreadObject(java.io.ObjectInputStream ois)
Restore a persistent object, must wait for subsequent setBeanContext() to fully restore any resources obtained from the new nesting BeanContext

	ois.defaultReadObject();
    
protected voidreleaseBeanContextResources()
This method may be overridden by subclasses to provide their own release behaviors. When invoked any resources held by this instance obtained from its current BeanContext property should be released since the object is no longer nested within that BeanContext.

	// do nothing
    
public voidremovePropertyChangeListener(java.lang.String name, java.beans.PropertyChangeListener pcl)
Remove a PropertyChangeListener for a specific property. If pcl was added more than once to the same event source for the specified property, it will be notified one less time after being removed. If name is null, no exception is thrown and no action is taken. If pcl is null, or was never added for the specified property, no exception is thrown and no action is taken.

param
name The name of the property that was listened on
param
pcl The PropertyChangeListener to be removed

	pcSupport.removePropertyChangeListener(name, pcl);
    
public voidremoveVetoableChangeListener(java.lang.String name, java.beans.VetoableChangeListener vcl)
Removes a VetoableChangeListener. If pcl was added more than once to the same event source for the specified property, it will be notified one less time after being removed. If name is null, no exception is thrown and no action is taken. If vcl is null, or was never added for the specified property, no exception is thrown and no action is taken.

param
name The name of the property that was listened on
param
vcl The VetoableChangeListener to be removed

	vcSupport.removeVetoableChangeListener(name, vcl);
    
public voidserviceAvailable(java.beans.beancontext.BeanContextServiceAvailableEvent bcsae)
A new service is available from the nesting BeanContext. Subclasses may override this method in order to implement their own behaviors

param
bcsae The BeanContextServiceAvailableEvent fired as a result of a service becoming available

 
public voidserviceRevoked(java.beans.beancontext.BeanContextServiceRevokedEvent bcsre)
A service provided by the nesting BeanContext has been revoked. Subclasses may override this method in order to implement their own behaviors.

param
bcsre The BeanContextServiceRevokedEvent fired as a result of a service being revoked

 
public synchronized voidsetBeanContext(java.beans.beancontext.BeanContext bc)
Sets the BeanContext for this BeanContextChildSupport.

param
bc the new value to be assigned to the BeanContext property
throws
PropertyVetoException if the change is rejected

	if (bc == beanContext) return;

	BeanContext oldValue = beanContext;
	BeanContext newValue = bc;

	if (!rejectedSetBCOnce) {
	    if (rejectedSetBCOnce = !validatePendingSetBeanContext(bc)) {
		throw new PropertyVetoException(
		    "setBeanContext() change rejected:",
		    new PropertyChangeEvent(beanContextChildPeer, "beanContext", oldValue, newValue)
		);
	    }

	    try {
		fireVetoableChange("beanContext",
				   oldValue,
				   newValue
		);
	    } catch (PropertyVetoException pve) {
		rejectedSetBCOnce = true;

		throw pve; // re-throw
	    }
	}

	if (beanContext != null) releaseBeanContextResources();

	beanContext       = newValue;
	rejectedSetBCOnce = false;

	firePropertyChange("beanContext", 
			   oldValue,
			   newValue
	);

	if (beanContext != null) initializeBeanContextResources();
    
public booleanvalidatePendingSetBeanContext(java.beans.beancontext.BeanContext newValue)
Called from setBeanContext to validate (or otherwise) the pending change in the nesting BeanContext property value. Returning false will cause setBeanContext to throw PropertyVetoException.

param
newValue the new value that has been requested for the BeanContext property
return
true if the change operation is to be vetoed

	return true;
    
private voidwriteObject(java.io.ObjectOutputStream oos)
Write the persistence state of the object.


	/*
	 * dont serialize if we are delegated and the delegator isnt also
	 * serializable.
	 */

	if (!equals(beanContextChildPeer) && !(beanContextChildPeer instanceof Serializable))
	    throw new IOException("BeanContextChildSupport beanContextChildPeer not Serializable");

	else 
            oos.defaultWriteObject();