Class containing all validation info (thus warnings and errors) about a specific object.
Пример #1
0
        /// <summary>
        /// Creates a new object that is a copy of the current instance.
        /// </summary>
        /// <returns>
        /// A new object that is a copy of this instance.
        /// </returns>
        public object Clone()
        {
            var validationData = new ValidationData(ParentEnumerable);

            validationData.FieldWarnings = new ObservableCollection<FieldWarningOrErrorInfo>();
            validationData.FieldWarnings.AddRange(FieldWarnings);

            validationData.BusinessWarnings = new ObservableCollection<BusinessWarningOrErrorInfo>();
            validationData.BusinessWarnings.AddRange(BusinessWarnings);

            validationData.FieldErrors = new ObservableCollection<FieldWarningOrErrorInfo>();
            validationData.FieldErrors.AddRange(FieldErrors);

            validationData.BusinessErrors = new ObservableCollection<BusinessWarningOrErrorInfo>();
            validationData.BusinessErrors.AddRange(BusinessErrors);

            return validationData;
        }
Пример #2
0
        /// <summary>
        /// Raises the events for differences.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="oldValidationData">The old validation data.</param>
        /// <param name="newValidationData">The new validation data.</param>
        private void RaiseEventsForDifferences(object value, ValidationData oldValidationData, ValidationData newValidationData)
        {
            // Warnings - fields
            RaiseEventsForDifferencesInFields(value, oldValidationData.FieldWarnings, newValidationData.FieldWarnings, ValidationType.Warning);

            // Warnings - business
            RaiseEventsForDifferencesInBusiness(value, oldValidationData.BusinessWarnings, newValidationData.BusinessWarnings, ValidationType.Warning);

            // Errors - fields
            RaiseEventsForDifferencesInFields(value, oldValidationData.FieldErrors, newValidationData.FieldErrors, ValidationType.Error);

            // Errors - business
            RaiseEventsForDifferencesInBusiness(value, oldValidationData.BusinessErrors, newValidationData.BusinessErrors, ValidationType.Error);
        }
Пример #3
0
        /// <summary>
        /// Raises the events for differences.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <param name="oldValidationData">The old validation data.</param>
        /// <param name="newValidationData">The new validation data.</param>
        private void RaiseEventsForDifferences(object value, ValidationData oldValidationData, ValidationData newValidationData)
        {
            // Warnings - fields
            RaiseEventsForDifferencesInFields(value, oldValidationData?.FieldWarnings ?? (IEnumerable <FieldWarningOrErrorInfo>)ArrayShim.Empty <FieldWarningOrErrorInfo>(), newValidationData.FieldWarnings, ValidationType.Warning);

            // Warnings - business
            RaiseEventsForDifferencesInBusiness(value, oldValidationData?.BusinessWarnings ?? (IEnumerable <BusinessWarningOrErrorInfo>)ArrayShim.Empty <BusinessWarningOrErrorInfo>(), newValidationData.BusinessWarnings, ValidationType.Warning);

            // Errors - fields
            RaiseEventsForDifferencesInFields(value, oldValidationData?.FieldErrors ?? (IEnumerable <FieldWarningOrErrorInfo>)ArrayShim.Empty <FieldWarningOrErrorInfo>(), newValidationData.FieldErrors, ValidationType.Error);

            // Errors - business
            RaiseEventsForDifferencesInBusiness(value, oldValidationData?.BusinessErrors ?? (IEnumerable <BusinessWarningOrErrorInfo>)ArrayShim.Empty <BusinessWarningOrErrorInfo>(), newValidationData.BusinessErrors, ValidationType.Error);
        }
