Search in sources :

Example 1 with ApplicationException

use of org.orcid.core.exception.ApplicationException in project ORCID-Source by ORCID.

the class ExternalIdentifierManagerImpl method updateExternalIdentifiers.

@Override
public PersonExternalIdentifiers updateExternalIdentifiers(String orcid, PersonExternalIdentifiers externalIdentifiers) {
    List<ExternalIdentifierEntity> existingExternalIdentifiersList = externalIdentifierDao.getExternalIdentifiers(orcid, getLastModified(orcid));
    // Delete the deleted ones
    for (ExternalIdentifierEntity existing : existingExternalIdentifiersList) {
        boolean deleteMe = true;
        if (externalIdentifiers.getExternalIdentifiers() != null) {
            for (PersonExternalIdentifier updatedOrNew : externalIdentifiers.getExternalIdentifiers()) {
                if (existing.getId().equals(updatedOrNew.getPutCode())) {
                    deleteMe = false;
                    break;
                }
            }
        }
        if (deleteMe) {
            try {
                externalIdentifierDao.removeExternalIdentifier(orcid, existing.getId());
            } catch (Exception e) {
                throw new ApplicationException("Unable to delete external identifier " + existing.getId(), e);
            }
        }
    }
    if (externalIdentifiers != null && externalIdentifiers.getExternalIdentifiers() != null) {
        for (PersonExternalIdentifier updatedOrNew : externalIdentifiers.getExternalIdentifiers()) {
            if (updatedOrNew.getPutCode() != null) {
                // Update the existing ones
                for (ExternalIdentifierEntity existingExtId : existingExternalIdentifiersList) {
                    if (existingExtId.getId().equals(updatedOrNew.getPutCode())) {
                        existingExtId.setLastModified(new Date());
                        existingExtId.setVisibility(updatedOrNew.getVisibility());
                        existingExtId.setDisplayIndex(updatedOrNew.getDisplayIndex());
                        externalIdentifierDao.merge(existingExtId);
                    }
                }
            }
        }
    }
    return externalIdentifiers;
}
Also used : ApplicationException(org.orcid.core.exception.ApplicationException) ExternalIdentifierEntity(org.orcid.persistence.jpa.entities.ExternalIdentifierEntity) PersonExternalIdentifier(org.orcid.jaxb.model.record_v2.PersonExternalIdentifier) ApplicationException(org.orcid.core.exception.ApplicationException) OrcidDuplicatedElementException(org.orcid.core.exception.OrcidDuplicatedElementException) Date(java.util.Date)

Example 2 with ApplicationException

use of org.orcid.core.exception.ApplicationException in project ORCID-Source by ORCID.

the class ResearcherUrlManagerImpl method updateResearcherUrls.

/**
     * Update the researcher urls associated with a specific account
     * 
     * @param orcid
     * @param researcherUrls
     * */
