|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectwt.events.StandardKeyedEventDispatcher
Reference implementation of a KeyedEventDispatcher. This class implements a synchronous "in thread/transaction" dispatch of event notifications. There are two forms of dispatch, vetoable and non-vetoable. Vetoable event dispatches provide the ability for listeners to object to the consequence of an event by throwing an exception of a type prescribed by the event generator.
Events are dispatched synchronously in the thread of the event generator. Consequently, listeners are expected to respond to the event quickly. All side effects of the listeners actions will be in the same thread and transaction of the event generator and so the listener must be desiged to "play nice".
Veto listeners are notified of vetoable events when their notifyVetoableEvent method is invoked. Veto listeners may object to the event by throwing an exception of a type prescribed by the event generator. Note that since the events package is a general purpose package it cannot enforce type safe exceptions. It is up to the developer to make sure that an exception of the correct type is thrown.
Supported API: true
Extendable: false
KeyedEvent
,
KeyedEventDispatcher
Field Summary | |
private static String |
CLASSNAME
|
private String |
dispatcherName
|
private Hashtable |
keyedEventBranches
|
private static String |
RESOURCE
|
Fields inherited from interface wt.events.KeyedEventDispatcher |
EVENT_KEY_DELIMITER, EVENT_KEY_ROOT |
Constructor Summary | |
StandardKeyedEventDispatcher()
Default no-argument constructor Supported API: false |
|
StandardKeyedEventDispatcher(String dispatcherName)
Constructor which provides the ability to name a dispatcher instance. |
Method Summary | |
KeyedEventBranch |
addEventBranch(String eventKey,
String eventClassName,
String eventType)
Create and register an event key branch. |
void |
addEventListener(KeyedEventListener listener,
String eventKey)
Add a synchronous "in thread/transaction" event listener. |
void |
dispatchEvent(Object event,
String eventKey)
Dispatch a non-vetoable single-object event to all listeners for the event key. |
void |
dispatchMultiObjectEvent(Object event,
String eventKey)
Dispatch a non-vetoable multi-object event to all listeners for the event key. |
void |
dispatchVetoableEvent(Object event,
String eventKey)
Dispatch a vetoable single-object event to all listeners for the event key. |
void |
dispatchVetoableMultiObjectEvent(Object event,
String eventKey)
Dispatch a vetoable multi-object event to all listeners for the event key. |
static String |
generateClassKey(Class targetClass)
Utility used to generate a key for a class. |
static String |
generateEventKey(String[] args)
Utility used to generate an event key. |
Enumeration |
getAllEventBranches()
Return all event branches Supported API: true |
KeyedEventBranch |
getEventBranch(String eventKey)
Return the event key branch which exactly matches the event key. |
Vector |
getKeyedEventBranches()
Gets the object for the association that plays role: keyedEventBranches. |
void |
intDispatchEvent(Object event,
String eventKey,
boolean isSingleObjectEvent,
boolean isVetoable)
|
void |
printAllEventBranches()
Print all event branches Supported API: false |
KeyedEventBranch |
removeEventBranch(String eventKey)
Locate and remove the event key branch which exactly matches the event key. |
void |
removeEventListener(KeyedEventListener listener,
String eventKey)
Remove an event listener. |
void |
setKeyedEventBranches(Vector a_KeyedEventBranches)
Sets the object for the association that plays role: keyedEventBranches. |
protected String |
truncateEventKey(String eventKey)
Utility used to "climb the event tree"; strips off the trailing key token yielding the event key of the parent branch. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
private static final String RESOURCE
private static final String CLASSNAME
private String dispatcherName
private Hashtable keyedEventBranches
Constructor Detail |
public StandardKeyedEventDispatcher(String dispatcherName)
dispatcherName
- The name of the StandardEventDispatcher, may be nullpublic StandardKeyedEventDispatcher()
Method Detail |
public static String generateEventKey(String[] args)
args
- the components of the event key, if no args are supplied then the root event key "*" is returned.
public static String generateClassKey(Class targetClass)
Note that the structure of event keys may vary from one situation
to another. This operation is just a utility and need not necessarily
be used to generate keys.
Supported API: false
targetClass
- the class to form a key for.
public KeyedEventBranch addEventBranch(String eventKey, String eventClassName, String eventType) throws IllegalArgumentException
addEventBranch
in interface KeyedEventDispatcher
eventKey
- eventClassName
- eventType
-
IllegalArgumentException
public KeyedEventBranch getEventBranch(String eventKey)
getEventBranch
in interface KeyedEventDispatcher
eventKey
-
public KeyedEventBranch removeEventBranch(String eventKey)
removeEventBranch
in interface KeyedEventDispatcher
eventKey
-
public Enumeration getAllEventBranches()
getAllEventBranches
in interface KeyedEventDispatcher
public void addEventListener(KeyedEventListener listener, String eventKey)
addEventListener
in interface KeyedEventDispatcher
listener
- the listener to be added.eventKey
- the key which identifies the branch for listening.public void removeEventListener(KeyedEventListener listener, String eventKey)
removeEventListener
in interface KeyedEventDispatcher
listener
- the listener to be removedeventKey
- the key which identifies the branch from wihch to removepublic void dispatchEvent(Object event, String eventKey)
Perform a synchronous "in thread/transaction" notification of each
event listener for the event branch identified by the event key.
Call the notifyEvent operation on each subscriber. If a multi-object
notifyMultiObjectEvent exists for a subscriber, convert the single-object
event to an multi-object event and call the multi-object subscriber's
notifyMultiObjectEvent.
Supported API: true
dispatchEvent
in interface KeyedEventDispatcher
event
- the event to be dispatchedeventKey
- the key of the event branch which has the subscriberspublic void dispatchVetoableEvent(Object event, String eventKey) throws WTException
Perform a synchronous "in thread/transaction" notification of each
event listener for the event branch identified by the event key.
Call the notifyVetoableEvent operation on each subscriber. If a multi-object
notifyVetoableMultiObjectEvent exists for a subscriber, convert the
single-object event to an multi-object event and call the multi-object
subscriber's notifyVetoableMultiObjectEvent. If the subscriber objects
to the event is may throw an excpetion which will be returned to the
operation invoker. It is upto the dispatch invoker and the exception
thrower to agree on what exception is to be thrown.
Supported API: true
dispatchVetoableEvent
in interface KeyedEventDispatcher
event
- eventKey
-
WTException
public void dispatchMultiObjectEvent(Object event, String eventKey)
Perform a synchronous "in thread/transaction" notification of each
event listener for the event branch identified by the event key.
Call the notifyMultiObjectEvent operation on each subscriber. If
a single-object notifyEvent exists for a subscriber, convert the multi-object
event to an array of single-object events and loop over the single-object
subscriber's notifyEvent.
Supported API: true
dispatchMultiObjectEvent
in interface KeyedEventDispatcher
event
- the event to be dispatchedeventKey
- the key of the event branch which has the subscriberspublic void dispatchVetoableMultiObjectEvent(Object event, String eventKey) throws WTException
Perform a synchronous "in thread/transaction" notification of each
event listener for the event branch identified by the event key.
Call the notifyVetoableMultiObjectEvent operation on each subscriber.
If a single-object notifyVetoabelEvent exists for a subscriber, convert
the multi-object event to an array of single-object events and loop
over the single-object subscriber's notifyVetoableEvent. If the subscriber
objects to the event is may throw an excpetion which will be returned
to the operation invoker. It is upto the dispatch invoker and the
exception thrower to agree on what exception is to be thrown.
Supported API: true
dispatchVetoableMultiObjectEvent
in interface KeyedEventDispatcher
event
- eventKey
-
WTException
public void printAllEventBranches()
printAllEventBranches
in interface KeyedEventDispatcher
protected String truncateEventKey(String eventKey)
eventKey
-
public Vector getKeyedEventBranches()
public void setKeyedEventBranches(Vector a_KeyedEventBranches) throws WTPropertyVetoException
a_KeyedEventBranches
-
WTPropertyVetoException
public void intDispatchEvent(Object event, String eventKey, boolean isSingleObjectEvent, boolean isVetoable) throws WTException
WTException
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |