package org.croudtrip.trips; import com.google.common.base.Optional; import org.croudtrip.api.directions.NavigationResult; import org.croudtrip.api.directions.Route; import org.croudtrip.api.trips.SuperTripReservation; import org.croudtrip.api.trips.TripOffer; import org.croudtrip.api.trips.TripQuery; import org.croudtrip.api.trips.UserWayPoint; import java.util.List; /** * Helper methods for matching offers with queries. */ interface TripsMatcher { class PotentialMatch { private final TripOffer offer; private final TripQuery query; private final NavigationResult totalRouteNavigationResult; public PotentialMatch( TripOffer offer, TripQuery query, NavigationResult totalRouteNavigationResult ) { this.offer = offer; this.query = query; this.totalRouteNavigationResult = totalRouteNavigationResult; } public TripOffer getOffer() { return offer; } public TripQuery getQuery() { return query; } public List<UserWayPoint> getUserWayPoints() { return totalRouteNavigationResult.getUserWayPoints(); } public Route getTotalRoute() { return totalRouteNavigationResult.getRoute(); } public NavigationResult getTotalRouteNavigationResult() { return totalRouteNavigationResult; } } /** * Checks the passed in offers for potential matches. * @return a filtered list of potential matches (which can be empty). */ List<SuperTripReservation> findPotentialTrips(List<TripOffer> offers, TripQuery query); /** * Checks if a query matches with a given offer (is a potential match). This * includes max diversion and max waiting time of both driver and passenger. */ Optional<PotentialMatch> isPotentialMatch(TripOffer offer, TripQuery query); }