package org.iatoki.judgels.uriel.models.daos.impls;
import com.google.common.collect.ImmutableList;
import org.iatoki.judgels.play.models.daos.impls.AbstractJudgelsHibernateDao;
import org.iatoki.judgels.uriel.models.daos.ContestTeamDao;
import org.iatoki.judgels.uriel.models.entities.ContestTeamModel;
import org.iatoki.judgels.uriel.models.entities.ContestTeamModel_;
import play.db.jpa.JPA;
import javax.inject.Named;
import javax.inject.Singleton;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.Collection;
import java.util.List;
@Singleton
@Named("contestTeamDao")
public final class ContestTeamHibernateDao extends AbstractJudgelsHibernateDao<ContestTeamModel> implements ContestTeamDao {
public ContestTeamHibernateDao() {
super(ContestTeamModel.class);
}
@Override
public List<ContestTeamModel> findContestTeamModelsByContestJid(String contestJid) {
CriteriaBuilder cb = JPA.em().getCriteriaBuilder();
CriteriaQuery<ContestTeamModel> query = cb.createQuery(getModelClass());
Root<ContestTeamModel> root = query.from(getModelClass());
query.where(cb.equal(root.get(ContestTeamModel_.contestJid), contestJid));
return JPA.em().createQuery(query).getResultList();
}
@Override
public List<String> findTeamJidsByContestJid(String contestJid) {
CriteriaBuilder cb = JPA.em().getCriteriaBuilder();
CriteriaQuery<String> query = cb.createQuery(String.class);
Root<ContestTeamModel> root = query.from(getModelClass());
query.select(root.get(ContestTeamModel_.jid)).where(cb.equal(root.get(ContestTeamModel_.contestJid), contestJid));
return JPA.em().createQuery(query).getResultList();
}
@Override
public List<String> findContestJidsByTeamJids(Collection<String> teamJids) {
if (teamJids.isEmpty()) {
return ImmutableList.of();
} else {
CriteriaBuilder cb = JPA.em().getCriteriaBuilder();
CriteriaQuery<String> query = cb.createQuery(String.class);
Root<ContestTeamModel> root = query.from(getModelClass());
query.select(root.get(ContestTeamModel_.contestJid)).where(root.get(ContestTeamModel_.jid).in(teamJids));
return JPA.em().createQuery(query).getResultList();
}
}
}