package com.sheetsj.workitem; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.List; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.Predicate; import org.springframework.stereotype.Service; @Service public class WorkItemService { private WorkItemRepository workItemRepository; /** * Yes, this could be done in SQL, but sometimes you just need an example for presentations! */ public Collection<WorkItem> findAllByMakeAndYear(final String carMake, final String year) { List<WorkItem> allWorkItems = workItemRepository.findAll(); return selectWorkItemsByMakeAndYear(carMake, year, allWorkItems); } protected Collection<WorkItem> selectWorkItemsByMakeAndYear(final String carMake, final String year, List<WorkItem> allWorkItems) { @SuppressWarnings("unchecked") Collection<WorkItem> results = CollectionUtils.select(allWorkItems, new Predicate() { @Override public boolean evaluate(Object object) { WorkItem item = (WorkItem) object; return carMake.equalsIgnoreCase(item.getCar().getMake().getName()) && year.equalsIgnoreCase(getYearAsString(item.getWorkDate())); } }); return results; } protected String getYearAsString(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return String.valueOf(calendar.get(Calendar.YEAR)); } }