Project Wonder 5.0

er.extensions.foundation
Class ERXMulticastingDelegate

java.lang.Object
  extended by er.extensions.foundation.ERXMulticastingDelegate
Direct Known Subclasses:
ERXDatabaseContextMulticastingDelegate

public abstract class ERXMulticastingDelegate
extends java.lang.Object

By design, WebObjects' classes that accept a delegate only accept a single object. ERXMulticastingDelegate allows multiple delegate objects to be aggregated and presented as a single delegate object.

Delegates are called in the order they are added. Methods are called until one of the delegates handles the message. Delegate methods that have a Object or boolean return type are called until one returns a non-null response that is not the default value. Delegate methods that have a void return type are always called.

Here is an example if you have multiple delegates that you want to set up.

 ERXDatabaseContextMulticastingDelegate multiDelegate = new ERXDatabaseContextMulticastingDelegate();
 multiDeletegate.addDelegate(new ERXDatabaseContextDelegate());
 multiDeletegate.addDelegate(new ERXEntityDependencyOrderingDelegate());
 EODatabaseContext.setDefaultDelegate(multiDelegate);
 

Here is a usage example to handle the case where a deletegate may already be set

 Object newDelegate = new ERXEntityDependencyOrderingDelegate();
 ERXDatabaseContextMulticastingDelegate multiDelegate;
 if (EODatabaseContext.defaultDelegate() == null) {
     multiDelegate = new ERXDatabaseContextMulticastingDelegate();
 }
 else {
     if (EODatabaseContext.defaultDelegate() instanceof ERXDatabaseContextMulticastingDelegate) {
            multiDelegate = (ERXDatabaseContextMulticastingDelegate)EODatabaseContext.defaultDelegate();
     }
     else {
         multiDelegate = new ERXDatabaseContextMulticastingDelegate();
         multiDelegate.addDelegate(EODatabaseContext.defaultDelegate());
     }
 }
 multiDelegate.addDelegate(newDelegate);
 EODatabaseContext.setDefaultDelegate(multiDelegate);
 

This class needs to be implemented for each delegate interface. All methods on the interface should be implemented and should call one of the perform... or booleanPerform... methods on this class. See ERXDatabaseContextMulticastingDelegate for example usage. One result of this implementation is that delegates can be added and removed at any time.

Author:
chill

Constructor Summary
ERXMulticastingDelegate()
           
 
Method Summary
 void addDelegate(java.lang.Object delegate)
          Adds delegate at the end of the chain.
 void addDelegateAtStart(java.lang.Object delegate)
          Adds delegate at the start of the chain.
protected  boolean booleanPerform(java.lang.String methodName, boolean defaultResult)
           
protected  boolean booleanPerform(java.lang.String methodName, java.lang.Object[] args, boolean defaultResult)
           
protected  boolean booleanPerform(java.lang.String methodName, java.lang.Object arg, boolean defaultResult)
           
protected  boolean booleanPerform(java.lang.String methodName, java.lang.Object arg1, java.lang.Object arg2, boolean defaultResult)
           
protected  boolean booleanPerform(java.lang.String methodName, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, boolean defaultResult)
           
 com.webobjects.foundation.NSArray delegates()
          This method returns an array of com.webobjects.foundation._NSDelegate, not the delegate objects originally added by calling addDelegate...
 boolean hasDelegate(java.lang.Object delegate)
          Returns true if delegate is represented in delegates().
protected  java.lang.Object perform(java.lang.String methodName, java.lang.Object defaultResult)
           
protected  java.lang.Object perform(java.lang.String methodName, java.lang.Object[] args, java.lang.Object defaultResult)
          This is the central method for dispatching messages to the delegates aggregated by this object.
protected  java.lang.Object perform(java.lang.String methodName, java.lang.Object arg, java.lang.Object defaultResult)
           
protected  java.lang.Object perform(java.lang.String methodName, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object defaultResult)
           
protected  java.lang.Object perform(java.lang.String methodName, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object defaultResult)
           
