/// <summary> /// Gets the changes between two different validation contexts. /// </summary> /// <param name="firstContext">The first context.</param> /// <param name="secondContext">The second context.</param> /// <returns>The list of changes.</returns> /// <exception cref="ArgumentNullException">The <paramref name="firstContext"/> is <c>null</c>.</exception> /// <exception cref="ArgumentNullException">The <paramref name="secondContext"/> is <c>null</c>.</exception> public static List <ValidationContextChange> GetChanges(IValidationContext firstContext, IValidationContext secondContext) { Argument.IsNotNull("firstContext", firstContext); Argument.IsNotNull("secondContext", secondContext); var changes = new List <ValidationContextChange>(); // Loop all fields, check removed items foreach (var fieldValidationResult in firstContext.GetFieldValidations()) { var secondContextFieldValidationResults = secondContext.GetFieldValidations(fieldValidationResult.PropertyName); bool stillContainsValidationResult = (from result in secondContextFieldValidationResults where result.ValidationResultType == fieldValidationResult.ValidationResultType && string.Compare(result.Message, fieldValidationResult.Message) == 0 select result).Any(); if (!stillContainsValidationResult) { changes.Add(new ValidationContextChange(fieldValidationResult, ValidationContextChangeType.Removed)); } } // Loop all fields, check added items foreach (var fieldValidationResult in secondContext.GetFieldValidations()) { var firstContextFieldValidationResults = firstContext.GetFieldValidations(fieldValidationResult.PropertyName); bool existedInPreviousVersion = (from result in firstContextFieldValidationResults where result.ValidationResultType == fieldValidationResult.ValidationResultType && string.Compare(result.Message, fieldValidationResult.Message) == 0 select result).Any(); if (!existedInPreviousVersion) { changes.Add(new ValidationContextChange(fieldValidationResult, ValidationContextChangeType.Added)); } } // Loop all business rules, check removed items foreach (var businessRuleValidation in firstContext.GetBusinessRuleValidations()) { var secondContextBusinessRuleValidationResults = secondContext.GetBusinessRuleValidations(); bool stillContainsValidationResult = (from result in secondContextBusinessRuleValidationResults where result.ValidationResultType == businessRuleValidation.ValidationResultType && string.Compare(result.Message, businessRuleValidation.Message) == 0 select result).Any(); if (!stillContainsValidationResult) { changes.Add(new ValidationContextChange(businessRuleValidation, ValidationContextChangeType.Removed)); } } // Loop all business rules, check added items foreach (var businessRuleValidation in secondContext.GetBusinessRuleValidations()) { var firstContextBusinessRuleValidationResults = firstContext.GetBusinessRuleValidations(); bool existedInPreviousVersion = (from result in firstContextBusinessRuleValidationResults where result.ValidationResultType == businessRuleValidation.ValidationResultType && string.Compare(result.Message, businessRuleValidation.Message) == 0 select result).Any(); if (!existedInPreviousVersion) { changes.Add(new ValidationContextChange(businessRuleValidation, ValidationContextChangeType.Added)); } } return(changes); }
/// <summary> /// Gets the changes between two different validation contexts. /// </summary> /// <param name="firstContext">The first context.</param> /// <param name="secondContext">The second context.</param> /// <returns>The list of changes.</returns> /// <exception cref="ArgumentNullException">The <paramref name="firstContext"/> is <c>null</c>.</exception> /// <exception cref="ArgumentNullException">The <paramref name="secondContext"/> is <c>null</c>.</exception> public static List<ValidationContextChange> GetChanges(IValidationContext firstContext, IValidationContext secondContext) { Argument.IsNotNull("firstContext", firstContext); Argument.IsNotNull("secondContext", secondContext); var changes = new List<ValidationContextChange>(); // Loop all fields, check removed items foreach (var fieldValidationResult in firstContext.GetFieldValidations()) { var secondContextFieldValidationResults = secondContext.GetFieldValidations(fieldValidationResult.PropertyName); bool stillContainsValidationResult = (from result in secondContextFieldValidationResults where result.ValidationResultType == fieldValidationResult.ValidationResultType && string.Compare(result.Message, fieldValidationResult.Message) == 0 select result).Any(); if (!stillContainsValidationResult) { changes.Add(new ValidationContextChange(fieldValidationResult, ValidationContextChangeType.Removed)); } } // Loop all fields, check added items foreach (var fieldValidationResult in secondContext.GetFieldValidations()) { var firstContextFieldValidationResults = firstContext.GetFieldValidations(fieldValidationResult.PropertyName); bool existedInPreviousVersion = (from result in firstContextFieldValidationResults where result.ValidationResultType == fieldValidationResult.ValidationResultType && string.Compare(result.Message, fieldValidationResult.Message) == 0 select result).Any(); if (!existedInPreviousVersion) { changes.Add(new ValidationContextChange(fieldValidationResult, ValidationContextChangeType.Added)); } } // Loop all business rules, check removed items foreach (var businessRuleValidation in firstContext.GetBusinessRuleValidations()) { var secondContextBusinessRuleValidationResults = secondContext.GetBusinessRuleValidations(); bool stillContainsValidationResult = (from result in secondContextBusinessRuleValidationResults where result.ValidationResultType == businessRuleValidation.ValidationResultType && string.Compare(result.Message, businessRuleValidation.Message) == 0 select result).Any(); if (!stillContainsValidationResult) { changes.Add(new ValidationContextChange(businessRuleValidation, ValidationContextChangeType.Removed)); } } // Loop all business rules, check added items foreach (var businessRuleValidation in secondContext.GetBusinessRuleValidations()) { var firstContextBusinessRuleValidationResults = firstContext.GetBusinessRuleValidations(); bool existedInPreviousVersion = (from result in firstContextBusinessRuleValidationResults where result.ValidationResultType == businessRuleValidation.ValidationResultType && string.Compare(result.Message, businessRuleValidation.Message) == 0 select result).Any(); if (!existedInPreviousVersion) { changes.Add(new ValidationContextChange(businessRuleValidation, ValidationContextChangeType.Added)); } } return changes; }