protected internal virtual void VisitActionGroup(TContext context, ActionGroupElement element) { foreach (ActionElement action in element.Actions) { action.Accept(context, this); } }
/// <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); }
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); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }