package fi.otavanopisto.muikku.plugins.wall.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.wall.model.WallEntryReply_; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.plugins.CorePluginsDAO; import fi.otavanopisto.muikku.plugins.wall.model.Wall; import fi.otavanopisto.muikku.plugins.wall.model.WallEntry; import fi.otavanopisto.muikku.plugins.wall.model.WallEntryReply; public class WallEntryReplyDAO extends CorePluginsDAO<WallEntryReply> { private static final long serialVersionUID = 4197097795887500969L; public WallEntryReply create(Wall wall, WallEntry wallEntry, String text, UserEntity creator) { WallEntryReply comment = new WallEntryReply(); Date now = new Date(); comment.setWallEntry(wallEntry); comment.setCreated(now); comment.setLastModified(now); comment.setCreator(creator.getId()); comment.setLastModifier(creator.getId()); comment.setWall(wall); comment.setText(text); getEntityManager().persist(comment); return comment; } public List<WallEntryReply> listByWallEntry(WallEntry wallEntry) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<WallEntryReply> criteria = criteriaBuilder.createQuery(WallEntryReply.class); Root<WallEntryReply> root = criteria.from(WallEntryReply.class); criteria.select(root); criteria.where( criteriaBuilder.and( criteriaBuilder.equal(root.get(WallEntryReply_.wallEntry), wallEntry), criteriaBuilder.equal(root.get(WallEntryReply_.archived), Boolean.FALSE) ) ); return entityManager.createQuery(criteria).getResultList(); } public Date findMaxDateByWallEntry(WallEntry wallEntry) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<Date> criteria = criteriaBuilder.createQuery(Date.class); Root<WallEntryReply> root = criteria.from(WallEntryReply.class); criteria.select(criteriaBuilder.greatest(root.get(WallEntryReply_.created))); criteria.where( criteriaBuilder.and( criteriaBuilder.equal(root.get(WallEntryReply_.wallEntry), wallEntry), criteriaBuilder.equal(root.get(WallEntryReply_.archived), Boolean.FALSE) ) ); return entityManager.createQuery(criteria).getSingleResult(); } }