public class ComponentBus extends Object implements IComponentBus, IComponentAware
For more documentation see IComponentBus.
| Modifier and Type | Field and Description |
|---|---|
static cz.cuni.amis.utils.token.IToken |
COMPONENT_ID |
| Constructor and Description |
|---|
ComponentBus(IAgentLogger logger) |
| Modifier and Type | Method and Description |
|---|---|
void |
addEventListener(Class<?> event,
Class<?> component,
IComponentEventListener<?> listener)
Attach listener to all events of class 'event' that is produced by any component of class 'component'.
|
void |
addEventListener(Class<?> event,
IComponentEventListener<?> listener)
Attach listener to all events of class 'event'.
|
void |
addEventListener(Class<?> event,
IComponent component,
IComponentEventListener<?> listener)
Attach listener to all events of class 'event' that is produced by the 'component'.
|
void |
addEventListener(Class<?> event,
cz.cuni.amis.utils.token.IToken componentName,
IComponentEventListener<?> listener)
Attach listener to all events of class 'event' that is produced by \component with name 'componentName'.
|
boolean |
event(IComponentEvent event)
Propagates new event.
|
void |
eventTransactional(IComponentEvent event)
Propagates new event in the context of current event (if called within the context of event).
|
<T> T |
getComponent(Class<T> cls)
Returns component of class 'cls', if there is more then one component for that
class than an exception is thrown.
|
IComponent |
getComponent(cz.cuni.amis.utils.token.IToken name)
Returns registered component of 'componentId'.
|
cz.cuni.amis.utils.token.IToken |
getComponentId()
Unique identification of the component.
|
<T> Set<T> |
getComponents(Class<T> cls)
Return all registered components that descend from / implement class 'cls'.
|
IComponentBus |
getEventBus()
IComponentBus that the instance is working with. |
Logger |
getLog() |
boolean |
isListening(Class<?> event,
Class<?> component,
IComponentEventListener<?> listener)
Tests whether 'listener' is listening on events of class 'event' on components of class 'component'.
|
boolean |
isListening(Class<?> event,
IComponentEventListener<?> listener)
Tests whether 'listener' is listening on events of class 'class'.
|
boolean |
isListening(Class<?> event,
IComponent component,
IComponentEventListener<?> listener)
Tests whether 'listener' is listening on events of class 'event' on the 'component'.
|
boolean |
isListening(Class<?> event,
cz.cuni.amis.utils.token.IToken componentId,
IComponentEventListener<?> listener)
Tests whether 'listener' is listening on events of class 'event' on component of name 'componentName'.
|
boolean |
isRunning()
Whether the bus is propagating events.
|
void |
register(IComponent component)
Registers component into the bus.
|
void |
remove(IComponent component)
Removes component from the bus.
|
void |
removeEventListener(Class<?> event,
Class<?> component,
IComponentEventListener<?> listener)
Removes 'listener' from event 'event' on component 'component'.
|
void |
removeEventListener(Class<?> event,
IComponentEventListener<?> listener)
Removes 'listener' from event 'event'.
|
void |
removeEventListener(Class<?> event,
IComponent component,
IComponentEventListener<?> listener)
Removes 'listener' from event 'event' on the 'component'.
|
void |
removeEventListener(Class<?> event,
cz.cuni.amis.utils.token.IToken componentId,
IComponentEventListener<?> listener)
Removes 'listener' from event 'event' on component of name 'componentName'.
|
void |
reset()
Restarts the bus and the whole agent system.
|
String |
toString() |
@Inject public ComponentBus(IAgentLogger logger)
public IComponentBus getEventBus()
IComponentAwareIComponentBus that the instance is working with.
Note that by design-choice - the IComponentBus is a singleton inside AgentScoped,
therefore you don't have to necessarily obtain the instance through the component, it suffice
to obtain it using injection into your object.
getEventBus in interface IComponentAwarepublic cz.cuni.amis.utils.token.IToken getComponentId()
IComponentgetComponentId in interface IComponentpublic Logger getLog()
public boolean isRunning()
IComponentBus
Whenever IFatalErrorEvent is caught - the component bus will stop working immediately and propagate
the fatal error as the last event (so if you will receive IFatalErrorEvent inside your object then it
is pointless to send more events to the bus.
The only way to make the bus working is to reset() it.
Use this method to examine whether IFatalErrorEvent occured on the bus (and was broadcast) or not.
isRunning in interface IComponentBuspublic void reset()
throws ResetFailedException
IComponentBus
Broadcasts IResetEvent event. All components should stop working upon reset event and reinitialize their inner data structures
into the initial state. If reset is not possible, the component should throw an exception.
If exception is caught during the reset(), the IFatalErrorEvent is propagated and the component bus won't start.
If reset() is called, when the component bus is still running, it first broadcasts IFatalErrorEvent.
Note that you can't propagate any events during the reset (they will be discarded).
reset in interface IComponentBusResetFailedException - thrown when an exception happens during reset operation, nested exception is available through Throwable.getCause()public <T> T getComponent(Class<T> cls) throws MoreComponentsForClassException
IComponentBusIf no components exist for 'cls', returns empty set.
getComponent in interface IComponentBusMoreComponentsForClassExceptionpublic <T> Set<T> getComponents(Class<T> cls)
IComponentBusgetComponents in interface IComponentBuspublic void register(IComponent component) throws ComponentIdClashException
IComponentBus
If different component with the same IComponent.getComponentId() is already registered,
than it throws ComponentIdClashException and broadcast IFatalErrorEvent.
register in interface IComponentBusComponentIdClashExceptionpublic void remove(IComponent component)
IComponentBusremove in interface IComponentBuspublic IComponent getComponent(cz.cuni.amis.utils.token.IToken name)
IComponentBusReturns null if no such component exists.
getComponent in interface IComponentBuspublic void addEventListener(Class<?> event, IComponentEventListener<?> listener)
IComponentBusaddEventListener in interface IComponentBuspublic void addEventListener(Class<?> event, Class<?> component, IComponentEventListener<?> listener)
IComponentBusaddEventListener in interface IComponentBuspublic void addEventListener(Class<?> event, cz.cuni.amis.utils.token.IToken componentName, IComponentEventListener<?> listener)
IComponentBusNote that every component should have unique ID in the context of component bus instance.
addEventListener in interface IComponentBuspublic void addEventListener(Class<?> event, IComponent component, IComponentEventListener<?> listener)
IComponentBusNote that every component should have unique ID in the context of component bus instance.
addEventListener in interface IComponentBuspublic boolean isListening(Class<?> event, IComponentEventListener<?> listener)
IComponentBusisListening in interface IComponentBuspublic boolean isListening(Class<?> event, Class<?> component, IComponentEventListener<?> listener)
IComponentBusisListening in interface IComponentBuspublic boolean isListening(Class<?> event, cz.cuni.amis.utils.token.IToken componentId, IComponentEventListener<?> listener)
IComponentBusisListening in interface IComponentBuspublic boolean isListening(Class<?> event, IComponent component, IComponentEventListener<?> listener)
IComponentBusisListening in interface IComponentBuspublic void removeEventListener(Class<?> event, IComponentEventListener<?> listener)
IComponentBusremoveEventListener in interface IComponentBuspublic void removeEventListener(Class<?> event, Class<?> component, IComponentEventListener<?> listener)
IComponentBusremoveEventListener in interface IComponentBuspublic void removeEventListener(Class<?> event, cz.cuni.amis.utils.token.IToken componentId, IComponentEventListener<?> listener)
IComponentBusremoveEventListener in interface IComponentBuspublic void removeEventListener(Class<?> event, IComponent component, IComponentEventListener<?> listener)
IComponentBusremoveEventListener in interface IComponentBuspublic boolean event(IComponentEvent event) throws ComponentBusNotRunningException, ComponentBusErrorException, FatalErrorPropagatingEventException
IComponentBusIf this event is produced as an answer to other event (that is in the context of the listener call), than the event will be propagated after all listeners reacting to current event finishes. That is - the event will be postponed.
Can't be used to propagate IResetEvent.
event in interface IComponentBusComponentBusNotRunningException - thrown when the bus is not runningComponentBusErrorException - bus exception (report to authors)FatalErrorPropagatingEventException - thrown when some listener throws an exception during the event propagation (use Throwable.getCause() to get the original exception).'public void eventTransactional(IComponentEvent event) throws ComponentBusNotRunningException, ComponentBusErrorException, FatalErrorPropagatingEventException
IComponentBusIf this method is called from in the context of some listener - then the event will be immediately propagate (unless some other eventTransactional() call is made). It allows you to create chain of events that create something like "transaction". If exception is thrown during this process, every listener will be notified about that and may act accordingly.
Note that if this method is not called in the context of listener then it will be postponed as if event() method is called.
Can't be used to propagate IResetEvent.
eventTransactional in interface IComponentBusComponentBusNotRunningException - thrown when the bus is not runningComponentBusErrorException - whenever an exception happened during the propagation of the event (wrapped exception is accessible under Throwable.getCause())FatalErrorPropagatingEventException - thrown when some listener throws an exception during the event propagation (use Throwable.getCause() to get the original exception).Copyright © 2012 AMIS research group, Faculty of Mathematics and Physics, Charles University in Prague, Czech Republic. All Rights Reserved.