in dnq-transient-store/src/main/kotlin/com/jetbrains/teamsys/dnq/database/ConstraintsUtil.kt [375:405]
fun checkRequiredProperties(
tracker: TransientChangesTracker,
modelMetaData: ModelMetaData): Set<DataIntegrityViolationException> {
return tracker.changedEntities
.asSequence()
.filter { !it.isRemoved }
.mapNotNull { changedEntity ->
modelMetaData.getEntityMetaData(changedEntity.type)
?.let { entityMetaData -> changedEntity to entityMetaData }
}
.flatMap { (changedEntity, entityMetaData) ->
val changedProperties = tracker.getChangedProperties(changedEntity)
if (changedEntity.isNew || changedProperties != null && changedProperties.isNotEmpty()) {
val requiredProperties = entityMetaData
.requiredProperties
.asSequence()
val requiredIfProperties = EntityMetaDataUtils
.getRequiredIfProperties(entityMetaData, changedEntity)
val changedAndRequiredIfProperties = if (requiredIfProperties.isEmpty()) changedProperties else ((changedProperties
?: emptySet()) + requiredIfProperties)
(requiredProperties + requiredIfProperties)
.mapNotNull { checkProperty(changedEntity, changedAndRequiredIfProperties, entityMetaData, it) }
} else {
emptySequence()
}
}
.toCollection(HashSetDecorator())
}