<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <bean class="org.onebusaway.container.spring.PropertyOverrideConfigurer">
    <property name="properties">
      <props>
        <!--
          The default Google Maps API key can only be used externally for the
          onebusaway.org domain. To use OneBusAway from another domain, you must
          specify your own Google Maps API key.
          
          googleMapsApiKey - your Google Maps API access key
        -->
        <prop key="defaultWebappConfigurationSource.googleMapsApiKey">...</prop>

        <!--
          Controls how far back in time we include records in the
          {@link BlockLocationRecordCollection} for each active trip.
          
          blockLocationRecordCacheWindowSize - in seconds
        -->
        <prop key="blockLocationServiceImpl.blockLocationRecordCacheWindowSize">...</prop>

        <!--
          Should we persist {@link BlockLocationRecord} records to an underlying
          datastore. Useful if you wish to query trip status for historic analysis.
        -->
        <prop key="blockLocationServiceImpl.persistBlockLocationRecords">...</prop>

        <!--
          When true, we will interpolate the current location of a transit vehicle
          based on the last know location of the bus and the schedule deviation of
          the bus at the time. If false, we will use the last known location of the
          bus as the current location.
        -->
        <prop key="blockLocationServiceImpl.locationInterpolation">...</prop>

        <!--
          When searching for blocks to apply real-time information, we will look back
          the specified number of seconds for vehicles that are potentially running
          late.
        -->
        <prop key="blockStatusServiceImpl.runningLateWindow">...</prop>

        <!--
          When searching for blocks to apply real-time information, we will look
          ahead the specified number of seconds for vehicles that are potentially
          running early.
          
          runningEarlyWindow - time in seconds
        -->
        <prop key="blockStatusServiceImpl.runningEarlyWindow">...</prop>

        <!--
          By default, we throw an exception when an invalid stop-to-shape mapping is
          found for a GTFS feed. Override that behavior by setting this parameter to
          false.
          
          throwExceptionOnInvalidStopToShapeMappingException - when true, an
          exception is thrown on invalid stop-to-shape mappings
        -->
        <prop key="tripEntriesFactory.throwExceptionOnInvalidStopToShapeMappingException">...</prop>

        <!--
          When computing stop-to-shape matches, we will consider multiple potential
          matches for a stop if the shape passes by the multiple times, as is the
          case in a looped route, for example. A potential match from the stop to
          shape will be considered each time the shape is within the
          localMinimumThreshold distance of the stop, such that the shape is more
          than the localMinimumThreshold distance threshold from the stop in between
          the potential matches.
          
          localMinimumThreshold - distance in meters
        -->
        <prop key="distanceAlongShapeLibrary.localMinimumThreshold">...</prop>

        <!--
          If the closest distance from a stop to a shape is more than
          maxDistanceFromStopToShapePoint in the
          {@link #getDistancesAlongShape(ShapePoints, List)}, then a
          {@link StopIsTooFarFromShapeException} will be thrown.
          
          maxDistanceFromStopToShapePoint - distance in meters
        -->
        <prop key="distanceAlongShapeLibrary.maxDistanceFromStopToShapePoint">...</prop>

        <!--
          When computing stop-to-shape matches, the potential number of assignments
          for possible matches can grow so large that checking for the best
          assignment could take way too long. This is often the case when dealing
          with malformed shapes.
          
          This parameter controls the maximum number of potential assignments we are
          willing to consider. If the number of potential assignments is higher than
          this number, we throw an exception.
        -->
        <prop key="distanceAlongShapeLibrary.maximumNumberOfPotentialAssignment">...</prop>

      </props>
    </property>
  </bean>
</beans>