All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.gtfs.mapping.BookingRuleMapper Maven / Gradle / Ivy

package org.opentripplanner.gtfs.mapping;

import org.onebusaway.gtfs.model.AgencyAndId;
import org.onebusaway.gtfs.model.BookingRule;
import org.opentripplanner.model.BookingInfo;
import org.opentripplanner.model.BookingMethod;
import org.opentripplanner.model.ContactInfo;
import org.opentripplanner.model.BookingTime;

import java.time.Duration;
import java.time.LocalTime;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;

/** Responsible for mapping GTFS BookingRule into the OTP model. */
class BookingRuleMapper {

    private final Map cachedBookingInfos = new HashMap<>();

    /** Map from GTFS to OTP model, {@code null} safe.  */
    BookingInfo map(
            BookingRule rule
    ) {
        if (rule == null) {
            return null;
        }

        return cachedBookingInfos.computeIfAbsent(rule.getId(), k -> new BookingInfo(
                contactInfo(rule),
                bookingMethods(rule),
                earliestBookingTime(rule),
                latestBookingTime(rule),
                minimumBookingNotice(rule),
                maximumBookingNotice(rule),
                message(rule),
                pickupMessage(rule),
                dropOffMessage(rule)

        ));
    }

    private ContactInfo contactInfo(BookingRule rule) {
        return new ContactInfo(null,
                rule.getPhoneNumber(),
                null,
                null,
                rule.getInfoUrl(),
                rule.getUrl(),
                null);
    }

    private EnumSet bookingMethods(BookingRule rule) {
        return null;
    }

    private BookingTime earliestBookingTime(BookingRule rule) {
        return new BookingTime(LocalTime.ofSecondOfDay(rule.getPriorNoticeStartTime()), rule.getPriorNoticeStartDay());
    }

    private BookingTime latestBookingTime(BookingRule rule) {
        return new BookingTime(LocalTime.ofSecondOfDay(rule.getPriorNoticeLastTime()), rule.getPriorNoticeLastDay());
    }

    private Duration minimumBookingNotice(BookingRule rule) {
        return Duration.ofSeconds(rule.getPriorNoticeDurationMin());
    }

    private Duration maximumBookingNotice(BookingRule rule) {
        return Duration.ofSeconds(rule.getPriorNoticeDurationMax());
    }

    private String message(BookingRule rule) {
        return rule.getMessage();
    }

    private String pickupMessage(BookingRule rule) {
        return rule.getPickupMessage();
    }

    private String dropOffMessage(BookingRule rule) {
        return rule.getDropOffMessage();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy