Search in sources :

Example 1 with OrcidDuplicatedActivityException

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

the class ActivityValidator method checkExternalIdentifiersForDuplicates.

public void checkExternalIdentifiersForDuplicates(ExternalIDs newExtIds, ExternalIDs existingExtIds, Source existingSource, SourceEntity sourceEntity) {
    if (existingExtIds != null && newExtIds != null) {
        for (ExternalID existingId : existingExtIds.getExternalIdentifier()) {
            for (ExternalID newId : newExtIds.getExternalIdentifier()) {
                if (areRelationshipsSameButNotBothPartOf(existingId.getRelationship(), newId.getRelationship()) && newId.equals(existingId) && sourceEntity.getSourceId().equals(getExistingSource(existingSource))) {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("clientName", sourceEntity.getSourceName());
                    throw new OrcidDuplicatedActivityException(params);
                }
            }
        }
    }
}
Also used : HashMap(java.util.HashMap) ExternalID(org.orcid.jaxb.model.record_v2.ExternalID) OrcidDuplicatedActivityException(org.orcid.core.exception.OrcidDuplicatedActivityException)

Example 2 with OrcidDuplicatedActivityException

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

the class ActivityValidator method checkFundingExternalIdentifiersForDuplicates.

public void checkFundingExternalIdentifiersForDuplicates(ExternalIDs newExtIds, ExternalIDs existingExtIds, Source existingSource, SourceEntity sourceEntity) {
    if (existingExtIds != null && newExtIds != null) {
        for (ExternalID existingId : existingExtIds.getExternalIdentifier()) {
            for (ExternalID newId : newExtIds.getExternalIdentifier()) {
                if (areRelationshipsSameButNotBothPartOf(existingId.getRelationship(), newId.getRelationship()) && newId.equals(existingId) && sourceEntity.getSourceId().equals(getExistingSource(existingSource))) {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("clientName", sourceEntity.getSourceName());
                    throw new OrcidDuplicatedActivityException(params);
                }
            }
        }
    }
}
Also used : HashMap(java.util.HashMap) ExternalID(org.orcid.jaxb.model.record_v2.ExternalID) OrcidDuplicatedActivityException(org.orcid.core.exception.OrcidDuplicatedActivityException)

Example 3 with OrcidDuplicatedActivityException

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

the class WorkManagerImpl method createWorks.

/**
     * Add a list of works to the given profile
     * 
     * @param works
     *            The list of works that want to be added
     * @param orcid
     *            The id of the user we want to add the works to
     * 
     * @return the work bulk with the put codes of the new works or the error
     *         that indicates why a work can't be added
     */
@Override
@Transactional
public WorkBulk createWorks(String orcid, WorkBulk workBulk) {
    SourceEntity sourceEntity = sourceManager.retrieveSourceEntity();
    Set<ExternalID> existingExternalIdentifiers = buildExistingExternalIdsSet(orcid, sourceEntity.getSourceId());
    if (workBulk.getBulk() != null && !workBulk.getBulk().isEmpty()) {
        List<BulkElement> bulk = workBulk.getBulk();
        //Check bulk size
        if (bulk.size() > maxBulkSize) {
            Locale locale = localeManager.getLocale();
            throw new IllegalArgumentException(messageSource.getMessage("apiError.validation_too_many_elements_in_bulk.exception", new Object[] { maxBulkSize }, locale));
        }
        for (int i = 0; i < bulk.size(); i++) {
            if (Work.class.isAssignableFrom(bulk.get(i).getClass())) {
                Work work = (Work) bulk.get(i);
                try {
                    //Validate the work
                    activityValidator.validateWork(work, sourceEntity, true, true, null);
                    //Validate it is not duplicated
                    if (work.getExternalIdentifiers() != null) {
                        for (ExternalID extId : work.getExternalIdentifiers().getExternalIdentifier()) {
                            if (existingExternalIdentifiers.contains(extId)) {
                                Map<String, String> params = new HashMap<String, String>();
                                params.put("clientName", sourceEntity.getSourceName());
                                throw new OrcidDuplicatedActivityException(params);
                            }
                        }
                    }
                    //Save the work
                    WorkEntity workEntity = jpaJaxbWorkAdapter.toWorkEntity(work);
                    ProfileEntity profile = profileEntityCacheManager.retrieve(orcid);
                    workEntity.setProfile(profile);
                    workEntity.setAddedToProfileDate(new Date());
                    // Set source id 
                    if (sourceEntity.getSourceProfile() != null) {
                        workEntity.setSourceId(sourceEntity.getSourceProfile().getId());
                    }
                    if (sourceEntity.getSourceClient() != null) {
                        workEntity.setClientSourceId(sourceEntity.getSourceClient().getId());
                    }
                    setIncomingWorkPrivacy(workEntity, profile);
                    DisplayIndexCalculatorHelper.setDisplayIndexOnNewEntity(workEntity, true);
                    workDao.persist(workEntity);
                    //Update the element in the bulk
                    Work updatedWork = jpaJaxbWorkAdapter.toWork(workEntity);
                    bulk.set(i, updatedWork);
                    //Add the work extIds to the list of existing external identifiers
                    addExternalIdsToExistingSet(updatedWork, existingExternalIdentifiers);
                } catch (Exception e) {
                    //Get the exception 
                    OrcidError orcidError = orcidCoreExceptionMapper.getOrcidError(e);
                    bulk.set(i, orcidError);
                }
            }
        }
        workDao.flush();
    }
    return workBulk;
}
Also used : Locale(java.util.Locale) OrcidError(org.orcid.jaxb.model.error_v2.OrcidError) HashMap(java.util.HashMap) SourceEntity(org.orcid.persistence.jpa.entities.SourceEntity) ExternalID(org.orcid.jaxb.model.record_v2.ExternalID) ProfileEntity(org.orcid.persistence.jpa.entities.ProfileEntity) Date(java.util.Date) OrcidDuplicatedActivityException(org.orcid.core.exception.OrcidDuplicatedActivityException) WorkEntity(org.orcid.persistence.jpa.entities.WorkEntity) BulkElement(org.orcid.jaxb.model.record_v2.BulkElement) OrcidDuplicatedActivityException(org.orcid.core.exception.OrcidDuplicatedActivityException) Work(org.orcid.jaxb.model.record_v2.Work) Transactional(org.springframework.transaction.annotation.Transactional)

Aggregations

HashMap (java.util.HashMap)3 OrcidDuplicatedActivityException (org.orcid.core.exception.OrcidDuplicatedActivityException)3 ExternalID (org.orcid.jaxb.model.record_v2.ExternalID)3 Date (java.util.Date)1 Locale (java.util.Locale)1 OrcidError (org.orcid.jaxb.model.error_v2.OrcidError)1 BulkElement (org.orcid.jaxb.model.record_v2.BulkElement)1 Work (org.orcid.jaxb.model.record_v2.Work)1 ProfileEntity (org.orcid.persistence.jpa.entities.ProfileEntity)1 SourceEntity (org.orcid.persistence.jpa.entities.SourceEntity)1 WorkEntity (org.orcid.persistence.jpa.entities.WorkEntity)1 Transactional (org.springframework.transaction.annotation.Transactional)1