private Stream<Entity> validate( Stream<Entity> entities, ValidationResource validationResource, ValidationMode validationMode) { // prepare validation initValidation(validationResource, validationMode); ValidationProfile validationProfile = new ValidationProfile().invoke(); // add validation operation to stream return entities.filter( entity -> { validate(entity, validationResource, validationMode, validationProfile); return true; }); }
private void validate( Entity entity, ValidationResource validationResource, ValidationMode validationMode, ValidationProfile validationProfile) { validationResource.incrementRow(); validateEntityValueTypes(entity, validationResource); // other validation steps might not be able to handle invalid data types, stop here if (validationResource.hasViolations()) { throw new MolgenisValidationException(validationResource.getViolations()); } if (validationProfile.isValidateRequired()) { validateEntityValueRequired(entity, validationResource); } if (validationProfile.isValidateUniqueness()) { validateEntityValueUniqueness(entity, validationResource, validationMode); } validateEntityValueReferences(entity, validationResource); if (validationProfile.isValidateReadonly() && validationMode == ValidationMode.UPDATE) { validateEntityValueReadOnly(entity, validationResource); } if (validationResource.hasViolations()) { throw new MolgenisValidationException(validationResource.getViolations()); } }
@Override public void add(Entity entity) { try (ValidationResource validationResource = new ValidationResource()) { validate(entity, validationResource, ValidationMode.ADD); } delegate().add(entity); }
@Override public void update(Entity entity) { try (ValidationResource validationResource = new ValidationResource()) { validate(entity, validationResource, ValidationMode.UPDATE); } delegate().update(entity); }
@Override public void update(Stream<Entity> entities) { try (ValidationResource validationResource = new ValidationResource()) { entities = validate(entities, validationResource, ValidationMode.UPDATE); delegate().update(entities); } }
@Override public Integer add(Stream<Entity> entities) { try (ValidationResource validationResource = new ValidationResource()) { entities = validate(entities, validationResource, ValidationMode.ADD); return delegate().add(entities); } }