fun checkOtherPropertyConstraints()

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())
    }