Exemplo n.º 1
0
 protected internal virtual void VisitActionGroup(TContext context, ActionGroupElement element)
 {
     foreach (ActionElement action in element.Actions)
     {
         action.Accept(context, this);
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Creates a rule definition.
        /// </summary>
        /// <param name="name">Rule's name.</param>
        /// <param name="description">Rule's description.</param>
        /// <param name="priority">Rule's priority.</param>
        /// <param name="leftHandSide">Rule's left-hand side top group element.</param>
        /// <param name="rightHandSide">Rule's right-hand side group element.</param>
        /// <returns>Created rule definition.</returns>
        public static IRuleDefinition RuleDefinition(string name, string description, int priority,
                                                     GroupElement leftHandSide, ActionGroupElement rightHandSide)
        {
            var tags           = new string[0];
            var ruleDefinition = RuleDefinition(name, description, priority, tags, leftHandSide, rightHandSide);

            return(ruleDefinition);
        }
Exemplo n.º 3
0
        protected internal override void VisitActionGroup(Context context, ActionGroupElement element)
        {
            var actions = element.Actions.Select(x => Transform <ActionElement>(context, x)).ToList();

            if (context.IsModified)
            {
                var newElement = new ActionGroupElement(element.Declarations, actions);
                Result(context, newElement);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Creates an action group element.
        /// </summary>
        /// <param name="actions">Action elements in the group.</param>
        /// <returns>Created element.</returns>
        /// <seealso cref="ActionElement"/>
        public static ActionGroupElement ActionGroup(IEnumerable <ActionElement> actions)
        {
            var element       = new ActionGroupElement(actions);
            var insertActions = element.Actions.Where(x => x.ActionTrigger.HasFlag(ActionTrigger.Activated)).ToList();

            if (insertActions.Count == 0)
            {
                throw new ArgumentException("Rule must have at least one match action");
            }
            return(element);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Builds rule definition.
        /// </summary>
        /// <returns>Rule definition.</returns>
        public IRuleDefinition Build()
        {
            Validate();

            IBuilder <GroupElement> groupBuilder = _groupBuilder;
            GroupElement            conditions   = groupBuilder.Build();

            IBuilder <ActionGroupElement> actionBuilder = _actionGroupBuilder;
            ActionGroupElement            actions       = actionBuilder.Build();

            var ruleDefinition = new RuleDefinition(_name, _description, _tags, _priority, conditions, actions);

            return(ruleDefinition);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Creates rule definition using current state of the builder.
        /// </summary>
        /// <returns>Rule definition.</returns>
        public IRuleDefinition Build()
        {
            Validate();

            IBuilder <DependencyGroupElement> dependencyBuilder = _dependencyBuilder;
            DependencyGroupElement            dependencies      = dependencyBuilder.Build();

            IBuilder <GroupElement> groupBuilder = _groupBuilder;
            GroupElement            conditions   = groupBuilder.Build();

            IBuilder <ActionGroupElement> actionBuilder = _actionGroupBuilder;
            ActionGroupElement            actions       = actionBuilder.Build();

            var ruleDefinition = new RuleDefinition(_name, _description, _priority, _repeatability, _tags, _properties, dependencies, conditions, actions);

            return(ruleDefinition);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Creates rule definition using current state of the builder.
        /// </summary>
        /// <returns>Rule definition.</returns>
        public IRuleDefinition Build()
        {
            IBuilder <DependencyGroupElement> dependencyGroupBuilder = _dependencyGroupBuilder;
            DependencyGroupElement            dependencies           = dependencyGroupBuilder?.Build()
                                                                       ?? Element.DependencyGroup();

            IBuilder <FilterGroupElement> filterGroupBuilder = _filterGroupBuilder;
            FilterGroupElement            filters            = filterGroupBuilder?.Build()
                                                               ?? Element.FilterGroup();

            IBuilder <GroupElement> lhsBuilder = _lhsBuilder;
            GroupElement            lhs        = lhsBuilder?.Build()
                                                 ?? Element.AndGroup();

            IBuilder <ActionGroupElement> rhsBuilder = _rhsBuilder;
            ActionGroupElement            rhs        = rhsBuilder?.Build()
                                                       ?? Element.ActionGroup();

            var ruleDefinition = Element.RuleDefinition(_name, _description, _priority, _repeatability, _tags, _properties, dependencies, lhs, filters, rhs);

            return(ruleDefinition);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Creates a rule definition.
        /// </summary>
        /// <param name="name">Rule's name.</param>
        /// <param name="description">Rule's description.</param>
        /// <param name="priority">Rule's priority.</param>
        /// <param name="repeatability">Rule's repeatability.</param>
        /// <param name="tags">Tags associated with the rule.</param>
        /// <param name="properties">Properties associated with the rule.</param>
        /// <param name="dependencies">Rule's dependency group element.</param>
        /// <param name="leftHandSide">Rule's left-hand side top group element.</param>
        /// <param name="filters">Rule's filter group element.</param>
        /// <param name="rightHandSide">Rule's right-hand side group element.</param>
        /// <returns>Created rule definition.</returns>
        public static IRuleDefinition RuleDefinition(string name, string description, int priority,
                                                     RuleRepeatability repeatability, IEnumerable <string> tags, IEnumerable <RuleProperty> properties,
                                                     DependencyGroupElement dependencies, GroupElement leftHandSide, FilterGroupElement filters, ActionGroupElement rightHandSide)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("Rule name not provided", nameof(name));
            }
            if (tags == null)
            {
                throw new ArgumentNullException(nameof(tags), "Rule tags not provided");
            }
            if (properties == null)
            {
                throw new ArgumentNullException(nameof(properties), "Rule properties not provided");
            }
            if (dependencies == null)
            {
                throw new ArgumentNullException(nameof(dependencies), "Rule dependencies not provided");
            }
            if (leftHandSide == null)
            {
                throw new ArgumentNullException(nameof(leftHandSide), "Rule left-hand side not provided");
            }
            if (filters == null)
            {
                throw new ArgumentNullException(nameof(filters), "Rule filters not provided");
            }
            if (rightHandSide == null)
            {
                throw new ArgumentNullException(nameof(rightHandSide), "Rule right-hand side not provided");
            }

            var ruleDefinition = new RuleDefinition(name, description, priority, repeatability, tags, properties, dependencies, leftHandSide, filters, rightHandSide);

            ElementValidator.ValidateUniqueDeclarations(ruleDefinition.LeftHandSide, ruleDefinition.DependencyGroup);
            ElementValidator.ValidateRuleDefinition(ruleDefinition);

            return(ruleDefinition);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Creates a rule definition.
        /// </summary>
        /// <param name="name">Rule's name.</param>
        /// <param name="description">Rule's description.</param>
        /// <param name="priority">Rule's priority.</param>
        /// <param name="tags">Tags associated with the rule.</param>
        /// <param name="leftHandSide">Rule's left-hand side top group element.</param>
        /// <param name="rightHandSide">Rule's right-hand side group element.</param>
        /// <returns>Created rule definition.</returns>
        public static IRuleDefinition RuleDefinition(string name, string description, int priority,
                                                     IEnumerable <string> tags, GroupElement leftHandSide, ActionGroupElement rightHandSide)
        {
            var ruleProperties         = new RuleProperty[0];
            var dependencyGroupElement = DependencyGroup();
            var filterGroupElement     = FilterGroup();
            var ruleDefinition         = RuleDefinition(name, description, priority, RuleRepeatability.Repeatable,
                                                        tags, ruleProperties, dependencyGroupElement, leftHandSide, filterGroupElement, rightHandSide);

            return(ruleDefinition);
        }