001/*
002 * Copyright (C) Schweizerische Bundesbahnen SBB, 2017.
003 */
004
005package ch.sbb.matsim.routing.pt.raptor;
006
007import ch.sbb.matsim.config.SwissRailRaptorConfigGroup;
008import org.matsim.core.config.ConfigUtils;
009import org.matsim.core.controler.AbstractModule;
010import org.matsim.core.router.MainModeIdentifier;
011
012/**
013 * @author mrieser / SBB
014 */
015public class SwissRailRaptorModule extends AbstractModule {
016
017    @Override
018    public void install() {
019        if (getConfig().transit().isUseTransit()) {
020            bind(SwissRailRaptor.class).toProvider(SwissRailRaptorFactory.class);
021
022            for (String mode : getConfig().transit().getTransitModes()) {
023                addRoutingModuleBinding(mode).toProvider(SwissRailRaptorRoutingModuleProvider.class);
024            }
025            
026            SwissRailRaptorConfigGroup srrConfig = ConfigUtils.addOrGetModule(getConfig(), SwissRailRaptorConfigGroup.class);
027
028            if (srrConfig.isUseRangeQuery()) {
029                bind(RaptorRouteSelector.class).to(ConfigurableRaptorRouteSelector.class);
030            } else {
031                bind(RaptorRouteSelector.class).to(LeastCostRaptorRouteSelector.class); // just a simple default in case it ever gets used.
032            }
033            
034            switch (srrConfig.getScoringParameters()) {
035            case Default:
036                bind(RaptorParametersForPerson.class).to(DefaultRaptorParametersForPerson.class);
037                break;
038            case Individual:
039                bind(RaptorParametersForPerson.class).to(IndividualRaptorParametersForPerson.class);
040                break;
041            }
042
043            if (srrConfig.isUseIntermodalAccessEgress()) {
044                bind(MainModeIdentifier.class).to(IntermodalAwareRouterModeIdentifier.class);
045            }
046            bind(RaptorStopFinder.class).to(DefaultRaptorStopFinder.class);
047
048            
049            bind(RaptorIntermodalAccessEgress.class).to(DefaultRaptorIntermodalAccessEgress.class);
050        }
051
052    }
053
054}