/** * ============================================================================= * * 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.core.manager.read_only.impl; import java.util.Collections; import java.util.List; import java.util.Set; import javax.annotation.Resource; import org.orcid.core.adapter.JpaJaxbPeerReviewAdapter; import org.orcid.core.manager.read_only.PeerReviewManagerReadOnly; import org.orcid.core.utils.activities.ActivitiesGroup; import org.orcid.core.utils.activities.ActivitiesGroupGenerator; import org.orcid.core.utils.activities.GroupableActivityComparator; import org.orcid.jaxb.model.record.summary_v2.PeerReviewGroup; import org.orcid.jaxb.model.record.summary_v2.PeerReviewGroupKey; import org.orcid.jaxb.model.record.summary_v2.PeerReviewSummary; import org.orcid.jaxb.model.record.summary_v2.PeerReviews; import org.orcid.jaxb.model.record_v2.ExternalID; import org.orcid.jaxb.model.record_v2.GroupAble; import org.orcid.jaxb.model.record_v2.GroupableActivity; import org.orcid.jaxb.model.record_v2.PeerReview; import org.orcid.persistence.dao.PeerReviewDao; import org.orcid.persistence.jpa.entities.PeerReviewEntity; import org.springframework.cache.annotation.Cacheable; public class PeerReviewManagerReadOnlyImpl implements PeerReviewManagerReadOnly { @Resource protected JpaJaxbPeerReviewAdapter jpaJaxbPeerReviewAdapter; protected PeerReviewDao peerReviewDao; public void setPeerReviewDao(PeerReviewDao peerReviewDao) { this.peerReviewDao = peerReviewDao; } @Override public PeerReview getPeerReview(String orcid, Long peerReviewId) { PeerReviewEntity peerReviewEntity = peerReviewDao.getPeerReview(orcid, peerReviewId); return jpaJaxbPeerReviewAdapter.toPeerReview(peerReviewEntity); } @Override public PeerReviewSummary getPeerReviewSummary(String orcid, Long peerReviewId) { PeerReviewEntity peerReviewEntity = peerReviewDao.getPeerReview(orcid, peerReviewId); return jpaJaxbPeerReviewAdapter.toPeerReviewSummary(peerReviewEntity); } @Override @Cacheable(value = "peer-reviews", key = "#orcid.concat('-').concat(#lastModified)") public List<PeerReview> findPeerReviews(String orcid, long lastModified) { List<PeerReviewEntity> peerReviewEntities = peerReviewDao.getByUser(orcid); return jpaJaxbPeerReviewAdapter.toPeerReview(peerReviewEntities); } /** * Get the list of peer reivews that belongs to a user * * @param userOrcid * @param lastModified * Last modified date used to check the cache * @return the list of peer reviews that belongs to this user * */ @Override @Cacheable(value = "peer-reviews-summaries", key = "#orcid.concat('-').concat(#lastModified)") public List<PeerReviewSummary> getPeerReviewSummaryList(String orcid, long lastModified) { List<PeerReviewEntity> peerReviewEntities = peerReviewDao.getByUser(orcid); return jpaJaxbPeerReviewAdapter.toPeerReviewSummary(peerReviewEntities); } /** * Generate a grouped list of peer reviews with the given list of peer reviews * * @param peerReviews * The list of peer reviews to group * @param justPublic * Specify if we want to group only the public elements in the given list * @return PeerReviews element with the PeerReviewSummary elements grouped * */ @Override public PeerReviews groupPeerReviews(List<PeerReviewSummary> peerReviews, boolean justPublic) { ActivitiesGroupGenerator groupGenerator = new ActivitiesGroupGenerator(); PeerReviews result = new PeerReviews(); for (PeerReviewSummary peerReview : peerReviews) { if (justPublic && !peerReview.getVisibility().equals(org.orcid.jaxb.model.common_v2.Visibility.PUBLIC)) { // If it is just public and the funding is not public, just // ignore it } else { groupGenerator.group(peerReview); } } List<ActivitiesGroup> groups = groupGenerator.getGroups(); for (ActivitiesGroup group : groups) { Set<GroupAble> groupKeys = group.getGroupKeys(); Set<GroupableActivity> activities = group.getActivities(); PeerReviewGroup peerReviewGroup = new PeerReviewGroup(); // Fill the peer review groups with the external identifiers if(groupKeys == null || groupKeys.isEmpty()) { // Initialize the ids as an empty list peerReviewGroup.getIdentifiers().getExternalIdentifier(); } else { for (GroupAble groupKey : groupKeys) { PeerReviewGroupKey key = (PeerReviewGroupKey) groupKey; ExternalID id = new ExternalID(); id.setType(PeerReviewGroupKey.KEY_NAME);//TODO: this is not nice id.setValue(key.getGroupId()); peerReviewGroup.getIdentifiers().getExternalIdentifier().add(id); } } // Fill the peer review group with the list of activities for (GroupableActivity activity : activities) { PeerReviewSummary peerReviewSummary = (PeerReviewSummary) activity; peerReviewGroup.getPeerReviewSummary().add(peerReviewSummary); } // Sort the peer reviews Collections.sort(peerReviewGroup.getPeerReviewSummary(), new GroupableActivityComparator()); result.getPeerReviewGroup().add(peerReviewGroup); } return result; } }