@Override
@Transactional
public ResearcherUrls updateResearcherUrls(String orcid, ResearcherUrls researcherUrls) {
    List<ResearcherUrlEntity> existingEntities = researcherUrlDao.getResearcherUrls(orcid, getLastModified(orcid));
    //Delete the deleted ones
    for (ResearcherUrlEntity existingEntity : existingEntities) {
        boolean deleteMe = true;
        if (researcherUrls.getResearcherUrls() != null) {
            for (ResearcherUrl updatedOrNew : researcherUrls.getResearcherUrls()) {
                if (existingEntity.getId().equals(updatedOrNew.getPutCode())) {
                    deleteMe = false;
                    break;
                }
            }
        }
        if (deleteMe) {
            try {
                researcherUrlDao.deleteResearcherUrl(existingEntity.getProfile().getId(), existingEntity.getId());
            } catch (Exception e) {
                throw new ApplicationException("Unable to delete researcher url " + existingEntity.getId(), e);
            }
        }
    }
    // Update or create new
    if (researcherUrls != null && researcherUrls.getResearcherUrls() != null) {
        for (ResearcherUrl updatedOrNew : researcherUrls.getResearcherUrls()) {
            if (updatedOrNew.getPutCode() != null) {
                //Update the existing ones
                for (ResearcherUrlEntity existingEntity : existingEntities) {
                    if (existingEntity.getId().equals(updatedOrNew.getPutCode())) {
                        existingEntity.setLastModified(new Date());
                        existingEntity.setVisibility(updatedOrNew.getVisibility());
                        existingEntity.setUrl(updatedOrNew.getUrl().getValue());
                        existingEntity.setUrlName(updatedOrNew.getUrlName());
                        existingEntity.setDisplayIndex(updatedOrNew.getDisplayIndex());
                        researcherUrlDao.merge(existingEntity);
                    }
                }
            } else {
                //Add the new ones
                ResearcherUrlEntity newResearcherUrl = jpaJaxbResearcherUrlAdapter.toResearcherUrlEntity(updatedOrNew);
                SourceEntity sourceEntity = sourceManager.retrieveSourceEntity();
                ProfileEntity profile = new ProfileEntity(orcid);
                newResearcherUrl.setUser(profile);
                newResearcherUrl.setDateCreated(new Date());
                newResearcherUrl.setLastModified(new Date());
                if (sourceEntity.getSourceProfile() != null) {
                    newResearcherUrl.setSourceId(sourceEntity.getSourceProfile().getId());
                }
                if (sourceEntity.getSourceClient() != null) {
                    newResearcherUrl.setClientSourceId(sourceEntity.getSourceClient().getId());
                }
                newResearcherUrl.setVisibility(updatedOrNew.getVisibility());
                newResearcherUrl.setDisplayIndex(updatedOrNew.getDisplayIndex());
                researcherUrlDao.persist(newResearcherUrl);
            }
        }
    }
    return researcherUrls;
}
Also used : ApplicationException(org.orcid.core.exception.ApplicationException) ResearcherUrlEntity(org.orcid.persistence.jpa.entities.ResearcherUrlEntity) SourceEntity(org.orcid.persistence.jpa.entities.SourceEntity) ResearcherUrl(org.orcid.jaxb.model.record_v2.ResearcherUrl) ApplicationException(org.orcid.core.exception.ApplicationException) OrcidDuplicatedElementException(org.orcid.core.exception.OrcidDuplicatedElementException) Date(java.util.Date) ProfileEntity(org.orcid.persistence.jpa.entities.ProfileEntity) Transactional(org.springframework.transaction.annotation.Transactional)

Example 3 with ApplicationException

use of org.orcid.core.exception.ApplicationException in project ORCID-Source by ORCID.

the class SetUpClientsAndUsers method clearRegistry.

