/***
 * Excerpted from "Domain-Driven Design Using Naked Objects",
 * published by The Pragmatic Bookshelf.
 * Copyrights apply to this code. It may not be used to create training material, 
 * courses, books, articles, and the like. Contact us if you are in doubt.
 * We make no guarantees that this code is fit for any purpose. 
 * Visit http://www.pragmaticprogrammer.com/titles/dhnako for more book information.
***/
public List<Vehicle> findCarsWithoutRecentService(final Model model) {
    return allMatches(Vehicle.class, new Filter<Vehicle>() {
        public boolean accept(Vehicle car) {
            if (car.getModel() != model) return false;
            Service service = car.mostRecentService();
            if (service == null) return false;
            CalendarDate lastService = 
                service.getBookedInAndReady().start();
            CalendarDate serviceDue = 
                lastService.plusMonths(model.getServiceIntervalMonths());
            return calendarService.today().isAfter(serviceDue);
        }}, true);
}
