21 package org.matsim.core.events;
23 import java.lang.reflect.InvocationTargetException;
24 import java.lang.reflect.Method;
25 import java.util.ArrayList;
26 import java.util.HashSet;
27 import java.util.List;
30 import java.util.concurrent.ConcurrentHashMap;
32 import org.apache.logging.log4j.LogManager;
33 import org.apache.logging.log4j.Logger;
68 protected ArrayList<EventHandler>
handlerList =
new ArrayList<EventHandler>(5);
71 protected HandlerData(
final Class<? extends Event> eventClass,
final Method method) {
77 this.handlerList.remove(handler);
87 final Method method) {
89 this.eventHandler = eventHandler;
94 private final List<HandlerData>
handlerData =
new ArrayList<>();
103 if (handler.eventClass == evklass) {
113 if (this.counter == this.nextCounterMsg) {
114 this.nextCounterMsg *= 4;
115 log.info(
" event # " + this.counter);
118 synchronized(info.eventHandler) {
123 info.method.invoke(info.eventHandler, event );
124 }
catch (IllegalArgumentException | IllegalAccessException e) {
125 throw new RuntimeException(
"problem invoking EventHandler " + info.eventHandler.getClass().getCanonicalName() +
" for event-class " + info.eventClass.getCanonicalName(), e);
126 }
catch (InvocationTargetException e) {
127 throw new RuntimeException(
"problem invoking EventHandler " + info.eventHandler.getClass().getCanonicalName() +
" for event-class " + info.eventClass.getCanonicalName(), e.getCause());
135 Set<Class<?>> addedHandlers =
new HashSet<>();
136 Class<?> test = handler.getClass();
137 log.debug(
"adding Event-Handler: " + test.getName());
139 for (Class<?> theInterface : test.getInterfaces()) {
140 if (
EventHandler.class.isAssignableFrom(theInterface)) {
141 Class<? extends EventHandler> eventHandlerInterface = (Class<? extends EventHandler>)theInterface;
142 if (!addedHandlers.contains(theInterface)) {
143 log.debug(
" " + theInterface.getName());
145 addedHandlers.add(theInterface);
149 test = test.getSuperclass();
152 this.cacheHandlers.clear();
158 log.info(
"removing Event-Handler: " + handler.getClass().getName());
162 this.cacheHandlers.clear();
167 log.info(
"resetting Event-Handlers");
169 this.nextCounterMsg = 1;
170 Set<EventHandler>
resetHandlers =
new HashSet<EventHandler>();
173 if (!resetHandlers.contains(handler)) {
174 log.info(
" " + handler.getClass().getName());
175 handler.
reset(iteration);
176 resetHandlers.add(handler);
198 Method[] classmethods = handlerClass.getMethods();
199 for (Method
method : classmethods) {
200 if (
method.getName().equals(
"handleEvent")) {
201 Class<?>[] params =
method.getParameterTypes();
202 if (params.length == 1) {
204 log.info(
" > " + eventClass.getName());
208 this.handlerData.add(dat);
217 HandlerInfo[] cache = this.cacheHandlers.get(eventClass);
222 ArrayList<HandlerInfo> info =
new ArrayList<>();
226 Class<? extends Event> eventKlass = (Class<? extends Event>)klass;
233 klass = klass.getSuperclass();
234 }
while (
Event.class.isAssignableFrom(klass));
237 this.cacheHandlers.put(eventClass, cache);
292 }
else if (klass ==
Event.class) {
300 log.info(
"currently registered event-handlers:");
302 log.info(
"+ " + handlerType.eventClass.getName());
304 log.info(
" - " + handler.getClass().getName());
void processEvent(final Event event)
void removeHandler(final EventHandler handler)
HandlerInfo(final Class<? extends Event > eventClass, final EventHandler eventHandler, final Method method)
default void reset(int iteration)
void addHandlerInterfaces(final EventHandler handler, final Class<? extends EventHandler > handlerClass)
final Map< Class<? extends Event >, HandlerInfo[]> cacheHandlers
final List< HandlerData > handlerData
HandlerData findHandler(final Class<? extends Event > evklass)
static boolean callHandlerFast(final Class<? extends Event > klass, final Event ev, final EventHandler handler)
void printEventHandlers()
HandlerInfo [] getHandlersForClass(final Class<? extends Event > eventClass)
void afterSimStep(double time)
void addHandler(final EventHandler handler)
void resetHandlers(final int iteration)
final Class<? extends Event > eventClass
final EventHandler eventHandler
Class<? extends Event > eventClass
ArrayList< EventHandler > handlerList
HandlerData(final Class<? extends Event > eventClass, final Method method)
void removeHandler(final EventHandler handler)