private boolean clearRegistry(OrcidProfile existingProfile, Map<String, String> params) {
    if (existingProfile != null) {
        String orcid = params.get(ORCID);
        String email = params.get(EMAIL);
        // exception
        if (existingProfile.getOrcidBio() == null || existingProfile.getOrcidBio().getContactDetails() == null || existingProfile.getOrcidBio().getContactDetails().retrievePrimaryEmail() == null || !email.equals(existingProfile.getOrcidBio().getContactDetails().retrievePrimaryEmail().getValue())) {
            throw new ApplicationException("User with email " + params.get(EMAIL) + " must have orcid id '" + orcid + "' but it is '" + existingProfile.getOrcidId() + "'");
        }
        // Check if the profile have the same password, if not, update the
        // password
        String encryptedPassword = encryptionManager.hashForInternalUse(params.get(PASSWORD));
        if (!encryptedPassword.equals(existingProfile.getPassword())) {
            existingProfile.setPassword(params.get(PASSWORD));
            orcidProfileManager.updatePasswordInformation(existingProfile);
        }
        // Set default names
        Name name = new Name();
        name.setCreditName(new CreditName(params.get(CREDIT_NAME)));
        name.setGivenNames(new GivenNames(params.get(GIVEN_NAMES)));
        name.setFamilyName(new FamilyName(params.get(FAMILY_NAMES)));
        name.setVisibility(org.orcid.jaxb.model.common_v2.Visibility.fromValue(OrcidVisibilityDefaults.NAMES_DEFAULT.getVisibility().value()));
        if (recordNameManager.exists(orcid)) {
            recordNameManager.updateRecordName(orcid, name);
        } else {
            recordNameManager.createRecordName(orcid, name);
        }
        profileDao.updatePreferences(orcid, true, true, true, true, org.orcid.jaxb.model.common_v2.Visibility.PUBLIC, true, 1f);
        // Set default bio
        org.orcid.jaxb.model.record_v2.Biography bio = biographyManager.getBiography(orcid, 0L);
        if (bio == null || bio.getContent() == null) {
            bio = new org.orcid.jaxb.model.record_v2.Biography(params.get(BIO));
            bio.setVisibility(org.orcid.jaxb.model.common_v2.Visibility.fromValue(OrcidVisibilityDefaults.BIOGRAPHY_DEFAULT.getVisibility().value()));
            biographyManager.createBiography(orcid, bio);
        } else {
            bio.setContent(params.get(BIO));
            bio.setVisibility(org.orcid.jaxb.model.common_v2.Visibility.fromValue(OrcidVisibilityDefaults.BIOGRAPHY_DEFAULT.getVisibility().value()));
            biographyManager.updateBiography(orcid, bio);
        }
        // Remove other names
        List<OtherNameEntity> otherNames = otherNameDao.getOtherNames(orcid, 0L);
        if (otherNames != null && !otherNames.isEmpty()) {
            for (OtherNameEntity otherName : otherNames) {
                otherNameDao.deleteOtherName(otherName);
            }
        }
        // Remove keywords
        List<ProfileKeywordEntity> keywords = profileKeywordDao.getProfileKeywors(orcid, 0L);
        if (keywords != null && !keywords.isEmpty()) {
            for (ProfileKeywordEntity keyword : keywords) {
                profileKeywordDao.deleteProfileKeyword(keyword);
            }
        }
        //Remove researcher urls
        List<ResearcherUrlEntity> rUrls = researcherUrlDao.getResearcherUrls(orcid, 0L);
        if (rUrls != null && !rUrls.isEmpty()) {
            for (ResearcherUrlEntity rUrl : rUrls) {
                researcherUrlDao.deleteResearcherUrl(orcid, rUrl.getId());
            }
        }
        // Remove external ids
        List<ExternalIdentifierEntity> extIds = externalIdentifierDao.getExternalIdentifiers(orcid, System.currentTimeMillis());
        if (extIds != null && !extIds.isEmpty()) {
            for (ExternalIdentifierEntity extId : extIds) {
                externalIdentifierDao.removeExternalIdentifier(orcid, extId.getId());
            }
        }
        // Remove addresses
        List<AddressEntity> addresses = addressDao.getAddresses(orcid, 0L);
        if (addresses != null && !addresses.isEmpty()) {
            for (AddressEntity address : addresses) {
                addressDao.deleteAddress(orcid, address.getId());
            }
        }
        // Remove emails
        List<EmailEntity> emails = emailDao.findByOrcid(orcid);
        if (emails != null && !emails.isEmpty()) {
            for (EmailEntity rc2Email : emails) {
                if (!params.get(EMAIL).equals(rc2Email.getId())) {
                    emailDao.removeEmail(orcid, rc2Email.getId());
                }
            }
        }
        // Remove notifications
        List<NotificationEntity> notifications = notificationDao.findByOrcid(orcid, true, 0, 10000);
        if (notifications != null && !notifications.isEmpty()) {
            for (NotificationEntity notification : notifications) {
                notificationDao.deleteNotificationItemByNotificationId(notification.getId());
                notificationDao.deleteNotificationWorkByNotificationId(notification.getId());
                notificationDao.deleteNotificationById(notification.getId());
            }
        }
        // Remove works
        List<MinimizedWorkEntity> works = workDao.findWorks(orcid, 0L);
        if (works != null && !works.isEmpty()) {
            for (MinimizedWorkEntity work : works) {
                workDao.removeWork(orcid, work.getId());
            }
        }
        // Remove affiliations
        List<OrgAffiliationRelationEntity> affiliations = orgAffiliationRelationDao.getByUser(orcid);
        if (affiliations != null && !affiliations.isEmpty()) {
            for (OrgAffiliationRelationEntity affiliation : affiliations) {
                orgAffiliationRelationDao.remove(affiliation.getId());
            }
        }
        // Remove fundings
        List<ProfileFundingEntity> fundings = profileFundingDao.getByUser(orcid);
        if (fundings != null && !fundings.isEmpty()) {
            for (ProfileFundingEntity funding : fundings) {
                profileFundingDao.removeProfileFunding(orcid, funding.getId());
            }
        }
        // Remove peer reviews
        List<PeerReviewEntity> peerReviews = peerReviewDao.getByUser(orcid);
        if (peerReviews != null && !peerReviews.isEmpty()) {
            for (PeerReviewEntity peerReview : peerReviews) {
                peerReviewDao.removePeerReview(orcid, peerReview.getId());
            }
        }
        // Remove 3d party links
        List<OrcidOauth2TokenDetail> tokenDetails = orcidOauth2TokenDetailDao.findByUserName(orcid);
        if (tokenDetails != null && !tokenDetails.isEmpty()) {
            for (OrcidOauth2TokenDetail token : tokenDetails) {
                orcidOauth2TokenDetailDao.remove(token.getId());
            }
        }
        //Unlock just in case it is locked
        profileDao.unlockProfile(orcid);
        return true;
    }
    return false;
}
Also used : ProfileKeywordEntity(org.orcid.persistence.jpa.entities.ProfileKeywordEntity) FamilyName(org.orcid.jaxb.model.record_v2.FamilyName) ExternalIdentifierEntity(org.orcid.persistence.jpa.entities.ExternalIdentifierEntity) FamilyName(org.orcid.jaxb.model.record_v2.FamilyName) CreditName(org.orcid.jaxb.model.common_v2.CreditName) Name(org.orcid.jaxb.model.record_v2.Name) ProfileFundingEntity(org.orcid.persistence.jpa.entities.ProfileFundingEntity) GivenNames(org.orcid.jaxb.model.record_v2.GivenNames) MinimizedWorkEntity(org.orcid.persistence.jpa.entities.MinimizedWorkEntity) PeerReviewEntity(org.orcid.persistence.jpa.entities.PeerReviewEntity) NotificationEntity(org.orcid.persistence.jpa.entities.NotificationEntity) AddressEntity(org.orcid.persistence.jpa.entities.AddressEntity) OrcidOauth2TokenDetail(org.orcid.persistence.jpa.entities.OrcidOauth2TokenDetail) ResearcherUrlEntity(org.orcid.persistence.jpa.entities.ResearcherUrlEntity) CreditName(org.orcid.jaxb.model.common_v2.CreditName) EmailEntity(org.orcid.persistence.jpa.entities.EmailEntity) ApplicationException(org.orcid.core.exception.ApplicationException) OtherNameEntity(org.orcid.persistence.jpa.entities.OtherNameEntity) OrgAffiliationRelationEntity(org.orcid.persistence.jpa.entities.OrgAffiliationRelationEntity)

