package fi.otavanopisto.muikku.plugins.material.coops.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Join; import javax.persistence.criteria.Root; import fi.otavanopisto.muikku.plugins.material.coops.model.HtmlMaterialRevisionProperty_; import fi.otavanopisto.muikku.plugins.material.coops.model.HtmlMaterialRevision_; import fi.otavanopisto.muikku.plugins.CorePluginsDAO; import fi.otavanopisto.muikku.plugins.material.coops.model.HtmlMaterialRevision; import fi.otavanopisto.muikku.plugins.material.coops.model.HtmlMaterialRevisionProperty; import fi.otavanopisto.muikku.plugins.material.model.HtmlMaterial; public class HtmlMaterialRevisionPropertyDAO extends CorePluginsDAO<HtmlMaterialRevisionProperty> { private static final long serialVersionUID = -8715223954604734705L; public HtmlMaterialRevisionProperty create(HtmlMaterialRevision htmlMaterialRevision, String key, String value) { HtmlMaterialRevisionProperty htmlMaterialRevisionProperty = new HtmlMaterialRevisionProperty(); htmlMaterialRevisionProperty.setFileRevision(htmlMaterialRevision); htmlMaterialRevisionProperty.setValue(value); htmlMaterialRevisionProperty.setKey(key); return persist(htmlMaterialRevisionProperty); } public List<HtmlMaterialRevisionProperty> listByHtmlMaterialRevision(HtmlMaterialRevision htmlMaterialRevision) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<HtmlMaterialRevisionProperty> criteria = criteriaBuilder.createQuery(HtmlMaterialRevisionProperty.class); Root<HtmlMaterialRevisionProperty> root = criteria.from(HtmlMaterialRevisionProperty.class); criteria.select(root); criteria.where( criteriaBuilder.equal(root.get(HtmlMaterialRevisionProperty_.htmlMaterialRevision), htmlMaterialRevision) ); return entityManager.createQuery(criteria).getResultList(); } public HtmlMaterialRevisionProperty findByHtmlMaterialAndKeyMaxRevision(HtmlMaterial htmlMaterial, String key) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<HtmlMaterialRevisionProperty> criteria = criteriaBuilder.createQuery(HtmlMaterialRevisionProperty.class); Root<HtmlMaterialRevisionProperty> root = criteria.from(HtmlMaterialRevisionProperty.class); Join<HtmlMaterialRevisionProperty, HtmlMaterialRevision> revisionJoin = root.join(HtmlMaterialRevisionProperty_.htmlMaterialRevision); criteria.select(root); criteria.where( criteriaBuilder.and( criteriaBuilder.equal(root.get(HtmlMaterialRevisionProperty_.key), key), criteriaBuilder.equal(revisionJoin.get(HtmlMaterialRevision_.htmlMaterial), htmlMaterial) ) ); // TODO: This could be optimized criteria.orderBy(criteriaBuilder.desc(revisionJoin.get(HtmlMaterialRevision_.revision))); TypedQuery<HtmlMaterialRevisionProperty> query = entityManager.createQuery(criteria); query.setMaxResults(1); return getSingleResult(query); } public HtmlMaterialRevisionProperty findByHtmlMaterialAndKeyRevisionLeAndMaxRevision(HtmlMaterial htmlMaterial, String key, Long revisionLe) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<HtmlMaterialRevisionProperty> criteria = criteriaBuilder.createQuery(HtmlMaterialRevisionProperty.class); Root<HtmlMaterialRevisionProperty> root = criteria.from(HtmlMaterialRevisionProperty.class); Join<HtmlMaterialRevisionProperty, HtmlMaterialRevision> revisionJoin = root.join(HtmlMaterialRevisionProperty_.htmlMaterialRevision); criteria.select(root); criteria.where( criteriaBuilder.and( criteriaBuilder.equal(root.get(HtmlMaterialRevisionProperty_.key), key), criteriaBuilder.equal(revisionJoin.get(HtmlMaterialRevision_.htmlMaterial), htmlMaterial), criteriaBuilder.lessThanOrEqualTo(revisionJoin.get(HtmlMaterialRevision_.revision), revisionLe) ) ); // TODO: This could be optimized criteria.orderBy(criteriaBuilder.desc(revisionJoin.get(HtmlMaterialRevision_.revision))); TypedQuery<HtmlMaterialRevisionProperty> query = entityManager.createQuery(criteria); query.setMaxResults(1); return getSingleResult(query); } public List<String> listKeysByHtmlMaterial(HtmlMaterial htmlMaterial) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<String> criteria = criteriaBuilder.createQuery(String.class); Root<HtmlMaterialRevisionProperty> root = criteria.from(HtmlMaterialRevisionProperty.class); Join<HtmlMaterialRevisionProperty, HtmlMaterialRevision> revisionJoin = root.join(HtmlMaterialRevisionProperty_.htmlMaterialRevision); criteria.select(root.get(HtmlMaterialRevisionProperty_.key)).distinct(true); criteria.where( criteriaBuilder.equal(revisionJoin.get(HtmlMaterialRevision_.htmlMaterial), htmlMaterial) ); return entityManager.createQuery(criteria).getResultList(); } public void delete(HtmlMaterialRevisionProperty e) { super.delete(e); } }