示例#1
0
        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);
            }
        }
示例#2
0
        public SecurableClassValidationResult Validate()
        {
            var result = new SecurableClassValidationResult();

            ValidateUniqueStateCombinations(result);

            ValidateStateCombinationsAgainstStateProperties(result);

            return(result);
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }