fun checkRequiredProperties()

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