Search in sources :

Example 1 with OtpTransitService

use of org.opentripplanner.model.OtpTransitService in project OpenTripPlanner by opentripplanner.

the class GtfsModule method buildGraph.

@Override
public void buildGraph(Graph graph, HashMap<Class<?>, Object> extra, DataImportIssueStore issueStore) {
    this.issueStore = issueStore;
    // we're about to add another agency to the graph, so clear the cached timezone
    // in case it should change
    // OTP doesn't currently support multiple time zones in a single graph;
    // at least this way we catch the error and log it instead of silently ignoring
    // because the time zone from the first agency is cached
    graph.clearTimeZone();
    CalendarServiceData calendarServiceData = new CalendarServiceData();
    try {
        for (GtfsBundle gtfsBundle : gtfsBundles) {
            // apply global defaults to individual GTFSBundles (if globals have been set)
            if (cacheDirectory != null && gtfsBundle.cacheDirectory == null) {
                gtfsBundle.cacheDirectory = cacheDirectory;
            }
            if (useCached != null && gtfsBundle.useCached == null) {
                gtfsBundle.useCached = useCached;
            }
            OtpTransitServiceBuilder builder = mapGtfsDaoToInternalTransitServiceBuilder(loadBundle(gtfsBundle), gtfsBundle.getFeedId().getId(), issueStore);
            builder.limitServiceDays(transitPeriodLimit);
            calendarServiceData.add(builder.buildCalendarServiceData());
            // NB! The calls below have side effects - the builder state is updated!
            if (OTPFeature.FlexRouting.isOn()) {
                FlexTripsMapper.createFlexTrips(builder);
            }
            repairStopTimesForEachTrip(builder.getStopTimesSortedByTrip());
            // NB! The calls below have side effects - the builder state is updated!
            createTripPatterns(graph, builder, calendarServiceData.getServiceIds());
            OtpTransitService transitModel = builder.build();
            addTransitModelToGraph(graph, gtfsBundle, transitModel);
            createGeometryAndBlockProcessor(gtfsBundle, transitModel).run(graph, issueStore);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        // Note the close method of each bundle should NOT throw an exception, so this
        // code should be safe without the try/catch block.
        gtfsBundles.forEach(GtfsBundle::close);
    }
    // We need to save the calendar service data so we can use it later
    graph.putService(org.opentripplanner.model.calendar.CalendarServiceData.class, calendarServiceData);
    graph.updateTransitFeedValidity(calendarServiceData, issueStore);
    graph.hasTransit = true;
    graph.calculateTransitCenter();
}
Also used : CalendarServiceData(org.opentripplanner.model.calendar.CalendarServiceData) OtpTransitServiceBuilder(org.opentripplanner.model.impl.OtpTransitServiceBuilder) GtfsBundle(org.opentripplanner.graph_builder.model.GtfsBundle) OtpTransitService(org.opentripplanner.model.OtpTransitService) IOException(java.io.IOException)

Example 2 with OtpTransitService

use of org.opentripplanner.model.OtpTransitService in project OpenTripPlanner by opentripplanner.

the class NetexModule method buildGraph.

@Override
public void buildGraph(Graph graph, HashMap<Class<?>, Object> extra, DataImportIssueStore issueStore) {
    graph.clearTimeZone();
    CalendarServiceData calendarServiceData = new CalendarServiceData();
    try {
        for (NetexBundle netexBundle : netexBundles) {
            netexBundle.checkInputs();
            OtpTransitServiceBuilder transitBuilder = netexBundle.loadBundle(graph.deduplicator, issueStore);
            transitBuilder.limitServiceDays(transitPeriodLimit);
            calendarServiceData.add(transitBuilder.buildCalendarServiceData());
            OtpTransitService otpService = transitBuilder.build();
            // TODO OTP2 - Move this into the AddTransitModelEntitiesToGraph
            // - and make sure thay also work with GTFS feeds - GTFS do no
            // - have operators and notice assignments.
            graph.getOperators().addAll(otpService.getAllOperators());
            graph.addNoticeAssignments(otpService.getNoticeAssignments());
            GtfsFeedId feedId = new GtfsFeedId.Builder().id(netexFeedId).build();
            AddTransitModelEntitiesToGraph.addToGraph(feedId, otpService, subwayAccessTime, graph);
            new GeometryAndBlockProcessor(otpService, fareServiceFactory, MAX_STOP_TO_SHAPE_SNAP_DISTANCE, maxInterlineDistance).run(graph, issueStore);
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    graph.putService(CalendarServiceData.class, calendarServiceData);
    graph.updateTransitFeedValidity(calendarServiceData, issueStore);
    graph.hasTransit = true;
    graph.calculateTransitCenter();
}
Also used : CalendarServiceData(org.opentripplanner.model.calendar.CalendarServiceData) OtpTransitServiceBuilder(org.opentripplanner.model.impl.OtpTransitServiceBuilder) GeometryAndBlockProcessor(org.opentripplanner.graph_builder.module.geometry.GeometryAndBlockProcessor) NetexBundle(org.opentripplanner.netex.loader.NetexBundle) GtfsFeedId(org.opentripplanner.graph_builder.module.GtfsFeedId) OtpTransitService(org.opentripplanner.model.OtpTransitService) OtpTransitServiceBuilder(org.opentripplanner.model.impl.OtpTransitServiceBuilder)

Example 3 with OtpTransitService

use of org.opentripplanner.model.OtpTransitService in project OpenTripPlanner by opentripplanner.

the class NetexLoaderSmokeTest method smokeTestOfNetexLoadData.

/**
 * This test load a very simple Netex data set and do assertions on it.
 * For each type we assert some of the most important fields for one element
 * and then check the expected number of that type. This is not a replacement
 * for unit tests on mappers. Try to focus on relation between entities and Netex
 * import integration.
 */
@Test
public void smokeTestOfNetexLoadData() {
    // Given
    NetexBundle netexBundle = ConstantsForTests.createMinimalNetexBundle();
    // Run the check to make sure it does not throw an exception
    netexBundle.checkInputs();
    // When
    OtpTransitServiceBuilder transitBuilder = netexBundle.loadBundle(new Deduplicator(), new DataImportIssueStore(false));
    // Then - smoke test model
    OtpTransitService otpModel = transitBuilder.build();
    assertAgencies(otpModel.getAllAgencies());
    assertMultiModalStations(otpModel.getAllMultiModalStations());
    assertOperators(otpModel.getAllOperators());
    assertStops(otpModel.getAllStops());
    assertStations(otpModel.getAllStations());
    assertTripPatterns(otpModel.getTripPatterns());
    assertTrips(otpModel.getAllTrips());
    assertServiceIds(otpModel.getAllServiceIds());
    assertNoticeAssignments(otpModel.getNoticeAssignments());
    // And then - smoke test service calendar
    assetServiceCalendar(transitBuilder.buildCalendarServiceData());
}
Also used : OtpTransitServiceBuilder(org.opentripplanner.model.impl.OtpTransitServiceBuilder) NetexBundle(org.opentripplanner.netex.loader.NetexBundle) OtpTransitService(org.opentripplanner.model.OtpTransitService) DataImportIssueStore(org.opentripplanner.graph_builder.DataImportIssueStore) Deduplicator(org.opentripplanner.routing.trippattern.Deduplicator) Test(org.junit.Test)

Aggregations

OtpTransitService (org.opentripplanner.model.OtpTransitService)3 OtpTransitServiceBuilder (org.opentripplanner.model.impl.OtpTransitServiceBuilder)3 CalendarServiceData (org.opentripplanner.model.calendar.CalendarServiceData)2 NetexBundle (org.opentripplanner.netex.loader.NetexBundle)2 IOException (java.io.IOException)1 Test (org.junit.Test)1 DataImportIssueStore (org.opentripplanner.graph_builder.DataImportIssueStore)1 GtfsBundle (org.opentripplanner.graph_builder.model.GtfsBundle)1 GtfsFeedId (org.opentripplanner.graph_builder.module.GtfsFeedId)1 GeometryAndBlockProcessor (org.opentripplanner.graph_builder.module.geometry.GeometryAndBlockProcessor)1 Deduplicator (org.opentripplanner.routing.trippattern.Deduplicator)1