/// <summary>
        /// Compiles the rule described by the specified XML element, which must be a "validation-rule" element.
        /// </summary>
        /// <param name="ruleNode"></param>
        /// <returns></returns>
        public IValidationRule CompileRule(XmlElement ruleNode)
        {
            string property = ruleNode.GetAttribute("boundProperty");

            ISpecification spec = _specCompiler.Compile(ruleNode);

            return(new ValidationRule(property, spec));
        }
		private static ValidationRuleSet CompileRuleset(XmlElement rulesetNode)
		{
			var compiler = new XmlSpecificationCompiler(ScriptLanguage);
			var rules = CollectionUtils.Map<XmlElement, ISpecification>(
				rulesetNode.GetElementsByTagName(TagValidationRule), compiler.Compile);

			var applicabilityRuleNode = CollectionUtils.FirstElement(rulesetNode.GetElementsByTagName(TagApplicabililtyRule));
			return applicabilityRuleNode != null ?
				new ValidationRuleSet(rules, compiler.Compile((XmlElement)applicabilityRuleNode))
				: new ValidationRuleSet(rules);
		}
Exemple #3
0
        private static ValidationRuleSet CompileRuleset(XmlElement rulesetNode)
        {
            var compiler = new XmlSpecificationCompiler(ScriptLanguage);
            var rules    = CollectionUtils.Map <XmlElement, ISpecification>(
                rulesetNode.GetElementsByTagName(TagValidationRule), compiler.Compile);

            var applicabilityRuleNode = CollectionUtils.FirstElement(rulesetNode.GetElementsByTagName(TagApplicabililtyRule));

            return(applicabilityRuleNode != null ?
                   new ValidationRuleSet(rules, compiler.Compile((XmlElement)applicabilityRuleNode))
                                : new ValidationRuleSet(rules));
        }
Exemple #4
0
        /// <summary>
        /// Compile the rule.
        /// </summary>
        /// <param name="ruleNode">XML representation of the rule.</param>
        /// <param name="ruleType">The type of the rule.</param>
        /// <param name="specCompiler">An <see cref="XmlSpecificationCompiler"/>.</param>
        /// <param name="actionCompiler">An <see cref="XmlActionCompiler{TActionContext,TTypeEnum}"/>.</param>
        public void Compile(XmlNode ruleNode, TTypeEnum ruleType, XmlSpecificationCompiler specCompiler,
                            XmlActionCompiler <TActionContext, TTypeEnum> actionCompiler)
        {
            var conditionNode =
                CollectionUtils.SelectFirst(ruleNode.ChildNodes,
                                            (XmlNode child) => child.Name.Equals("condition"));

            if (conditionNode != null)
            {
                _conditions = specCompiler.Compile(conditionNode as XmlElement, true);
            }
            else if (!IsDefault)
            {
                throw new ApplicationException("No condition element defined for the rule.");
            }
            else
            {
                _conditions = new AndSpecification();
            }

            var actionNode =
                CollectionUtils.SelectFirst(ruleNode.ChildNodes,
                                            (XmlNode child) => child.Name.Equals("action"));

            if (actionNode != null)
            {
                _actions = actionCompiler.Compile(actionNode as XmlElement, ruleType, true);
            }
            else if (!IsExempt)
            {
                throw new ApplicationException("No action element defined for the rule.");
            }
            else
            {
                _actions = new ActionSet <TActionContext>(new List <IActionItem <TActionContext> >());
            }
        }
Exemple #5
0
        public bool Apply(XmlElement ruleNode, object item)
        {
            XmlElement conditionNode = ruleNode.SelectSingleNode("condition") as XmlElement;

            if (conditionNode != null)
            {
                ISpecification specification = _compiler.Compile(conditionNode, true);
                if (specification != null)
                {
                    if (specification.Test(item).Success)
                    {
                        XmlElement actionsNode = ruleNode.SelectSingleNode("actions") as XmlElement;
                        if (actionsNode != null)
                        {
                            foreach (XmlNode actionNode in actionsNode.ChildNodes)
                            {
                                if (actionNode is XmlElement)
                                {
                                    if (_actions.ContainsKey(actionNode.Name))
                                    {
                                        IXmlAction action = _actions[actionNode.Name];
                                        if (action != null)
                                        {
                                            action.Apply((XmlElement)actionNode, item);
                                        }
                                    }
                                }
                            }
                        }

                        return(true);
                    }
                }
            }

            return(false);
        }