* This is intended as a temporary solution, and uses the current system of a single mode set,
* accompanied by some flags to help with routing.
*/
public void applyToRequest(RoutingRequest req) {
/* Start with an empty mode set. */
TraverseModeSet modes = new TraverseModeSet();
/* Use only the first set of qualified modes for now. */
if (sets.isEmpty()) return;
Set<QualifiedMode> qModes = sets.get(0);
// First, copy over all the modes
for (QualifiedMode qMode : qModes) {
modes.setMode(qMode.mode, true);
}
// We used to always set WALK to true, but this forced walking when someone wanted to use a bike.
// We also want it to be possible to force biking-only (e.g. this is done in some consistency tests).
// TODO clearly define mode semantics: does presence of mode mean it is allowable, preferred... ?
for (QualifiedMode qMode : qModes) {
if (qMode.mode == TraverseMode.BICYCLE) {
if (qMode.qualifiers.contains(Qualifier.RENT)) {
modes.setMode(TraverseMode.WALK, true); // turn on WALK for bike rental mode
req.allowBikeRental = true;
}
if (modes.isTransit()) { // this is ugly, using both kinds of modeset at once
req.bikeParkAndRide = qMode.qualifiers.contains(Qualifier.PARK);
}
}
if (qMode.mode == TraverseMode.CAR && modes.isTransit()) { // this is ugly, using both kinds of modeset at once
if (qMode.qualifiers.contains(Qualifier.PARK)) {
req.parkAndRide = true;
} else {
req.kissAndRide = true;
}