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);
}
Aggregations