package fi.otavanopisto.muikku.plugins.material.coops.dao; 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.material.coops.model.CoOpsSession_; import fi.otavanopisto.muikku.plugins.CorePluginsDAO; import fi.otavanopisto.muikku.plugins.material.coops.model.CoOpsSession; import fi.otavanopisto.muikku.plugins.material.coops.model.CoOpsSessionType; import fi.otavanopisto.muikku.plugins.material.model.HtmlMaterial; public class CoOpsSessionDAO extends CorePluginsDAO<CoOpsSession> { private static final long serialVersionUID = 6392770442072904041L; public CoOpsSession create(HtmlMaterial htmlMaterial, Long userEntityId, String sessionId, CoOpsSessionType type, Long joinRevision, String algorithm, Boolean closed, Date accessed) { CoOpsSession coOpsSession = new CoOpsSession(); coOpsSession.setAccessed(accessed); coOpsSession.setAlgorithm(algorithm); coOpsSession.setClosed(closed); coOpsSession.setHtmlMaterial(htmlMaterial); coOpsSession.setUserEntityId(userEntityId); coOpsSession.setJoinRevision(joinRevision); coOpsSession.setSessionId(sessionId); coOpsSession.setType(type); return persist(coOpsSession); } public CoOpsSession findBySessionId(String sessionId) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<CoOpsSession> criteria = criteriaBuilder.createQuery(CoOpsSession.class); Root<CoOpsSession> root = criteria.from(CoOpsSession.class); criteria.select(root); criteria.where( criteriaBuilder.equal(root.get(CoOpsSession_.sessionId), sessionId) ); return getSingleResult(entityManager.createQuery(criteria)); } public List<CoOpsSession> listByFileAndClosed(HtmlMaterial htmlMaterial, Boolean closed) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<CoOpsSession> criteria = criteriaBuilder.createQuery(CoOpsSession.class); Root<CoOpsSession> root = criteria.from(CoOpsSession.class); criteria.select(root); criteria.where( criteriaBuilder.and( criteriaBuilder.equal(root.get(CoOpsSession_.htmlMaterial), htmlMaterial), criteriaBuilder.equal(root.get(CoOpsSession_.closed), closed) ) ); return entityManager.createQuery(criteria).getResultList(); } public CoOpsSession updateType(CoOpsSession coOpsSession, CoOpsSessionType type) { coOpsSession.setType(type); return persist(coOpsSession); } public CoOpsSession updateClosed(CoOpsSession session, Boolean closed) { session.setClosed(closed); return persist(session); } public List<CoOpsSession> listByAccessedBeforeAndTypeAndClosed(Date accessed, CoOpsSessionType type, Boolean closed) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<CoOpsSession> criteria = criteriaBuilder.createQuery(CoOpsSession.class); Root<CoOpsSession> root = criteria.from(CoOpsSession.class); criteria.select(root); criteria.where( criteriaBuilder.and( criteriaBuilder.equal(root.get(CoOpsSession_.closed), closed), criteriaBuilder.equal(root.get(CoOpsSession_.type), type), criteriaBuilder.lessThan(root.get(CoOpsSession_.accessed), accessed) ) ); return entityManager.createQuery(criteria).getResultList(); } public List<CoOpsSession> listByClosed(Boolean closed) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<CoOpsSession> criteria = criteriaBuilder.createQuery(CoOpsSession.class); Root<CoOpsSession> root = criteria.from(CoOpsSession.class); criteria.select(root); criteria.where( criteriaBuilder.equal(root.get(CoOpsSession_.closed), closed) ); return entityManager.createQuery(criteria).getResultList(); } public void delete(CoOpsSession e) { super.delete(e); } }