/** * ============================================================================= * * 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.math.BigInteger; import java.util.ArrayList; import java.util.List; import javax.persistence.Query; import javax.persistence.TypedQuery; import org.orcid.jaxb.model.common_v2.Visibility; import org.orcid.persistence.dao.PeerReviewDao; import org.orcid.persistence.jpa.entities.PeerReviewEntity; import org.springframework.transaction.annotation.Transactional; public class PeerReviewDaoImpl extends GenericDaoImpl<PeerReviewEntity, Long> implements PeerReviewDao { public PeerReviewDaoImpl() { super(PeerReviewEntity.class); } @Override public PeerReviewEntity getPeerReview(String userOrcid, Long peerReviewId) { Query query = entityManager.createQuery("from PeerReviewEntity where profile.id=:userOrcid and id=:peerReviewId"); query.setParameter("userOrcid", userOrcid); query.setParameter("peerReviewId", Long.valueOf(peerReviewId)); return (PeerReviewEntity) query.getSingleResult(); } @Override @Transactional public boolean removePeerReview(String userOrcid, Long peerReviewId) { Query query = entityManager.createQuery("delete from PeerReviewEntity where profile.id=:userOrcid and id=:peerReviewId"); query.setParameter("userOrcid", userOrcid); query.setParameter("peerReviewId", peerReviewId); return query.executeUpdate() > 0 ? true : false; } @Override public List<PeerReviewEntity> getByUser(String userOrcid) { TypedQuery<PeerReviewEntity> query = entityManager.createQuery("from PeerReviewEntity where profile.id=:userOrcid", PeerReviewEntity.class); query.setParameter("userOrcid", userOrcid); return query.getResultList(); } @Override @Transactional public boolean updateToMaxDisplay(String orcid, Long peerReviewId) { Query query = entityManager.createNativeQuery("UPDATE peer_review SET display_index = (select coalesce(MAX(display_index) + 1, 0) from peer_review where orcid=:orcid and id != :id ), last_modified=now() WHERE id = :id"); query.setParameter("orcid", orcid); query.setParameter("id", peerReviewId); return query.executeUpdate() > 0 ? true : false; } @Override @Transactional public boolean updateVisibilities(String orcid, ArrayList<Long> peerReviewIds, Visibility visibility) { Query query = entityManager .createQuery("update PeerReviewEntity set visibility=:visibility, lastModified=now() where id in (:peerReviewIds) and profile.id=:orcid"); query.setParameter("peerReviewIds", peerReviewIds); query.setParameter("visibility", visibility); query.setParameter("orcid", orcid); return query.executeUpdate() > 0 ? true : false; } /** * Returns a list of ids of peer reviews that still have old external identifiers * @param limit * The batch number to fetch * @return a list of peer review ids with old ext ids * */ @Override @SuppressWarnings("unchecked") public List<BigInteger> getPeerReviewWithOldExtIds(long limit) { Query query = entityManager.createNativeQuery("SELECT distinct(id) FROM (SELECT id, json_array_elements(json_extract_path(external_identifiers_json, 'workExternalIdentifier')) AS j FROM peer_review WHERE external_identifiers_json is not null limit :limit) AS a WHERE (j->'relationship') is null"); query.setParameter("limit", limit); return query.getResultList(); } @Override public boolean increaseDisplayIndexOnAllElements(String orcid) { Query query = entityManager.createNativeQuery("update peer_review set display_index=(display_index + 1), last_modified=now() where orcid=:orcid"); query.setParameter("orcid", orcid); return query.executeUpdate() > 0; } }