MATSIM
QSimUtils.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * *
4  * *********************************************************************** *
5  * *
6  * copyright : (C) 2012 by the members listed in the COPYING, *
7  * LICENSE and WARRANTY file. *
8  * email : info at matsim dot org *
9  * *
10  * *********************************************************************** *
11  * *
12  * This program is free software; you can redistribute it and/or modify *
13  * it under the terms of the GNU General Public License as published by *
14  * the Free Software Foundation; either version 2 of the License, or *
15  * (at your option) any later version. *
16  * See also COPYING, LICENSE and WARRANTY file *
17  * *
18  * *********************************************************************** */
19 
23 package org.matsim.core.mobsim.qsim;
24 
25 import java.util.Collection;
26 import java.util.Collections;
27 import java.util.List;
28 
29 import com.google.inject.Injector;
30 import com.google.inject.TypeLiteral;
31 import org.matsim.api.core.v01.Scenario;
36 
40 public class QSimUtils {
41  // should only contain static methods; should thus not be instantiated
42  private QSimUtils() {}
43 
44  public static QSim createDefaultQSim(final Scenario scenario, final EventsManager eventsManager) {
45  Injector injector = org.matsim.core.controler.Injector.createInjector(scenario.getConfig(), new StandaloneQSimModule(scenario, eventsManager));
46  return (QSim) injector.getInstance(Mobsim.class);
47  }
48 
49  public static QSim createDefaultQSimWithOverrides( final Scenario scenario, final EventsManager eventsManager,
50  List<AbstractModule> overrides ) {
51 // final StandaloneQSimModule module = new StandaloneQSimModule(scenario, eventsManager);
52 // for ( AbstractModule override : overrides ) {
53 // org.matsim.core.controler.AbstractModule.override(Collections.singleton(module), override) ;
54 // }
55 // Injector injector = org.matsim.core.controler.Injector.createInjector(scenario.getConfig(), module );
56 // return (QSim) injector.getInstance(Mobsim.class);
57  return createQSim( scenario, eventsManager, overrides, null ) ;
58  }
59 
60  public static QSim createQSim(final Scenario scenario, final EventsManager eventsManager, final Collection<AbstractQSimPlugin> plugins) {
61 // final StandaloneQSimModule module = new StandaloneQSimModule(scenario, eventsManager);
62 // final AbstractModule override = AbstractModule.override(Collections.singleton(module),
63 // new AbstractModule() {
64 // @Override
65 // public void install() {
66 // bind(new TypeLiteral<Collection<AbstractQSimPlugin>>() {
67 // }).toInstance(plugins);
68 // }
69 // });
70 // Injector injector = org.matsim.core.controler.Injector.createInjector(scenario.getConfig(),
71 // override);
72 // return (QSim) injector.getInstance(Mobsim.class);
73  return createQSim(scenario, eventsManager, Collections.emptyList(), plugins ) ;
74  }
75 
76  public static QSim createQSim( final Scenario scenario, final EventsManager eventsManager,
77  final List<AbstractModule> overrides, final Collection<AbstractQSimPlugin> plugins ) {
78  // First, load standard QSim module
79  AbstractModule module = new StandaloneQSimModule(scenario, eventsManager);
80 
81  // Add all overrides
82  for (AbstractModule override : overrides ) {
83  module = org.matsim.core.controler.AbstractModule.override(Collections.singleton(module), override) ;
84  }
85 
86  // Overide plugins
87  if (plugins != null) {
88  module = AbstractModule.override(Collections.singleton(module),
89  new AbstractModule() {
90  @Override
91  public void install() {
92  bind(new TypeLiteral<Collection<AbstractQSimPlugin>>() {
93  }).toInstance(plugins);
94  }
95  });
96  }
97 
98  // Build QSim
99  Injector injector = org.matsim.core.controler.Injector.createInjector(scenario.getConfig(), module);
100  return (QSim) injector.getInstance(Mobsim.class);
101  }
102 
103  private static class StandaloneQSimModule extends org.matsim.core.controler.AbstractModule {
104  private final Scenario scenario;
106 
107  public StandaloneQSimModule(Scenario scenario, EventsManager eventsManager) {
108  this.scenario = scenario;
109  this.eventsManager = eventsManager;
110  }
111 
112  @Override
113  public void install() {
114  install(new ScenarioByInstanceModule(scenario));
115  bind(EventsManager.class).toInstance(eventsManager);
116  install(new QSimModule());
117  }
118  }
119 }
static AbstractModule override(final Iterable<?extends AbstractModule > modules, final AbstractModule abstractModule)
static QSim createQSim(final Scenario scenario, final EventsManager eventsManager, final Collection< AbstractQSimPlugin > plugins)
Definition: QSimUtils.java:60
StandaloneQSimModule(Scenario scenario, EventsManager eventsManager)
Definition: QSimUtils.java:107
static QSim createDefaultQSim(final Scenario scenario, final EventsManager eventsManager)
Definition: QSimUtils.java:44
static com.google.inject.Injector createInjector(final Config config, Module...modules)
Definition: Injector.java:58
static QSim createQSim(final Scenario scenario, final EventsManager eventsManager, final List< AbstractModule > overrides, final Collection< AbstractQSimPlugin > plugins)
Definition: QSimUtils.java:76
static QSim createDefaultQSimWithOverrides(final Scenario scenario, final EventsManager eventsManager, List< AbstractModule > overrides)
Definition: QSimUtils.java:49