Search in sources :

Example 1 with EntityValidationException

use of com.haulmont.cuba.core.global.validation.EntityValidationException in project cuba by cuba-platform.

the class EntityImportExport method importEntities.

@Override
public Collection<Entity> importEntities(Collection<? extends Entity> entities, EntityImportView importView, boolean validate) {
    List<ReferenceInfo> referenceInfoList = new ArrayList<>();
    CommitContext commitContext = new CommitContext();
    commitContext.setSoftDeletion(false);
    // are stored in the referenceInfoList variable
    for (Entity srcEntity : entities) {
        View regularView = buildViewFromImportView(importView);
        // set softDeletion to false because we can import deleted entity, so we'll restore it and update
        LoadContext<? extends Entity> ctx = LoadContext.create(srcEntity.getClass()).setSoftDeletion(false).setView(regularView).setId(srcEntity.getId());
        Entity dstEntity = dataManager.secure().load(ctx);
        importEntity(srcEntity, dstEntity, importView, regularView, commitContext, referenceInfoList);
    }
    // 2. references to existing entities are processed
    // store a list of loaded entities in the collection to prevent unnecessary database requests for searching the
    // same instance
    Set<Entity> loadedEntities = new HashSet<>();
    for (ReferenceInfo referenceInfo : referenceInfoList) {
        processReferenceInfo(referenceInfo, commitContext, loadedEntities);
    }
    for (Entity commitInstance : commitContext.getCommitInstances()) {
        if (!PersistenceHelper.isNew(commitInstance)) {
            if (commitInstance instanceof SoftDelete && ((SoftDelete) commitInstance).isDeleted()) {
                ((SoftDelete) commitInstance).setDeleteTs(null);
            }
        }
        if (entityHasDynamicAttributes(commitInstance)) {
            dynamicAttributesManagerAPI.storeDynamicAttributes((BaseGenericIdEntity) commitInstance);
        }
    }
    if (validate) {
        Validator validator = beanValidation.getValidator();
        for (Entity entity : commitContext.getCommitInstances()) {
            Set<ConstraintViolation<Entity>> violations = validator.validate(entity, Default.class, RestApiChecks.class);
            if (!violations.isEmpty()) {
                throw new EntityValidationException("Entity validation failed", violations);
            }
        }
    }
    // we shouldn't remove entities with the softDeletion = false
    if (!commitContext.getRemoveInstances().isEmpty()) {
        commitContext.setSoftDeletion(true);
    }
    return dataManager.secure().commit(commitContext);
}
Also used : EntityValidationException(com.haulmont.cuba.core.global.validation.EntityValidationException) ConstraintViolation(javax.validation.ConstraintViolation) Validator(javax.validation.Validator)

Aggregations

EntityValidationException (com.haulmont.cuba.core.global.validation.EntityValidationException)1 ConstraintViolation (javax.validation.ConstraintViolation)1 Validator (javax.validation.Validator)1