23 package org.matsim.core.mobsim.qsim;
25 import java.lang.annotation.Annotation;
26 import java.util.Collection;
27 import java.util.Collections;
28 import java.util.List;
31 import org.apache.logging.log4j.LogManager;
32 import org.apache.logging.log4j.Logger;
46 import com.google.inject.AbstractModule;
47 import com.google.inject.ConfigurationException;
48 import com.google.inject.Inject;
49 import com.google.inject.Injector;
50 import com.google.inject.Key;
51 import com.google.inject.Provider;
52 import com.google.inject.TypeLiteral;
53 import com.google.inject.name.Named;
61 private Collection<AbstractQSimModule>
modules;
69 @Named(
"overrides") List<AbstractQSimModule> overridingModules,
70 @Named(
"overridesFromAbstractModule") Set<AbstractQSimModule> overridingModulesFromAbstractModule ) {
85 modules.forEach(m -> m.setConfig(config));
86 overridingModules.forEach(m -> m.setConfig(config));
89 modules.forEach(m -> m.setIterationNumber(iterationNumber));
90 overridingModules.forEach(m -> m.setIterationNumber(iterationNumber));
106 protected void configure() {
107 install(finalQsimModule);
108 bind(
QSim.class).asEagerSingleton();
113 Injector qsimInjector = injector.createChildInjector(module);
115 QSim qSim = qsimInjector.getInstance(
QSim.class);
118 Key<Collection<Provider<QSimComponent>>> activeComponentKey;
119 if (activeComponent instanceof Annotation) {
120 activeComponentKey = Key.get(
new TypeLiteral<Collection<Provider<QSimComponent>>>(){}, (Annotation) activeComponent);
122 activeComponentKey = Key.get(
new TypeLiteral<Collection<Provider<QSimComponent>>>(){}, (Class<? extends Annotation>) activeComponent);
125 Collection<Provider<QSimComponent>> providers = qsimInjector.getInstance(activeComponentKey);
126 for (Provider<QSimComponent> provider : providers) {
129 MobsimEngine instance = (MobsimEngine) qSimComponent;
131 log.info(
"Added MobsimEngine " + instance.getClass());
135 ActivityHandler instance = (ActivityHandler) qSimComponent;
137 log.info(
"Added Activityhandler " + instance.getClass());
141 DepartureHandler instance = (DepartureHandler) qSimComponent;
143 log.info(
"Added DepartureHandler " + instance.getClass());
147 AgentSource instance = (AgentSource) qSimComponent;
149 log.info(
"Added AgentSource " + instance.getClass());
153 MobsimListener instance = (MobsimListener) qSimComponent;
155 log.info(
"Added MobsimListener " + instance.getClass());
170 boolean foundNetworkFactoryBinding =
true;
174 }
catch (ConfigurationException e) {
175 foundNetworkFactoryBinding =
false;
178 if (foundNetworkFactoryBinding) {
179 throw new IllegalStateException(
"QNetworkFactory should only be bound via AbstractQSimModule");
182 boolean foundTransitStopHandlerFactoryBinding =
true;
186 }
catch (ConfigurationException e) {
187 foundTransitStopHandlerFactoryBinding =
false;
190 if (foundTransitStopHandlerFactoryBinding) {
191 throw new IllegalStateException(
"TransitStopHandlerFactory should be bound via AbstractQSimModule");
void addMobsimEngine(MobsimEngine mobsimEngine)
void addAgentSource(AgentSource agentSource)
QSimComponentsConfig components
void addQueueSimulationListeners(MobsimListener listener)
List< Object > getActiveComponents()
static AbstractQSimModule overrideQSimModules(Collection< AbstractQSimModule > base, List< AbstractQSimModule > overrides)
IterationCounter iterationCounter
void performHistoricalCheck(Injector injector)
Collection< AbstractQSimModule > modules
Integer getIterationNumber()
void addDepartureHandler(DepartureHandler departureHandler)
void addActivityHandler(ActivityHandler activityHandler)
List< AbstractQSimModule > overridingModules
Set< AbstractQSimModule > overridingModulesFromAbstractModule