public void ValidateStateCombinationsAgainstStateProperties(SecurableClassValidationResult result) { Assertion.IsTrue( State != StateType.Deleted || StateCombinations.Count == 0, "StateCombinations of object '{0}' are not empty but the object is deleted.", ID); foreach (var stateCombination in StateCombinations.Where(sc => sc.GetStates().Length != StateProperties.Count)) { result.AddInvalidStateCombination(stateCombination); } }
public SecurableClassValidationResult Validate() { var result = new SecurableClassValidationResult(); ValidateUniqueStateCombinations(result); ValidateStateCombinationsAgainstStateProperties(result); return(result); }
public void ValidateUniqueStateCombinations(SecurableClassValidationResult result) { Assertion.IsTrue( State != StateType.Deleted || StateCombinations.Count == 0, "StateCombinations of object '{0}' are not empty but the object is deleted.", ID); var duplicateStateCombinations = StateCombinations .GroupBy(sc => sc, new StateCombinationComparer()) .Where(g => g.Count() > 1) .SelectMany(g => g); foreach (var stateCombination in duplicateStateCombinations) { result.AddDuplicateStateCombination(stateCombination); } }
protected override void OnCommitting(DomainObjectCommittingEventArgs args) { SecurableClassValidationResult result = Validate(); if (!result.IsValid) { if (result.DuplicateStateCombinations.Count > 0) { throw new ConstraintViolationException( String.Format("The securable class definition '{0}' contains at least one state combination that has been defined twice.", Name)); } else { Assertion.IsTrue(result.InvalidStateCombinations.Count > 0); throw new ConstraintViolationException( String.Format("The securable class definition '{0}' contains at least one state combination that does not match the class's properties.", Name)); } } RegisterForCommit(); base.OnCommitting(args); }