/// <summary>
        /// Executes the chain of routing rules specified in 'input.Rules'.
        /// </summary>
        /// <param name="pipeline">Chain of routing rules.</param>
        /// <returns>List of Tasks which should be scheduled.</returns>
        internal static List <Type> GetRoutingTasks(RoutingRulesPipeline pipeline)
        {
            List <Type> ruleTypes = new List <Type>();

            foreach (var rule in pipeline.Rules)
            {
                if (rule.RoutingRule == null)
                {
                    rule.RoutingRule = Factory.GetRule(rule.RuleQName) as RoutingRule;
                }

                if (rule.RoutingRule.CanExecute(pipeline.EntityInstance))
                {
                    ruleTypes.AddRange(rule.RoutingRule.GetNextTasks(pipeline.EntityInstance));
                }
            }

            return(ruleTypes);
        }
Beispiel #2
0
        /// <summary>
        /// Schedules list of defined routed tasks calculated from list of specified routing rules.
        /// </summary>
        /// <param name="rulesPipeline"></param>
        /// <returns></returns>
        public Task <RoutingRuleResult>[] ScheduleRoutedTasks(TaskInput taskArgument,
                                                              RoutingRulesPipeline rulesPipeline)
        {
            List <Task <RoutingRuleResult> > tasks = new List <Task <RoutingRuleResult> >();

            if (rulesPipeline == null || rulesPipeline.Rules == null)
            {
                return(tasks.ToArray());
            }

            // We set the instance which will be checked by rule.
            // Not every rule can process every instance.
            rulesPipeline.EntityInstance = taskArgument;

            var routingTasks = RulesManager.GetRoutingTasks(rulesPipeline);

            foreach (var routingTaskType in routingTasks)
            {
                tasks.Add(m_Context.ScheduleTask <RoutingRuleResult>(routingTaskType, taskArgument));
            }

            return(tasks.ToArray());
        }