/** * ============================================================================= * * 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.impl; import java.util.Date; import javax.annotation.Resource; import org.orcid.core.manager.GivenPermissionToManager; import org.orcid.core.manager.NotificationManager; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.ProfileEntityManager; import org.orcid.jaxb.model.message.ApprovalDate; import org.orcid.jaxb.model.message.DelegateSummary; import org.orcid.jaxb.model.message.DelegationDetails; import org.orcid.jaxb.model.message.OrcidIdentifier; import org.orcid.persistence.dao.GivenPermissionToDao; import org.orcid.persistence.jpa.entities.GivenPermissionToEntity; import org.orcid.persistence.jpa.entities.ProfileSummaryEntity; import org.orcid.utils.DateUtils; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate; public class GivenPermissionToManagerImpl implements GivenPermissionToManager { @Resource private GivenPermissionToDao givenPermissionToDao; @Resource private TransactionTemplate transactionTemplate; @Resource private ProfileEntityCacheManager profileEntityCacheManager; @Resource private NotificationManager notificationManager; @Resource private ProfileEntityManager profileEntityManager; @Override public GivenPermissionToEntity findByGiverAndReceiverOrcid(String giverOrcid, String receiverOrcid) { return givenPermissionToDao.findByGiverAndReceiverOrcid(giverOrcid, receiverOrcid); } @Override public void remove(String giverOrcid, String receiverOrcid) { transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { givenPermissionToDao.remove(giverOrcid, receiverOrcid); profileEntityManager.updateLastModifed(giverOrcid); profileEntityManager.updateLastModifed(receiverOrcid); } }); } @Override public void create(String userOrcid, String delegateOrcid) { GivenPermissionToEntity existing = findByGiverAndReceiverOrcid(userOrcid, delegateOrcid); if (existing == null) { transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { Date approvalDate = new Date(); // Create the delegate relationship GivenPermissionToEntity permission = new GivenPermissionToEntity(); permission.setGiver(userOrcid); ProfileSummaryEntity receiver = new ProfileSummaryEntity(delegateOrcid); permission.setReceiver(receiver); permission.setApprovalDate(approvalDate); givenPermissionToDao.merge(permission); // Notify DelegationDetails details = new DelegationDetails(); details.setApprovalDate(new ApprovalDate(DateUtils.convertToXMLGregorianCalendar(approvalDate))); DelegateSummary summary = new DelegateSummary(); summary.setOrcidIdentifier(new OrcidIdentifier(delegateOrcid)); details.setDelegateSummary(summary); notificationManager.sendNotificationToAddedDelegate(userOrcid, details); // Update last modified on delegate's profile so that the // granting user is visible to them immediately profileEntityManager.updateLastModifed(delegateOrcid); } }); } } }