Пример #4
0
        /// <summary>
        /// Checks a entity that either implements the <see cref="IDataWarningInfo"/> or <see cref="IDataErrorInfo"/> on warnings and errors.
        /// </summary>
        /// <param name="value">The object to check.</param>
        /// <param name="propertyChanged">The propery that has been changed. <c>null</c> if no specific property has changed.</param>
        /// <param name="parentEnumerable">The parent enumerable. <c>Null</c> if the object does not belong to an enumerable.</param>
        /// <remarks>
        /// Internally calls the generic method with the same name.
        /// </remarks>
        private void CheckObjectValidation(object value, string propertyChanged, IEnumerable parentEnumerable)
        {
            ValidationData currentValidationData;
            ValidationData oldValidationData;

            if (value == null)
            {
                return;
            }

            lock (_objectValidationLock)
            {
                if (!_objectValidation.ContainsKey(value))
                {
                    _objectValidation[value] = new ValidationData(parentEnumerable);
                }

                currentValidationData = _objectValidation[value];

                oldValidationData = (ValidationData)currentValidationData.Clone();
            }

            var model = value as IModel;

            CheckObjectValidationForFields(value, propertyChanged, currentValidationData.FieldWarnings, ValidationType.Warning);

            #region Warnings - business
            currentValidationData.BusinessWarnings.Clear();

            if (model != null)
            {
                if (!model.IsHidingValidationResults)
                {
                    foreach (var warning in model.ValidationContext.GetBusinessRuleWarnings())
                    {
                        currentValidationData.BusinessWarnings.Add(new BusinessWarningOrErrorInfo(warning.Message));
                    }
                }
            }
            else
            {
                string businessWarning = GetWarningOrError(value, ValidationType.Warning);
                if (!string.IsNullOrEmpty(businessWarning))
                {
                    currentValidationData.BusinessWarnings.Add(new BusinessWarningOrErrorInfo(businessWarning));
                }
            }
            #endregion

            CheckObjectValidationForFields(value, propertyChanged, currentValidationData.FieldErrors, ValidationType.Error);

            #region Errors - business
            currentValidationData.BusinessErrors.Clear();

            if (model != null)
            {
                if (!model.IsHidingValidationResults)
                {
                    foreach (var error in model.ValidationContext.GetBusinessRuleErrors())
                    {
                        currentValidationData.BusinessErrors.Add(new BusinessWarningOrErrorInfo(error.Message));
                    }
                }
            }
            else
            {
                string businessError = GetWarningOrError(value, ValidationType.Error);
                if (!string.IsNullOrEmpty(businessError))
                {
                    currentValidationData.BusinessErrors.Add(new BusinessWarningOrErrorInfo(businessError));
                }
            }
            #endregion

            RaiseEventsForDifferences(value, oldValidationData, currentValidationData);
        }
Пример #5
0
        private ValidationData CreateValidationData(object value, string propertyChanged, IEnumerable parentEnumerable)
        {
            var validationData = new ValidationData(parentEnumerable);

            if (value is null)
            {
                return(validationData);
            }

            var validatable = value as IValidatable;

            CheckObjectValidationForFields(value, propertyChanged, validationData.FieldWarnings, ValidationType.Warning);

            #region Warnings - business
            validationData.BusinessWarnings.Clear();

            if (validatable != null)
            {
                if (!validatable.IsHidingValidationResults)
                {
                    foreach (var warning in validatable.ValidationContext.GetBusinessRuleWarnings())
                    {
                        validationData.BusinessWarnings.Add(new BusinessWarningOrErrorInfo(warning.Message));
                    }
                }
            }
            else
            {
                var businessWarning = GetWarningOrError(value, ValidationType.Warning);
                if (!string.IsNullOrEmpty(businessWarning))
                {
                    validationData.BusinessWarnings.Add(new BusinessWarningOrErrorInfo(businessWarning));
                }
            }
            #endregion

            CheckObjectValidationForFields(value, propertyChanged, validationData.FieldErrors, ValidationType.Error);

            #region Errors - business
            validationData.BusinessErrors.Clear();

            if (validatable != null)
            {
                if (!validatable.IsHidingValidationResults)
                {
                    foreach (var error in validatable.ValidationContext.GetBusinessRuleErrors())
                    {
                        validationData.BusinessErrors.Add(new BusinessWarningOrErrorInfo(error.Message));
                    }
                }
            }
            else
            {
                var businessError = GetWarningOrError(value, ValidationType.Error);
                if (!string.IsNullOrEmpty(businessError))
                {
                    validationData.BusinessErrors.Add(new BusinessWarningOrErrorInfo(businessError));
                }
            }
            #endregion

            return(validationData);
        }