21 package org.matsim.core.events;
23 import java.lang.reflect.InvocationTargetException;
24 import java.lang.reflect.Method;
25 import java.util.HashMap;
26 import java.util.HashSet;
30 import org.apache.logging.log4j.LogManager;
31 import org.apache.logging.log4j.Logger;
146 Set<Class<?>> addedHandlers =
new HashSet<Class<?>>();
147 Class<?> test = eventHandler.getClass();
148 log.info(
"adding Event-Handler: " + test.getName());
149 while (test != Object.class) {
150 for (Class<?> theInterface: test.getInterfaces()) {
151 if (!addedHandlers.contains(theInterface)) {
152 log.info(
" " + theInterface.getName());
154 addedHandlers.add(theInterface);
157 test = test.getSuperclass();
170 this.isActive =
false;
176 if (!this.isActive)
return;
179 if (this.counter == this.nextCounterMsg) {
180 this.nextCounterMsg *= 4;
181 log.info(
" event # " + this.counter);
188 throw new UnsupportedOperationException(
"This implementation supports only a single EventHandler which " 189 +
"has to be provided upon creation. Aborting!");
194 throw new UnsupportedOperationException(
"This implementation supports only a single EventHandler which " 195 +
"has to be provided upon creation. Aborting!");
200 log.info(
"resetting Event-Handler");
202 this.nextCounterMsg = 1;
203 this.eventHandler.
reset(iteration);
226 return this.eventHandler.getClass().toString();
233 if (method != null) method.invoke(this.eventHandler, event);
234 }
catch(InvocationTargetException e) {
235 throw new RuntimeException(
"problem invoking EventHandler " + this.eventHandler.getClass().getCanonicalName() +
" for event-class " +
event.getClass().getCanonicalName(), e.getTargetException());
237 catch (IllegalArgumentException | IllegalAccessException e) {
238 throw new RuntimeException(
"problem invoking EventHandler " + this.eventHandler.getClass().getCanonicalName() +
" for event-class " +
event.getClass().getCanonicalName(), e);
243 Class<?> klass = eventClass;
245 HandlerInfo info = this.methodToHandle.get(eventClass);
246 if (info != null)
return info.
method;
251 while (klass != Object.class) {
252 info = this.methodToHandle.get(klass);
257 klass = klass.getSuperclass();
261 if (method == null) {
263 info = this.methodToHandle.get(intfc);
278 Method[] classmethods = handlerClass.getMethods();
279 for (Method
method : classmethods) {
280 if (
method.getName().equals(
"handleEvent")) {
281 Class<?>[] params =
method.getParameterTypes();
282 if (params.length == 1) {
283 Class<?> eventClass = params[0];
284 log.info(
" > " + eventClass.getName());
285 if (!this.methodToHandle.containsKey(eventClass)) {
287 this.methodToHandle.put(eventClass, info);
297 Class<?> klass = ev.getClass();
298 if (this.isBasicEventHandler) {
void addHandlerInterfaces(final Class<?> handlerClass)
final Map< Class<?>, HandlerInfo > methodToHandle
void removeHandler(final EventHandler handler)
void processEvent(final Event event)
final boolean isBasicEventHandler
final boolean isTransitDriverStartsHandler
final boolean isVehicleArrivesAtFacilityHandler
final boolean isPersonEntersVehicleHandler
final EventHandler eventHandler
default void reset(int iteration)
final boolean isPersonStuckHandler
final boolean isTeleportationArrivalHandler
EventHandler getEventHandler()
final boolean isWait2LinkHandler
HandlerInfo(final Method method)
void addHandler(final EventHandler handler)
void computeEvent(final Event event)
final boolean isVehicleAbortsHandler
final boolean isPersonDepatureHandler
Method getHandlersForClass(final Class<?> eventClass)
final boolean isLeaveLinkHandler
final boolean isActivityEndHandler
final boolean isLinkEnterHandler
String getEventHandlerClassName()
final boolean isVehicleLeavesTrafficHandler
final boolean isActivityStartHandler
static Set< Class<?> > getAllInterfaces(final Class<?> klass)
void afterSimStep(double time)
void resetHandlers(final int iteration)
final boolean isPersonScoreHandler
final boolean isAgentWaitingForPtHandler
final boolean isVehicleDepartsAtFacilityHandler
final boolean isPersonMoneyHandler
final boolean isPersonArrivalHandler
SingleHandlerEventsManager(EventHandler eventHandler)
boolean callHandlerFast(final Event ev)
final boolean isPersonLeavesVehicleHandler