package fi.otavanopisto.muikku.dao.users; import java.util.Collection; import java.util.Collections; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import fi.otavanopisto.muikku.model.users.UserEmailEntity_; import fi.otavanopisto.muikku.dao.CoreDAO; import fi.otavanopisto.muikku.model.users.UserEmailEntity; import fi.otavanopisto.muikku.model.users.UserSchoolDataIdentifier; public class UserEmailEntityDAO extends CoreDAO<UserEmailEntity> { private static final long serialVersionUID = -6107936582505695829L; public UserEmailEntity create(UserSchoolDataIdentifier userSchoolDataIdentifier, String address) { UserEmailEntity userEmail = new UserEmailEntity(); userEmail.setUserSchoolDataIdentifier(userSchoolDataIdentifier); userEmail.setAddress(address); return persist(userEmail); } public UserEmailEntity findByUserSchoolDataIdentifierAndAddress(UserSchoolDataIdentifier identifier, String address) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<UserEmailEntity> criteria = criteriaBuilder.createQuery(UserEmailEntity.class); Root<UserEmailEntity> root = criteria.from(UserEmailEntity.class); criteria.select(root); criteria.where( criteriaBuilder.and( criteriaBuilder.equal(root.get(UserEmailEntity_.userSchoolDataIdentifier), identifier), criteriaBuilder.equal(root.get(UserEmailEntity_.address), address) ) ); return getSingleResult(entityManager.createQuery(criteria)); } public List<UserEmailEntity> listByUserSchoolDataIdentifier(UserSchoolDataIdentifier userSchoolDataIdentifier) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<UserEmailEntity> criteria = criteriaBuilder.createQuery(UserEmailEntity.class); Root<UserEmailEntity> root = criteria.from(UserEmailEntity.class); criteria.select(root); criteria.where( criteriaBuilder.equal(root.get(UserEmailEntity_.userSchoolDataIdentifier), userSchoolDataIdentifier) ); return entityManager.createQuery(criteria).getResultList(); } public List<UserEmailEntity> listByAddresses(Collection<String> addresses) { if (addresses == null || addresses.isEmpty()) { return Collections.emptyList(); } EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<UserEmailEntity> criteria = criteriaBuilder.createQuery(UserEmailEntity.class); Root<UserEmailEntity> root = criteria.from(UserEmailEntity.class); criteria.select(root); criteria.where( root.get(UserEmailEntity_.address).in(addresses) ); return entityManager.createQuery(criteria).getResultList(); } public void delete(UserEmailEntity userEmail) { super.delete(userEmail); } }