Example 4 with ApplicationException

use of org.orcid.core.exception.ApplicationException in project ORCID-Source by ORCID.

the class OtherNameManagerImpl method updateOtherNames.

@Override
@Transactional
public OtherNames updateOtherNames(String orcid, OtherNames otherNames) {
    List<OtherNameEntity> existingOtherNamesEntityList = otherNameDao.getOtherNames(orcid, getLastModified(orcid));
    //Delete the deleted ones
    for (OtherNameEntity existingOtherName : existingOtherNamesEntityList) {
        boolean deleteMe = true;
        if (otherNames.getOtherNames() != null) {
            for (OtherName updatedOrNew : otherNames.getOtherNames()) {
                if (existingOtherName.getId().equals(updatedOrNew.getPutCode())) {
                    deleteMe = false;
                    break;
                }
            }
        }
        if (deleteMe) {
            try {
                otherNameDao.deleteOtherName(existingOtherName);
            } catch (Exception e) {
                throw new ApplicationException("Unable to delete other name " + existingOtherName.getId(), e);
            }
        }
    }
    if (otherNames != null && otherNames.getOtherNames() != null) {
        for (OtherName updatedOrNew : otherNames.getOtherNames()) {
            if (updatedOrNew.getPutCode() != null) {
                //Update the existing ones
                for (OtherNameEntity existingOtherName : existingOtherNamesEntityList) {
                    if (existingOtherName.getId().equals(updatedOrNew.getPutCode())) {
                        existingOtherName.setLastModified(new Date());
                        existingOtherName.setVisibility(updatedOrNew.getVisibility());
                        existingOtherName.setDisplayName(updatedOrNew.getContent());
                        existingOtherName.setDisplayIndex(updatedOrNew.getDisplayIndex());
                        otherNameDao.merge(existingOtherName);
                    }
                }
            } else {
                //Add the new ones
                OtherNameEntity newOtherName = jpaJaxbOtherNameAdapter.toOtherNameEntity(updatedOrNew);
                SourceEntity sourceEntity = sourceManager.retrieveSourceEntity();
                ProfileEntity profile = new ProfileEntity(orcid);
                newOtherName.setProfile(profile);
                newOtherName.setDateCreated(new Date());
                //Set the source
                if (sourceEntity.getSourceProfile() != null) {
                    newOtherName.setSourceId(sourceEntity.getSourceProfile().getId());
                }
                if (sourceEntity.getSourceClient() != null) {
                    newOtherName.setClientSourceId(sourceEntity.getSourceClient().getId());
                }
                newOtherName.setVisibility(updatedOrNew.getVisibility());
                newOtherName.setDisplayIndex(updatedOrNew.getDisplayIndex());
                otherNameDao.persist(newOtherName);
            }
        }
    }
    return otherNames;
}
Also used : ApplicationException(org.orcid.core.exception.ApplicationException) SourceEntity(org.orcid.persistence.jpa.entities.SourceEntity) OtherName(org.orcid.jaxb.model.record_v2.OtherName) OtherNameEntity(org.orcid.persistence.jpa.entities.OtherNameEntity) ApplicationException(org.orcid.core.exception.ApplicationException) OrcidDuplicatedElementException(org.orcid.core.exception.OrcidDuplicatedElementException) Date(java.util.Date) ProfileEntity(org.orcid.persistence.jpa.entities.ProfileEntity) Transactional(org.springframework.transaction.annotation.Transactional)