protected  java.lang.Object perform(java.lang.String methodName, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4, java.lang.Object arg5, java.lang.Object defaultResult)
           
 void removeDelegate(java.lang.Object delegate)
          Removes delegate from the delegates called.
 void setDelegateOrder(com.webobjects.foundation.NSArray orderedDelegates)
          Use this to set the delegate order if the addDelegate...
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ERXMulticastingDelegate

public ERXMulticastingDelegate()
Method Detail

addDelegate

public void addDelegate(java.lang.Object delegate)
Adds delegate at the end of the chain. It becomes the last delegate called.

Parameters:
delegate - Object to add as one of the delegates called

addDelegateAtStart

public void addDelegateAtStart(java.lang.Object delegate)
Adds delegate at the start of the chain. It becomes the first delegate called.

Parameters:
delegate - Object to add as one of the delegates called

removeDelegate

public void removeDelegate(java.lang.Object delegate)
Removes delegate from the delegates called.

Parameters:
delegate - Object to remove as one of the delegates called

hasDelegate

public boolean hasDelegate(java.lang.Object delegate)
Returns true if delegate is represented in delegates().

Parameters:
delegate - Object to test for membership in delegates()
Returns:
true if delegate is represented in delegates()

delegates

public com.webobjects.foundation.NSArray delegates()
This method returns an array of com.webobjects.foundation._NSDelegate, not the delegate objects originally added by calling addDelegate... Call delegate() on the elements in this list to examine the delegate objects originally added by calling addDelegate...

Returns:
the delegates in the order they will be called

setDelegateOrder

public void setDelegateOrder(com.webobjects.foundation.NSArray orderedDelegates)
Use this to set the delegate order if the addDelegate... methods are not sufficient. orderedDelegates should be a re-arrangement of the list returned by delegates().

Parameters:
orderedDelegates - array of com.webobjects.foundation._NSDelegate in the order in which delegates should be called

perform

protected java.lang.Object perform(java.lang.String methodName,
                                   java.lang.Object[] args,
                                   java.lang.Object defaultResult)
This is the central method for dispatching messages to the delegates aggregated by this object. The other perform... and booleanPerform... methods simply call this method.

Parameters:
methodName - the name of the delegate method to call
args - 0 or more arguments to pass to the delegate method
defaultResult - the value to return if none of the delegates implement this method
Returns:
value returned by the last delegate called

perform

protected java.lang.Object perform(java.lang.String methodName,
                                   java.lang.Object defaultResult)

perform

protected java.lang.Object perform(java.lang.String methodName,
                                   java.lang.Object arg,
                                   java.lang.Object defaultResult)

perform

protected java.lang.Object perform(java.lang.String methodName,
                                   java.lang.Object arg1,
                                   java.lang.Object arg2,
                                   java.lang.Object defaultResult)

perform

protected java.lang.Object perform(java.lang.String methodName,
                                   java.lang.Object arg1,
                                   java.lang.Object arg2,
                                   java.lang.Object arg3,
                                   java.lang.Object defaultResult)

perform

protected java.lang.Object perform(java.lang.String methodName,
                                   java.lang.Object arg1,
                                   java.lang.Object arg2,
                                   java.lang.Object arg3,
                                   java.lang.Object arg4,
                                   java.lang.Object arg5,
                                   java.lang.Object defaultResult)

booleanPerform

protected boolean booleanPerform(java.lang.String methodName,
                                 boolean defaultResult)

booleanPerform

protected boolean booleanPerform(java.lang.String methodName,
                                 java.lang.Object arg,
                                 boolean defaultResult)

booleanPerform

protected boolean booleanPerform(java.lang.String methodName,
                                 java.lang.Object arg1,
                                 java.lang.Object arg2,
                                 boolean defaultResult)

booleanPerform

protected boolean booleanPerform(java.lang.String methodName,
                                 java.lang.Object arg1,
                                 java.lang.Object arg2,
                                 java.lang.Object arg3,
                                 boolean defaultResult)

booleanPerform

protected boolean booleanPerform(java.lang.String methodName,
                                 java.lang.Object[] args,
                                 boolean defaultResult)

Last updated: Tue, Feb 21, 2017 • 05:45 PM CET

Copyright © 2002 – 2007 Project Wonder.