/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.persistence.dao.impl; import java.util.List; import javax.annotation.Resource; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.persistence.TypedQuery; import org.orcid.persistence.dao.InvalidRecordDataChangeDao; import org.orcid.persistence.jpa.entities.InvalidRecordDataChangeEntity; public class InvalidRecordDataChangeDaoImpl implements InvalidRecordDataChangeDao { @Resource(name="entityManager") protected EntityManager entityManager; public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } @SuppressWarnings("unchecked") @Override public List<InvalidRecordDataChangeEntity> getByDateCreated(Long lastId, Long pageSize, boolean descendantOrder) { String queryStr = "SELECT * FROM invalid_record_data_changes WHERE id {GTorLT} {LAST_SEQUENCE} ORDER BY id {ORDER} LIMIT :pageSize"; String GTorLT = descendantOrder ? "<" : ">"; String lastIdStr = descendantOrder ? "(select (max(id) + 1) from invalid_record_data_changes)" : "0"; if(lastId != null) { lastIdStr = String.valueOf(lastId); } queryStr = queryStr.replace("{GTorLT}", GTorLT); queryStr = queryStr.replace("{LAST_SEQUENCE}", lastIdStr); queryStr = queryStr.replace("{ORDER}", descendantOrder ? "DESC" : "ASC"); Query query = entityManager.createNativeQuery(queryStr, InvalidRecordDataChangeEntity.class); query.setParameter("pageSize", pageSize); return (List<InvalidRecordDataChangeEntity>) query.getResultList(); } @Override public boolean haveNext(Long sequence, boolean descendantOrder) { String queryStr = "SELECT COUNT(*) FROM InvalidRecordDataChangeEntity WHERE id {GTorLT} :sequence"; TypedQuery<Long> query = entityManager.createQuery(queryStr.replace("{GTorLT}", descendantOrder ? "<" : ">"), Long.class); query.setParameter("sequence", sequence); return (query.getSingleResult() == 0) ? false : true; } @Override public boolean havePrevious(Long sequence, boolean descendantOrder) { String queryStr = "SELECT COUNT(*) FROM InvalidRecordDataChangeEntity WHERE id {GTorLT} :sequence"; TypedQuery<Long> query = entityManager.createQuery(queryStr.replace("{GTorLT}", descendantOrder ? ">" : "<"), Long.class); query.setParameter("sequence", sequence); return (query.getSingleResult() == 0) ? false : true; } }