in dnq-transient-store/src/main/kotlin/com/jetbrains/teamsys/dnq/database/ConstraintsUtil.kt [408:438]
fun checkOtherPropertyConstraints(
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 propertyConstraints = changedEntity.lifecycle?.propertyConstraints(changedEntity).orEmpty()
getChangedPropertiesWithConstraints(tracker, changedEntity, propertyConstraints)
.mapNotNull { (propertyName, constraints) ->
entityMetaData.getPropertyMetaData(propertyName)
?.let { propertyMetaData -> Triple(propertyName, constraints, propertyMetaData) }
}
.flatMap { (propertyName, constraints, propertyMetaData) ->
val type = getPropertyType(propertyMetaData)
val propertyValue = getPropertyValue(changedEntity, propertyName, type)
constraints.asSequence()
.mapNotNull {
it as PropertyConstraint<Any?>
it.check(changedEntity, propertyMetaData, propertyValue)
}
}
}
.toCollection(HashSetDecorator())
}