Example 5 with ApplicationException

use of org.orcid.core.exception.ApplicationException in project ORCID-Source by ORCID.

the class ProfileKeywordManagerImpl method updateKeywords.

@Override
@Transactional
public Keywords updateKeywords(String orcid, Keywords keywords) {
    List<ProfileKeywordEntity> existingKeywordsList = profileKeywordDao.getProfileKeywors(orcid, getLastModified(orcid));
    // Delete the deleted ones
    for (ProfileKeywordEntity existing : existingKeywordsList) {
        boolean deleteMe = true;
        if (keywords.getKeywords() != null) {
            for (Keyword updatedOrNew : keywords.getKeywords()) {
                if (existing.getId().equals(updatedOrNew.getPutCode())) {
                    deleteMe = false;
                    break;
                }
            }
        }
        if (deleteMe) {
            try {
                profileKeywordDao.deleteProfileKeyword(existing);
            } catch (Exception e) {
                throw new ApplicationException("Unable to delete keyword " + existing.getId(), e);
            }
        }
    }
    if (keywords != null && keywords.getKeywords() != null) {
        for (Keyword updatedOrNew : keywords.getKeywords()) {
            if (updatedOrNew.getPutCode() != null) {
                // Update the existing ones
                for (ProfileKeywordEntity existingKeyword : existingKeywordsList) {
                    if (existingKeyword.getId().equals(updatedOrNew.getPutCode())) {
                        existingKeyword.setLastModified(new Date());
                        existingKeyword.setVisibility(updatedOrNew.getVisibility());
                        existingKeyword.setKeywordName(updatedOrNew.getContent());
                        existingKeyword.setDisplayIndex(updatedOrNew.getDisplayIndex());
                        profileKeywordDao.merge(existingKeyword);
                    }
                }
            } else {
                // Add the new ones
                ProfileKeywordEntity newKeyword = adapter.toProfileKeywordEntity(updatedOrNew);
                SourceEntity sourceEntity = sourceManager.retrieveSourceEntity();
                ProfileEntity profile = new ProfileEntity(orcid);
                newKeyword.setProfile(profile);
                newKeyword.setDateCreated(new Date());
                //Set the source
                if (sourceEntity.getSourceProfile() != null) {
                    newKeyword.setSourceId(sourceEntity.getSourceProfile().getId());
                }
                if (sourceEntity.getSourceClient() != null) {
                    newKeyword.setClientSourceId(sourceEntity.getSourceClient().getId());
                }
                newKeyword.setVisibility(updatedOrNew.getVisibility());
                newKeyword.setDisplayIndex(updatedOrNew.getDisplayIndex());
                profileKeywordDao.persist(newKeyword);
            }
        }
    }
    return keywords;
}
Also used : ProfileKeywordEntity(org.orcid.persistence.jpa.entities.ProfileKeywordEntity) ApplicationException(org.orcid.core.exception.ApplicationException) Keyword(org.orcid.jaxb.model.record_v2.Keyword) SourceEntity(org.orcid.persistence.jpa.entities.SourceEntity) ApplicationException(org.orcid.core.exception.ApplicationException) OrcidDuplicatedElementException(org.orcid.core.exception.OrcidDuplicatedElementException) Date(java.util.Date) ProfileEntity(org.orcid.persistence.jpa.entities.ProfileEntity) Transactional(javax.transaction.Transactional)

