package com.sap.pto.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.NonUniqueResultException; import javax.persistence.TypedQuery; import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sap.pto.adapters.PersistenceAdapter; import com.sap.pto.dao.entities.Fixture; import com.sap.pto.dao.entities.Team; public class FixtureDAO extends BasicDAO<Fixture> { private static final Logger logger = LoggerFactory.getLogger(FixtureDAO.class); public static List<Fixture> getForTeam(Team team) { EntityManager em = PersistenceAdapter.getEntityManager(); TypedQuery<Fixture> query = em.createNamedQuery(Fixture.QUERY_BYTEAM, Fixture.class); query.setParameter("team", team); List<Fixture> fixtures = query.getResultList(); return fixtures; } public static List<Fixture> getFuture() { EntityManager em = PersistenceAdapter.getEntityManager(); TypedQuery<Fixture> query = em.createNamedQuery(Fixture.QUERY_FUTURE, Fixture.class); query.setParameter("date", DateTime.now().toDate()); List<Fixture> fixtures = query.getResultList(); return fixtures; } public static List<Fixture> getPast() { EntityManager em = PersistenceAdapter.getEntityManager(); TypedQuery<Fixture> query = em.createNamedQuery(Fixture.QUERY_PAST, Fixture.class); query.setParameter("date", DateTime.now().toDate()); List<Fixture> fixtures = query.getResultList(); return fixtures; } public static Fixture getForDayAndTeams(DateTime matchDate, Team homeTeam, Team awayTeam) { EntityManager em = PersistenceAdapter.getEntityManager(); Fixture fixture = getForDayAndTeams(matchDate, homeTeam, awayTeam, em); return fixture; } public static Fixture getForDayAndTeams(DateTime matchDate, Team homeTeam, Team awayTeam, EntityManager em) { try { return (Fixture) em.createNamedQuery(Fixture.QUERY_BYDATEANDTEAMS).setParameter("homeTeam", homeTeam) .setParameter("awayTeam", awayTeam).setParameter("minDate", matchDate.toDateMidnight().toDate()) .setParameter("maxDate", matchDate.toDateMidnight().plusDays(1).toDate()).getSingleResult(); } catch (NoResultException e) { return null; } catch (NonUniqueResultException e) { logger.error("Fixture appears multiple times. This could mean that this use case has to be rethought.", e); throw e; } } }