package fi.otavanopisto.muikku.plugins.friends; import java.util.Date; 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.plugins.friends.Friend_; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.plugins.CorePluginsDAO; import fi.otavanopisto.muikku.plugins.friends.Friend; public class FriendDAO extends CorePluginsDAO<Friend> { private static final long serialVersionUID = 9013247702204973018L; public Friend create(UserEntity userA, UserEntity userB) { Friend friendRequest = new Friend(); friendRequest.setCreated(new Date()); friendRequest.setUserA(userA.getId()); friendRequest.setUserB(userB.getId()); getEntityManager().persist(friendRequest); return friendRequest; } public List<Friend> listByUser(UserEntity user) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Friend> criteria = criteriaBuilder.createQuery(Friend.class); Root<Friend> root = criteria.from(Friend.class); criteria.select(root); criteria.where( criteriaBuilder.or( criteriaBuilder.equal(root.get(Friend_.userA), user.getId()), criteriaBuilder.equal(root.get(Friend_.userB), user.getId()) ) ); return entityManager.createQuery(criteria).getResultList(); } public Friend findByUsers(UserEntity loggedUser, UserEntity user) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Friend> criteria = criteriaBuilder.createQuery(Friend.class); Root<Friend> root = criteria.from(Friend.class); criteria.select(root); criteria.where( criteriaBuilder.or( criteriaBuilder.and( criteriaBuilder.equal(root.get(Friend_.userA), loggedUser.getId()), criteriaBuilder.equal(root.get(Friend_.userB), user.getId()) ), criteriaBuilder.and( criteriaBuilder.equal(root.get(Friend_.userA), user.getId()), criteriaBuilder.equal(root.get(Friend_.userB), loggedUser.getId()) ) ) ); return getSingleResult(entityManager.createQuery(criteria)); } }