Пример #1
0
        private static IResult EvaluateRule(IRecord record, IRule rule)
        {
            IResult aggregateResult = new Result(ResultType.Passed);
            var ruleResult = rule.Execute();

            if (ruleResult.Type == ResultType.Failed && rule.Mode == EvaluationMode.Passive)
            {
                return aggregateResult;
            }

            aggregateResult = Result.Aggregate(ruleResult, aggregateResult, LogicType.And);
            record.Annotate(ruleResult.Dispositions);

            if (aggregateResult.Type == ResultType.Passed && rule.Children.Any())
            {
                aggregateResult = EvaluateChildren(rule);

                if (aggregateResult.Type != ResultType.Passed)
                    record.Annotate(aggregateResult.Dispositions);
            }

            return aggregateResult;
        }