Aggregations

ApplicationException (org.orcid.core.exception.ApplicationException)9 Date (java.util.Date)5 OrcidDuplicatedElementException (org.orcid.core.exception.OrcidDuplicatedElementException)5 ProfileEntity (org.orcid.persistence.jpa.entities.ProfileEntity)4 SourceEntity (org.orcid.persistence.jpa.entities.SourceEntity)4 GeneralSecurityException (java.security.GeneralSecurityException)3 UnsupportedEncodingException (java.io.UnsupportedEncodingException)2 AddressEntity (org.orcid.persistence.jpa.entities.AddressEntity)2 ExternalIdentifierEntity (org.orcid.persistence.jpa.entities.ExternalIdentifierEntity)2 OtherNameEntity (org.orcid.persistence.jpa.entities.OtherNameEntity)2 ProfileKeywordEntity (org.orcid.persistence.jpa.entities.ProfileKeywordEntity)2 ResearcherUrlEntity (org.orcid.persistence.jpa.entities.ResearcherUrlEntity)2 Transactional (org.springframework.transaction.annotation.Transactional)2 AlgorithmParameterSpec (java.security.spec.AlgorithmParameterSpec)1 KeySpec (java.security.spec.KeySpec)1 SecretKey (javax.crypto.SecretKey)1 PBEKeySpec (javax.crypto.spec.PBEKeySpec)1 PBEParameterSpec (javax.crypto.spec.PBEParameterSpec)1 Transactional (javax.transaction.Transactional)1 CreditName (org.orcid.jaxb.model.common_v2.CreditName)1